第3章 Docker Compose

更新日:2025年12月27日

本章では、Docker Composeによる複数コンテナの管理方法について解説する。docker-compose.ymlの構文、サービス定義、依存関係の設定、環境変数の管理、および実践的な構成例を習得することを目的とする。
🎧

この章を音声で聴く

再生速度:

1. Docker Composeの概要

1.1 複数コンテナ管理

Docker Composeは、複数のコンテナで構成されるアプリケーションを定義・実行するためのツールである。YAMLファイルでサービス、ネットワーク、ボリュームを宣言的に記述し、単一のコマンドで環境全体を起動・停止できる。

典型的なユースケースとして、Webアプリケーション + データベース + キャッシュサーバーのような構成がある。

1.2 YAML構文

docker-compose.ymlはYAML形式で記述する。インデントによる階層構造が重要であり、スペース2つまたは4つを一貫して使用する。

version: '3.8'

services:
  web:
    build: .
    ports:
      - "8000:8000"
  
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: secret

2. docker-compose.yml

2.1 サービス定義

servicesセクションで各コンテナを定義する。

version: '3.8'

services:
  # Pythonアプリケーション
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: my-python-app
    restart: unless-stopped
    depends_on:
      - db
      - redis
    
  # PostgreSQLデータベース
  db:
    image: postgres:15
    container_name: my-postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data
    
  # Redisキャッシュ
  redis:
    image: redis:7-alpine
    container_name: my-redis

volumes:
  postgres_data:

2.2 ポートマッピング

portsセクションでホストとコンテナのポートをマッピングする。

services:
  web:
    image: nginx
    ports:
      # ホストポート:コンテナポート
      - "80:80"
      - "443:443"
      
      # ホストの特定IPにバインド
      - "127.0.0.1:8080:80"
      
      # ホストポートをランダムに割り当て
      - "80"

2.3 環境変数

環境変数の設定方法は複数ある。

services:
  app:
    image: my-app
    
    # 直接指定
    environment:
      - DEBUG=true
      - DATABASE_URL=postgres://user:pass@db:5432/mydb
    
    # ファイルから読み込み
    env_file:
      - .env
      - .env.local

.envファイルの例:

DEBUG=false
SECRET_KEY=your-secret-key
DATABASE_URL=postgres://user:pass@db:5432/mydb
セキュリティ注意
.envファイルには機密情報が含まれるため、.gitignoreに追加し、バージョン管理から除外すること。

3. 主要コマンド

3.1 up / down

サービスの起動と停止に関するコマンドを以下に示す。

# すべてのサービスを起動
docker compose up

# バックグラウンドで起動
docker compose up -d

# イメージを再ビルドして起動
docker compose up --build

# 特定のサービスのみ起動
docker compose up app db

# すべてのサービスを停止・削除
docker compose down

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

3.2 logs / exec

ログ確認とコンテナ内でのコマンド実行。

# すべてのサービスのログを表示
docker compose logs

# 特定サービスのログをフォロー
docker compose logs -f app

# コンテナ内でコマンド実行
docker compose exec app bash

# コンテナ内でPythonシェル起動
docker compose exec app python

# ワンショットコマンド(新しいコンテナで実行)
docker compose run app pytest
ポイント
execは実行中のコンテナに接続、runは新しいコンテナを作成して実行。テストやマイグレーションにはrunが適している。

4. 実践例

AIエージェント開発環境の構成例を以下に示す。

version: '3.8'

services:
  # AIエージェントアプリケーション
  agent:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: ai-agent
    ports:
      - "8000:8000"
    environment:
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - DATABASE_URL=postgres://user:pass@db:5432/agent_db
    depends_on:
      - db
      - browser
    volumes:
      - ./src:/app/src
      - ./logs:/app/logs
    networks:
      - agent-network
  
  # Playwright用ブラウザ
  browser:
    image: mcr.microsoft.com/playwright:v1.40.0-jammy
    container_name: playwright-browser
    networks:
      - agent-network
  
  # PostgreSQL
  db:
    image: postgres:15
    container_name: agent-db
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: agent_db
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - agent-network

volumes:
  postgres_data:

networks:
  agent-network:
    driver: bridge

実践ステップ

Step 1:プロジェクトディレクトリにdocker-compose.ymlを作成

Step 2:.envファイルに環境変数を設定

Step 3:docker compose up -dで起動

Step 4:docker compose logs -f agentでログ確認

参考・免責事項
本章は2025年12月時点の情報に基づいています。Docker Composeの構文やコマンドは変更される可能性があります。最新情報は公式ドキュメントをご確認ください。