Dock Stay
中レイヤのランタイム - containerd の使い方・オプション・サンプル

中レイヤのランタイム - containerd

Docker Engine の内部で使われ、Kubernetes でも主流となった中レイヤのコンテナランタイム。イメージ管理・実行・スナップショットなどを担う。

概念図

containerd diagram

構文

bash

containerd の立ち位置

containerd は Docker 社がコアコンポーネントを切り出して CNCF に寄贈したランタイムで、現在は Graduated プロジェクトです。

役割は「コンテナのライフサイクル管理」と「イメージとスナップショットの管理」に絞られており、ユーザー向け CLI や高レイヤの機能は持ちません。

Kubernetes では CRI(Container Runtime Interface)を介して kubelet から呼び出されます。

2022 年の Kubernetes v1.24 で dockershim が削除されて以降、多くのマネージド Kubernetes(EKS、GKE、AKS)が containerd をデフォルトに採用し、事実上の標準となっています。

Docker との関係(dockerd は内部で containerd を使う)

Docker Engine(dockerd)は、自身ですべてを実装しているわけではなく、実際のコンテナ起動や停止は内部で containerd に委譲しています。

さらに containerd は実行本体を低レイヤランタイム(通常は runc)に引き渡します。

つまり docker run は「dockerd → containerd → runc」という 3 層を経由してコンテナを起動します。

このため Kubernetes が「Docker ではなく containerd を直接使う」選択をしても、ユーザーが扱うイメージ形式や動作は本質的に変わりません。

CLI の有無と API 境界がどこに引かれているかが主な違いです。

ctr / nerdctl コマンド

ctr は containerd に同梱される低レベル CLI で、デバッグや動作確認を目的としています。

イメージの pull、タスクの起動などはできますが、ユーザー体験は dockerpodman と比べてかなり素朴です。

日常的な操作には nerdctl が推奨されます。

nerdctl は docker 互換の CLI を持ちつつ containerd と直接通信し、BuildKit・Compose・rootless・暗号化・lazypull など新しい機能を積極的に取り込んでいます。

Kubernetes ノード上でのトラブルシュートでは crictl が CRI 経由でコンテナを一覧・操作するための標準ツールとなります。

bash
sudo ctr images pull docker.io/library/alpine:3.19
sudo nerdctl run --rm -it alpine:3.19 sh
sudo crictl ps

関連トピック