Skip to content
Latchkey

containerd vs Docker: ランタイム vs フルエンジン

containerd は実際にコンテナを動かす低レベルのランタイムです。Docker はその上に構築されたフルエンジンと開発者体験です。

Docker は完全なコンテナプラットフォームで - CLI、build、ネットワーク、開発者向けの使いやすさ - 内部で containerd を使っています。containerd は CNCF を卒業した、イメージを pull しコンテナを動かすことに特化したランタイムです。nerdctl のようなツールが Docker に似た CLI を提供します。両者は異なるレイヤーで動作します。

containerdDocker
レイヤーコアランタイムフルエンジン(containerd を使用)
CLIctr / nerdctldocker
イメージのビルドBuildKit/nerdctl 経由組み込み
最適な用途プラットフォーム、Kubernetes ノード開発者 + CI ワークフロー
使いやすさより低レベル高い

CI で

ほとんどの pipeline では、Docker が適切な抽象化レベルです - build、run、push を 1 つの CLI で行えます。containerd はプラットフォーム自体を運用する場合(Kubernetes ノードはこれをランタイムとして使います)や、Docker に似た体験のために nerdctl と最小限のランタイムが欲しい場合に重要になります。両者を比較することは、実はレイヤーを比較することです。Docker は開発者向けエンジン、containerd はコンテナを動かすものです。

高速化する

ランタイムに関わらず、イメージのレイヤーを cache します。どちらも CI runner 上で動作します。より高速な managed runner は pull と build を短縮します。

結論

CI と開発向けの完全で使いやすいエンジンが欲しい場合: Docker。プラットフォームを運用する、または最小限のランタイム(多くの場合 nerdctl と併用)が欲しい場合: containerd。多くのチームにとって、これらは厳密な二者択一ではなく補完的なレイヤーです。

関連ガイド