hysryt / wiki

https://hysryt.github.io/wiki/
0 stars 0 forks source link

コンテナ技術 #160

Open hysryt opened 3 years ago

hysryt commented 3 years ago

https://opencontainers.org/

hysryt commented 3 years ago

コンテナイメージ

コンテナイメージの仕様はOCI(Open Container Initiative)が定めている。 https://github.com/opencontainers/image-spec

Dockerのコンテナイメージはmobyコミュニティにより定められており、OCIのイメージとは若干異なる。 https://github.com/moby/moby/blob/master/image/spec/v1.2.md

コンテナイメージには、

などが含まれる。

コンテナランタイムはコンテナイメージを基にコンテナを作成する。

hysryt commented 3 years ago

コンテナランタイム

コンテナランタイムは「低レベルコンテナランタイム」と「高レベルコンテナランタイム」に分けられる。 全体を通して、Image → Bundle → Container の流れでコンテナを作成する。

低レベルコンテナランタイム

OCIランタイムともいう。

Bundle → Container の役割を担い、コンテナに対して、作成、開始、シグナルの送信、削除、状態の取得を行う。

Filesystem bundle から設定ファイルを読み込み、その情報を使用してコンテナを作成し、コンテナ内のプロセスを起動し、その他のライフサイクルアクションを実行する。

Filesystem bundle とは以下のものをまとめたもので、コンテナイメージから作成できる。

低レベルコンテナランタイムの仕様はOCI(Open Container Initiative)が定めている。 https://github.com/opencontainers/runtime-spec/blob/master/spec.md

この仕様のリファレンス実装として runc が用意されている。 Docker はコンテナランタイムといて runc を使用している。

高レベルコンテナランタイム

CRIを実装しているものはCRIランタイムともいう。

Image → Bundle の役割を担う。 コンテナイメージの取得、低レベルコンテナランタイムの呼び出しを行う。

containerd などがある。

containerd

https://github.com/containerd/containerd CRIを実装しているためKubernetesから使用できる。 Dockerもcontainerdを使用している。 もともとはDockerが開発していたが、現在はCNCFに譲渡されている。

Docker

CRIを実装していない。 今まではkubectlがdockershimを含んでいたが、1.20から削除されるらしいため、Kubernetesから使用できなくなる。 https://blog.inductor.me/entry/2020/12/03/061329

CRI-O

https://github.com/cri-o/cri-o CRIを実装している。 Kubernetesでの使用にフォーカスがあてられている。