Docker Compose
複数コンテナの定義と管理
Docker Composeとは
Docker Composeは複数コンテナのアプリケーションをYAMLで定義し、 一括で管理するツールです。開発環境の構築や、 関連するサービス群のローカルテストに適しています。
基本構成
docker-compose.yml
yaml
1 version: '3.8' 2 3 services: 4 web: 5 build: . 6 ports: 7 - "3000:3000" 8 environment: 9 - NODE_ENV=development 10 - DATABASE_URL=postgres://db:5432/app 11 depends_on: 12 - db 13 - redis 14 volumes: 15 - ./src:/app/src 16 restart: unless-stopped 17 18 db: 19 image: postgres:15 20 environment: 21 POSTGRES_DB: app 22 POSTGRES_USER: user 23 POSTGRES_PASSWORD: password 24 volumes: 25 - db-data:/var/lib/postgresql/data 26 ports: 27 - "5432:5432" 28 29 redis: 30 image: redis:7-alpine 31 ports: 32 - "6379:6379" 33 34 volumes: 35 db-data:
主要な設定項目
image / buildimage: 既存イメージを使用、build: Dockerfileからビルド
portsポートマッピング。"ホスト:コンテナ"
volumesボリュームマウント。名前付きボリュームまたはバインドマウント
environment / env_file環境変数。直接指定または.envファイルから
depends_on起動順序の依存関係。ただしサービスの準備完了は待たない
networksカスタムネットワーク。サービス間の通信制御
Composeコマンド
1 # 起動 2 docker compose up # フォアグラウンド 3 docker compose up -d # バックグラウンド 4 docker compose up --build # ビルドしてから起動 5 6 # 停止 7 docker compose down # 停止・コンテナ削除 8 docker compose down -v # ボリュームも削除 9 docker compose stop # 停止のみ 10 11 # 状態確認 12 docker compose ps 13 docker compose logs 14 docker compose logs -f web # 特定サービスをフォロー 15 16 # スケール 17 docker compose up -d --scale web=3 18 19 # 実行 20 docker compose exec web bash # コンテナ内でコマンド 21 docker compose run web npm test # 新規コンテナで実行 22 23 # ビルド 24 docker compose build 25 docker compose build --no-cache
開発環境向け設定
docker-compose.yml
yaml
1 services: 2 web: 3 build: 4 context: . 5 dockerfile: Dockerfile.dev 6 volumes: 7 # ソースコードをマウント(ホットリロード) 8 - ./src:/app/src 9 # node_modulesはボリュームで分離 10 - node_modules:/app/node_modules 11 environment: 12 - NODE_ENV=development 13 - DEBUG=true 14 # ファイル変更を監視 15 develop: 16 watch: 17 - action: sync 18 path: ./src 19 target: /app/src 20 - action: rebuild 21 path: package.json 22 23 volumes: 24 node_modules:
複数環境の管理
1 # ファイル構成 2 # docker-compose.yml # 基本設定 3 # docker-compose.override.yml # 開発用(自動読み込み) 4 # docker-compose.prod.yml # 本番用 5 6 # 本番用で起動 7 docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d 8 9 # 環境変数ファイル 10 # .env ファイルは自動読み込み
docker-compose.prod.yml
yaml
1 services: 2 web: 3 image: myapp:latest # ビルド済みイメージを使用 4 restart: always 5 deploy: 6 resources: 7 limits: 8 cpus: '1' 9 memory: 512M
ヘルスチェック
1 services: 2 web: 3 image: myapp 4 healthcheck: 5 test: ["CMD", "curl", "-f", "http://localhost:3000/health"] 6 interval: 30s 7 timeout: 10s 8 retries: 3 9 start_period: 40s 10 depends_on: 11 db: 12 condition: service_healthy 13 14 db: 15 image: postgres:15 16 healthcheck: 17 test: ["CMD-SHELL", "pg_isready -U postgres"] 18 interval: 10s 19 timeout: 5s 20 retries: 5
SRE/インフラ観点
用途
- • 開発環境: ローカルでの開発・テスト
- • CI/CD: テスト環境の構築
- • 小規模本番: 単一ホストでのデプロイ
- • 大規模本番には Kubernetes を検討
注意点
- • depends_on はサービスの準備完了を待たない
- • ヘルスチェックと condition を組み合わせる
- • 機密情報は .env に分離し、Git管理外に