DockerとKubernetesの違いとは?初心者向けに役割・仕組み・使い分けをわかりやすく解説
結論から言うと、Dockerは「コンテナを作成・実行する技術」、Kubernetes(クバネティス)は「大量のコンテナを自動で管理・運用する仕組み」です。
どちらもコンテナ技術として一緒に語られることが多いですが、役割はまったく異なります。Dockerだけでもコンテナは動かせますが、コンテナが増えると管理が大変になるため、その管理を自動化するためにKubernetesが利用されます。
Dockerとは
Dockerとは何か
Dockerは、アプリケーションと必要なライブラリをひとまとめにした「コンテナ」を作成・実行するためのソフトウェアです。
開発者のパソコンでも本番サーバーでも同じ環境を簡単に再現できるため、現在では多くの企業で利用されています。
Dockerでできる主なことは次のとおりです。
- コンテナの作成
- コンテナの起動・停止
- アプリケーションの配布
- 開発環境の統一
Kubernetes(K8s)とは
Kubernetesとは何か
Kubernetes(K8s)は、複数のDockerコンテナやコンテナランタイムで動くコンテナを自動的に管理・運用するためのコンテナオーケストレーションツールです。
コンテナが数十台、数百台になると、人が手作業で管理することは現実的ではありません。Kubernetesは、コンテナの起動・停止・負荷分散・障害復旧などを自動で実行します。
「K8s」という略称は、Kubernetesの先頭の「K」と最後の「s」の間に8文字あることから付けられています。
DockerとKubernetesの違い
| 比較項目 | Docker | Kubernetes |
|---|---|---|
| 役割 | コンテナを作成・実行する | コンテナを管理する |
| 対象 | 1台または少数のコンテナ | 大量のコンテナ |
| 負荷分散 | 基本的になし | 自動で実施 |
| 障害復旧 | 手動対応が基本 | 自動再起動が可能 |
| スケール | 手動 | 自動・手動の両方に対応 |
| 用途 | 開発・検証・小規模運用 | 本番環境・大規模システム |
イメージで理解する違い
Dockerは「トラック」
荷物(アプリケーション)を運ぶトラックがDockerです。
荷物を安全に目的地まで届ける役割があります。
Kubernetesは「物流センターの管理者」
物流センターでは何百台ものトラックが行き来しています。
Kubernetesは、どのトラックを動かすか、故障したトラックをどうするか、荷物をどこへ運ぶかを自動で管理する司令塔のような存在です。
どんな場面で使われるのか
Dockerが使われる場面
- Webアプリの開発
- 開発環境の共有
- 検証環境
- 社内ツールの実行
- CI/CD環境
Kubernetesが使われる場面
- クラウドサービス
- 大規模Webサービス
- マイクロサービス
- 24時間稼働するシステム
- 自動スケーリングが必要なシステム
なぜ重要なのか
現在のクラウド環境では、Dockerでアプリケーションをコンテナ化し、Kubernetesで管理する構成が一般的です。
社内SEや運用保守担当でも、Dockerコンテナのログ確認やKubernetes上で動作するシステムの障害対応を行う機会が増えています。
初心者が混乱しやすいポイント
- DockerとKubernetesを同じソフトだと思ってしまう
- Kubernetesがコンテナを作るソフトだと思う
- DockerがなくてもKubernetesは動かないと思ってしまう
- Docker ComposeとKubernetesを同じ用途だと思ってしまう
KubernetesはDockerだけでなく、containerdなどのコンテナランタイムとも連携できます。また、Docker Composeは複数のコンテナをまとめて起動するためのツールであり、Kubernetesほど高度な管理機能はありません。
実際のIT現場での利用例
| システム | 利用技術 |
|---|---|
| 開発者PC | Docker |
| テスト環境 | Docker Compose |
| 本番Webサービス | Docker+Kubernetes |
| クラウド基盤 | Kubernetes |
| CI/CD環境 | Docker |
筆者の経験談
私が初めてDockerを使ったときは、「Dockerだけで本番運用も十分ではないか」と考えていました。しかし、複数のコンテナを運用する案件では、障害時の自動復旧や負荷分散、ローリングアップデートが必要となり、Kubernetesの重要性を実感しました。
一方で、小規模な社内システムではDockerだけで十分なケースも多く、システムの規模に応じて使い分けることが大切だと感じています。
業務でよくあるトラブル例
- Dockerコンテナが起動しない
- Dockerイメージの容量が増えすぎる
- KubernetesでPodが起動しない
- ノード障害でコンテナが停止する
- 設定ファイルの記述ミスでデプロイに失敗する
原因の切り分け
| 確認対象 | 確認内容 |
|---|---|
| ユーザー側 | 全員に影響があるか |
| ネットワーク | 通信できるか |
| Docker | コンテナが起動しているか |
| Kubernetes | PodやDeploymentが正常か |
| アプリケーション | ログにエラーがないか |
確認する順番
- 障害の影響範囲を確認する
- サーバーへ接続できるか確認する
- DockerコンテナまたはPodの状態を確認する
- ログを確認する
- 設定変更履歴やデプロイ履歴を確認する
- 必要に応じて担当部署へエスカレーションする
GUIでの確認方法
- Docker Desktop
- Portainer
- Kubernetes Dashboard
- Lens
これらのツールを利用すると、コンテナやPodの状態、リソース使用率、ログなどを視覚的に確認できます。
CUI(コマンド)での確認方法
Docker
- docker ps(起動中のコンテナ一覧)
- docker images(イメージ一覧)
- docker logs コンテナ名(ログ確認)
- docker exec(コンテナ内でコマンド実行)
Kubernetes
- kubectl get pods(Pod一覧)
- kubectl get nodes(ノード一覧)
- kubectl describe pod(詳細情報)
- kubectl logs(ログ確認)
確認結果の見方
Dockerでは、コンテナの状態が「Up」と表示されていれば正常に稼働していることが多いです。
Kubernetesでは、Podの状態が「Running」であれば正常、「CrashLoopBackOff」や「Pending」などが表示されている場合は、設定やリソース不足などの問題が考えられます。
ログの確認方法
Dockerでは「docker logs」、Kubernetesでは「kubectl logs」を利用してアプリケーションのエラーメッセージを確認します。
また、Kubernetesではイベント情報も確認すると、スケジューリング失敗やイメージ取得エラーなど、原因の特定に役立つことがあります。
ショートカットキー
| キー | 用途 |
|---|---|
| Ctrl + C | 実行中のコマンドを中断 |
| Tab | コマンドやファイル名の補完 |
| ↑キー | 直前のコマンドを呼び出す |
| Ctrl + L | 画面をクリア |
初心者がやりがちなミス
- コンテナを削除してデータも消えてしまう
- ログを確認せずに再起動する
- 本番環境へ直接設定変更する
- DockerとKubernetesの役割を混同する
注意点
本番環境では、Kubernetesの設定変更やPodの削除がサービス停止につながる場合があります。
設定変更や再デプロイを行う前に、影響範囲を確認し、必要に応じてバックアップやロールバック手順を準備しましょう。
上司へ報告するポイント
- 障害発生時刻
- 影響を受けているシステム
- DockerコンテナまたはPodの状態
- 確認したログやイベント
- 実施した対応内容
- 現在の状況と今後の対応予定
エスカレーションするタイミング
- Podが繰り返し異常終了する
- ノード障害が発生している
- 原因が特定できない
- 本番環境への影響が大きい
- クラスタ全体に障害が広がっている
応用知識
DockerとKubernetesは競合する技術ではなく、組み合わせて利用されることが一般的です。
例えば、Dockerで作成したコンテナイメージをKubernetesへデプロイし、自動でスケールや障害復旧を行う構成は、多くのクラウドサービスで採用されています。
関連するIT用語
- コンテナ
- Docker Compose
- containerd
- Pod
- Deployment
- Node
- Namespace
- Ingress
- CI/CD
- マイクロサービス
よくある質問(FAQ)
Dockerだけでも運用できますか?
はい。小規模なシステムや開発・検証環境ではDockerだけで十分な場合が多くあります。
Kubernetesは必ず必要ですか?
いいえ。コンテナ数が少ない環境では必要ないこともあります。大規模な本番環境や高可用性が求められるシステムで導入されることが一般的です。
Docker ComposeとKubernetesは何が違いますか?
Docker Composeは複数のコンテナをまとめて起動・停止するためのツールです。一方、Kubernetesは負荷分散や自動復旧、スケーリングなど、本番運用に必要な高度な管理機能を提供します。
社内SEでもDockerやKubernetesを学ぶ必要はありますか?
オンプレミス中心の環境ではDockerを利用する機会が多く、クラウドやモダンなシステムを扱う企業ではKubernetesの知識も求められることがあります。まずはDockerでコンテナの基本を理解し、その後にKubernetesを学ぶとスムーズです。
まとめ
DockerとKubernetesは役割が異なるため、どちらか一方を選ぶ技術ではありません。
- Dockerはコンテナを作成・実行する技術
- Kubernetesは大量のコンテナを自動で管理する仕組み
- 小規模環境ではDockerだけで十分なことが多い
- 大規模な本番環境ではKubernetesが活躍する
- 現在のクラウド環境では、Dockerで作成したコンテナをKubernetesで管理する構成が一般的
初心者の方は、まずDockerでコンテナの基本を理解し、その後にKubernetesのPodやDeploymentなどの概念を学ぶと、コンテナ技術全体を理解しやすくなります。
