Open hysryt opened 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
コンテナイメージには、
などが含まれる。
コンテナランタイムはコンテナイメージを基にコンテナを作成する。
コンテナランタイムは「低レベルコンテナランタイム」と「高レベルコンテナランタイム」に分けられる。 全体を通して、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 などがある。
https://github.com/containerd/containerd CRIを実装しているためKubernetesから使用できる。 Dockerもcontainerdを使用している。 もともとはDockerが開発していたが、現在はCNCFに譲渡されている。
CRIを実装していない。 今まではkubectlがdockershimを含んでいたが、1.20から削除されるらしいため、Kubernetesから使用できなくなる。 https://blog.inductor.me/entry/2020/12/03/061329
https://github.com/cri-o/cri-o CRIを実装している。 Kubernetesでの使用にフォーカスがあてられている。
https://opencontainers.org/