Skip to content
Latchkey

container runtime とは?コンテナを実行するソフトウェア

container runtime とは、イメージからコンテナを実際に起動・実行するソフトウェアであり、Docker や Kubernetes のような高レベルなツールの下にある層です。

コンテナを実行するとき、何かが namespace と cgroup を設定し、イメージを展開し、プロセスを起動しなければなりません。その「何か」が container runtime です。2つのレベルがあります - イメージと lifecycle を管理する高レベル runtime と、カーネルレベルの作業を行う低レベル runtime です - そしてこの区分を知ると、多くの混乱が解けます。

高レベルと低レベルの runtime

containerd や CRI-O のような高レベル runtime は、イメージ、storage、コンテナの lifecycle を管理します。その後、隔離されたプロセスを実際に作る syscall を行うために、runc のような低レベル runtime を呼び出します。Docker は内部で containerd を使います。

Docker の位置づけ

Docker は厳密な意味では runtime そのものではありません - それは containerd に委任する高レベルなプラットフォームであり、containerd はさらに runc に委任します。この階層化こそが、同じ containerd が Docker と Kubernetes の両方に対応できる理由です。

Kubernetes における CRI

Kubernetes は Container Runtime Interface(CRI)を通じて runtime と対話します。だからこそ Kubernetes は組み込みの Docker shim を廃止しました - node に Docker を必要とせず、containerd や CRI-O と直接 CRI で対話します。

代替の runtime

  • runc - 標準の OCI 低レベル runtime。
  • gVisor と Kata - sandbox や microVM によるより強力な隔離。
  • CRI-O - Kubernetes 向けに作られた軽量な CRI runtime。

runtime と CI

CI runner は container runtime を使って job を実行し、イメージを build します。直接それと関わることはめったにありませんが、それこそが作業を行うエンジンであり - よく管理された runner はそれを健全に保ち、job が確実に開始できるようにします。

重要なポイント

  • container runtime は、イメージからコンテナを起動・実行します。
  • 高レベル runtime(containerd、CRI-O)が、カーネル作業のために低レベルの runtime(runc)を呼び出します。
  • Kubernetes は CRI を介して runtime と対話します - node に Docker は不要です。

関連ガイド