こんにちは!Kubernetesエコシステムが進化し、Kubernetes v1.24からDockershimが完全に削除されました。これにより、多くのエンジニアの方々が慣れ親しんだDockerランタイムからContainerdランタイムへの強制(?)移行を余儀なくされました。😅
「え?じゃあ、もうdocker psは使えないんですか?」
はい、その通りです。Containerd環境ではDockerデーモンがないため、既存のコマンドは動作しません。
しかし、ご心配なく!Dockerとほぼ同じ体験を提供するツールがあります。今日は、Docker CLIに慣れている皆さんのために、Containerd環境でのサバイバルガイドとコマンド比較を非常に詳細にまとめました。

🛠️ Containerdを扱う3つのツール(どれを使うべきか?)
Containerdに移行すると、コマンドが一つに統一されず、状況に応じて3つのツールに直面することになります。まず、これらの正体を把握する必要があります。
- nerdctl (contaiNERD ctl): 👍 強く推奨
- Docker CLIと構文がほぼ100%互換性のあるツールです。
- docker build、docker-compose機能までサポートします。
- DockerのUXをそのまま感じたいなら、迷わずこれをインストールして使ってください。
- crictl (CRI ctl): 🕵️ K8sデバッグ用
- Kubernetesノードでコンテナランタイムインターフェース(CRI)をデバッグするためのツールです。
- Podの概念を理解しており、Kubernetesノードの状態を点検する際に主に使用します。
- イメージビルド(build)機能はありません。
- ctr: 🔧 低レベル(非推奨)
- Containerd自体に内蔵された基本CLIです。
- ユーザーフレンドリーではなく、デバッグ用としてのみ使用されます。(ほとんど使うことはありません。)
📊 Docker vs nerdctl vs crictl コマンド比較テーブル
最もよく使う機能を中心に比較してみました。nerdctlがDockerとどれだけ同じか確認してみてください!
| 機能 | Docker (既存) | nerdctl (推奨) | crictl (K8s デバッグ) | 備考 |
| — | — | — | — | — |
| バージョン確認 | docker version | nerdctl version | crictl version | |
| イメージ一覧 | docker images | nerdctl images | crictl images | |
| イメージ取得 | docker pull |
nerdctl pull |
crictl pull |
|
| イメージ削除 | docker rmi |
nerdctl rmi |
crictl rmi |
|
| コンテナ一覧 | docker ps | nerdctl ps | crictl ps | crictlはPod情報も表示 |
| 全コンテナ | docker ps -a | nerdctl ps -a | crictl ps -a | |
| コンテナ実行 | docker run -d … | nerdctl run -d … | ❌ サポートなし | crictlはPod作成後に実行する必要あり |
| ログ確認 | docker logs |
nerdctl logs |
crictl logs |
|
| コンテナ接続 | docker exec -it |
nerdctl exec -it |
crictl exec -it |
|
| イメージビルド | docker build . | nerdctl build . | ❌ サポートなし | 最大の相違点 |
| コンテナ削除 | docker rm |
nerdctl rm |
crictl rm |
|
| 情報確認 | docker inspect |
nerdctl inspect |
crictl inspect |
|
| イベント監視 | docker events | nerdctl events | crictl events |
—
🧐 主要ポイントの深掘り分析
単純なコマンドの違い以外にも、知っておくべき重要な概念があります。
1. ネームスペース (Namespace) の落とし穴 🕳️
Dockerは基本的にネームスペースをユーザーから隠しますが、Containerdはネームスペースを明確に区別します。
- Docker: ユーザーはネームスペースを気にする必要なし。
- Kubernetes (k8s.io): Kubernetesが作成したコンテナはk8s.ioというネームスペースに保存されます。
- 問題点: ctrやnerdctlをそのまま使うと、Kubernetesコンテナが見えない場合があります!
解決策:
# Kubernetesコンテナを見たい場合は?
nerdctl --namespace k8s.io ps
# または
ctr -n k8s.io container list
(参考: crictlは基本的にk8sの設定に従うため、ネームスペースの指定は不要です。)
2. イメージビルド (Build) 🏗️
Kubernetesノード上でイメージをビルドする必要がある場合があります。
- crictl: ビルド機能はありません。
- nerdctl: BuildKitを内蔵しており、docker buildと同様にDockerfileをビルドできます。
# nerdctlでイメージをビルドする
nerdctl build -t my-app:v1 .
3. Pod概念のサポート (crictl) 📦
crictlはDockerにはないPod関連のコマンドをサポートします。Kubernetesのトラブルシューティング時に役立ちます。
# 実行中のPodリストを確認
crictl pods
# 特定のPodの情報を確認
crictl inspectp <pod-id>
💡 結論と推奨戦略
Containerdにランタイムが変わったからといって、あまり怖がる必要はありません。戦略はシンプルです。
- 普段の開発/運用時: nerdctlをインストールして使用してください。alias docker=nerdctlを設定しておけば、違和感なく使用できます。
- Kubernetesノードのトラブルシューティング時: ノードにnerdctlをインストールするのが難しい場合は、デフォルトでインストールされているcrictlを使用してログを確認したり、コンテナの状態を確認したりしてください。
- ctrは忘れてください: 本当に深いレベルのデバッグでない限り、使用する機会はありません。
さあ、自信を持ってContainerd環境でもコマンドを実行してみましょう!🚀
コメントを残す