Docker Compose

複数のコンテナをまとめて定義・起動するツールで、ローカル開発環境の構築に使われる

Docker開発環境

Docker Compose とは

Docker Compose は、複数のコンテナ (アプリ、DB、キャッシュ) を docker-compose.yml で定義し、docker compose up で一括起動するツールである。ローカル開発環境で「アプリ + PostgreSQL + Redis」のような構成を簡単に再現できる。

基本的な設定

# docker-compose.yml
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgresql://admin:secret@db:5432/myapp
      REDIS_URL: redis://cache:6379
    depends_on:
      db:
        condition: service_healthy
    volumes:
      - .:/app

  db:
    image: postgres:16
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: myapp
    volumes:
      - db-data:/var/lib/postgresql/data
    healthcheck:
      test: pg_isready -U admin
      interval: 5s

  cache:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  db-data:

コマンド

# 起動
docker compose up -d

# ログ
docker compose logs -f app

# 停止
docker compose down

# ボリュームも削除
docker compose down -v

# 再ビルド
docker compose up -d --build

Kubernetes との違い

観点 Docker Compose Kubernetes
用途 ローカル開発 本番環境
スケーリング 手動 (scale) 自動 (HPA)
ヘルスチェック 基本的 高度 (liveness, readiness)
ネットワーク サービス名で接続 Service + DNS
設定ファイル docker-compose.yml 複数の YAML マニフェスト

ローカル開発のパターン

ホットリロード

services:
  app:
    build: .
    volumes:
      - .:/app           # ソースコードをマウント
      - /app/node_modules # node_modules はコンテナ内のものを使う
    command: npm run dev  # ホットリロード付きで起動

DynamoDB Local

services:
  dynamodb:
    image: amazon/dynamodb-local
    ports:
      - "8000:8000"
    command: -jar DynamoDBLocal.jar -sharedDb

本番環境では使わない

Docker Compose はローカル開発用。本番環境では ECS、EKS、Fargate を使う。

環境 ツール
ローカル開発 Docker Compose
本番 (サーバーレス) Lambda + SAM
本番 (コンテナ) ECS / EKS

Docker Compose の理解を深めるには関連書籍が参考になる。

関連用語