第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に追加し、バージョン管理から除外すること。
.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の構文やコマンドは変更される可能性があります。最新情報は公式ドキュメントをご確認ください。
本章は2025年12月時点の情報に基づいています。Docker Composeの構文やコマンドは変更される可能性があります。最新情報は公式ドキュメントをご確認ください。