Kubernetesを学び始めると、「そもそもDockerとKubernetesってどう違うの?」「Kubernetesを使うならDockerはもういらないの?」といった疑問が浮かぶと思います。これは非常に本質的な質問で、Kubernetesを正しく理解するための重要なポイントです。
🚢 Dockerとは何か(おさらい)
まず、Dockerは**「アプリケーションとその実行環境を1つの箱(コンテナ)にまとめる」ための技術**です。
例えば、あるWebアプリケーションが Node.js 18
で動いていて、特定のバージョンのライブラリが必要な場合、それをDockerコンテナとしてパッケージしておけば、どの環境でも同じように動かせます。
つまりDockerは、”アプリの実行単位(箱)” をつくるための道具です。
⚙️ Kubernetesとは何か(比較)
一方、Kubernetesは**「その箱(Dockerコンテナ)を大量に動かし、監視し、自動で配置・復旧させる仕組み」です。
つまり、Dockerが1つのアプリを動かすのに対し、Kubernetesはたくさんのアプリ(コンテナ)を管理・運用するプラットフォーム**です。
観点 | Docker | Kubernetes |
---|---|---|
役割 | コンテナの作成・実行 | コンテナの配置・スケーリング・復旧など |
単位 | コンテナ単体 | クラスタ全体の管理 |
実行例 | docker run nginx | kubectl apply -f nginx.yaml |
🔄 実際にはどう連携しているの?
Kubernetesは、自分で直接コンテナを実行するわけではありません。
実際にコンテナを起動するのは、Nodeにインストールされている「コンテナランタイム」です。
昔はこのランタイムとして Dockerエンジン を使うことが多かったのですが、現在のKubernetes(v1.20以降)では、Dockerは直接サポートされていません。代わりに、以下のような軽量なコンテナランタイムが使われます:
containerd
(Dockerから分離した、よりシンプルなランタイム)CRI-O
(Kubernetes向けに最適化されたランタイム)
つまり、
🟡 開発時(ローカル):
→ Dockerでイメージを作成する(例:docker build
)
🟢 運用時(クラスタ):
→ Kubernetesが containerd などを通じてそのイメージを使ってPodを実行する
❓ Dockerはもういらないの?
いりませんとは言い切れません。
- ローカル開発環境ではDockerは今も有力なツールです。
アプリを素早く試す、ビルドする、テストするために便利です。 - 本番運用では、KubernetesがDocker以外のランタイムで動いていても問題なしです。
ビルドされたDockerイメージは、containerdなどでもそのまま使えます。
🧠 まとめ
- Dockerは「アプリケーションをコンテナ化」する技術
- Kubernetesは「たくさんのコンテナを自動で管理・運用」する仕組み
- Kubernetesは今やDockerではなく
containerd
などのランタイムで動いているが、Dockerで作ったイメージはそのまま使える - ローカルではDocker、クラウドではKubernetesのように役割分担が変わってきている