2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Docker】Docker ComposeとKubernetesの違いを徹底解説

Posted at

はじめに

コンテナ技術が普及する中で、「Docker Compose」と「Kubernetes」という2つのツールを耳にする機会が増えています。どちらもコンテナオーケストレーションに関わるツールですが、その役割やスコープは大きく異なります。

この記事では、Docker ComposeとKubernetesの違いを明確にし、プロジェクトに応じた適切なツール選択ができるようになることを目指します。

対象読者

  • Dockerの基本操作を理解している方
  • Docker Composeを使った経験がある方
  • Kubernetesに興味があり、導入を検討している方

前提知識

  • Dockerコンテナの基本概念
  • YAMLファイルの読み書き
  • 基本的なネットワーク・インフラの知識

Docker Composeとは

Docker Composeは、複数のDockerコンテナを定義・管理するためのツールです。1つのYAMLファイル(docker-compose.yml)で複数のサービスを宣言的に記述し、docker compose upコマンド一発で環境を立ち上げることができます。

主な機能と特徴

特徴 説明
シンプルな設定 1ファイルで複数コンテナを定義
ローカル開発向け 開発環境の構築に最適
依存関係管理 サービス間の起動順序を制御可能
ボリューム・ネットワーク 永続化とコンテナ間通信を簡単に設定

設定ファイルの例

# docker-compose.yml
version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    depends_on:
      - api

  api:
    build: ./api
    environment:
      - DATABASE_URL=postgres://db:5432/app
    depends_on:
      - db

  db:
    image: postgres:15
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=app
      - POSTGRES_PASSWORD=secret

volumes:
  postgres_data:

このように、Web、API、データベースの3層構成を簡潔に記述できます。


Kubernetesとは

Kubernetes(K8sとも呼ばれます)は、コンテナ化されたアプリケーションのデプロイ、スケーリング、運用を自動化するためのプラットフォームです。Googleが開発し、現在はCNCF(Cloud Native Computing Foundation)が管理しています。

主なコンポーネント

Kubernetesは多くのコンポーネントで構成されています。主要なものを理解しておきましょう。

コンポーネント 役割
Pod 最小デプロイ単位。1つ以上のコンテナを含む
Service Podへのネットワークアクセスを抽象化
Deployment Podのレプリカ数や更新戦略を管理
ConfigMap/Secret 設定情報や機密情報を管理
Ingress 外部からのHTTPルーティングを制御

設定ファイルの例

KubernetesではManifest(マニフェスト)ファイルでリソースを定義します。

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: myapp/api:v1.0.0
          ports:
            - containerPort: 8080
          resources:
            requests:
              memory: "128Mi"
              cpu: "250m"
            limits:
              memory: "256Mi"
              cpu: "500m"
---
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: api-service
spec:
  selector:
    app: api
  ports:
    - port: 80
      targetPort: 8080
  type: ClusterIP

Docker Composeと比較すると、設定がより詳細で冗長に見えますが、その分きめ細かい制御が可能です。


Docker ComposeとKubernetesの比較

アーキテクチャの違い

両者のアーキテクチャの違いを図で確認してみましょう。

比較表

観点 Docker Compose Kubernetes
対象環境 単一ホスト 複数ノードのクラスター
スケーラビリティ 限定的 高い(水平スケーリング対応)
可用性 自己修復なし 自動復旧・ローリングアップデート
ネットワーク シンプルなブリッジ 高度なネットワークポリシー
学習コスト 低い 高い
運用コスト 低い 高い(ただしマネージドサービス利用で軽減可)
設定の複雑さ シンプル 複雑(多くのリソースタイプ)
エコシステム 限定的 豊富(Helm、Istio、ArgoCD等)

スケーラビリティ

Docker Composeでは、docker compose up --scale api=3のようにレプリカ数を指定できますが、これはあくまで単一ホスト内での話です。ホストの物理リソースが上限となります。

Kubernetesでは、Deploymentのreplicasを変更するだけで、クラスター内の複数ノードにPodを分散配置できます。Horizontal Pod Autoscalerを使えば、CPU使用率などに基づいた自動スケーリングも可能です。

可用性・自己修復機能

Kubernetesの大きな強みは自己修復機能です。

  • Podがクラッシュすると自動的に再起動
  • ノードが故障すると別ノードにPodを再スケジュール
  • ヘルスチェックにより異常なPodを自動的にサービスから除外

Docker Composeにはこのような機能がないため、障害発生時は手動での対応が必要になります。

ネットワーキング

機能 Docker Compose Kubernetes
サービスディスカバリ コンテナ名で解決 DNS・Service抽象化
ロードバランシング 基本的なラウンドロビン 高度なトラフィック制御
Ingress なし HTTPルーティング対応
ネットワークポリシー なし Pod間通信の制御可能

どちらを選ぶべきか?〜 ユースケース別ガイド

Docker Composeが適しているケース

  • ローカル開発環境:開発者が手元で動かす環境の構築
  • CIパイプライン:テスト実行時の一時的な環境構築
  • 小規模プロジェクト:トラフィックが少なく、単一サーバーで十分な場合
  • プロトタイピング:素早くアイデアを形にしたい場合

Kubernetesが適しているケース

  • 本番環境:高可用性が求められるサービス
  • マイクロサービス:多数のサービスを管理する必要がある場合
  • 大規模トラフィック:オートスケーリングが必要な場合
  • マルチクラウド:複数のクラウドプロバイダーを跨ぐ運用

選択のフローチャート


Docker ComposeからKubernetesへの移行

組織やプロジェクトが成長すると、Docker ComposeからKubernetesへの移行を検討することがあります。

移行時の考慮点

  1. 学習コスト:チーム全体がKubernetesの概念を理解する必要がある
  2. インフラコスト:クラスター運用のためのリソースが必要
  3. 設定の書き換え:docker-compose.ymlをK8sマニフェストに変換
  4. 運用体制:監視・ログ収集・セキュリティの見直し

Komposeツールの紹介

Komposeは、docker-compose.ymlをKubernetesマニフェストに変換するツールです。

# インストール
brew install kompose

# 変換の実行
kompose convert -f docker-compose.yml

# 出力例
# - api-deployment.yaml
# - api-service.yaml
# - db-deployment.yaml
# - db-service.yaml

Komposeによる変換はあくまで出発点です。本番運用に向けては、リソース制限、ヘルスチェック、セキュリティコンテキストなどの追加設定が必要になります。


まとめ

Docker ComposeとKubernetesは、それぞれ異なる目的とスコープを持つツールです。

要点の振り返り

ポイント 内容
Docker Compose 単一ホストでの複数コンテナ管理。開発環境に最適
Kubernetes 分散クラスターでのコンテナオーケストレーション。本番環境に最適
選択基準 環境の規模、可用性要件、チームのスキルで判断
移行 Komposeツールで変換可能。ただし追加設定は必須

次のステップ

  • Docker Composeを深めたい方:公式ドキュメントでCompose Specificationを確認
  • Kubernetesを始めたい方:minikubeやkindでローカル環境を構築して実践
  • マネージドサービスを検討中の方:GKE、EKS、AKSなどの比較検討

両者は競合するものではなく、開発環境ではDocker Compose、本番環境ではKubernetesという使い分けが一般的です。プロジェクトのフェーズや要件に応じて、適切なツールを選択しましょう。


参考リンク

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?