Docker Composeとは
Docker Composeは、複数のコンテナを一括で定義・起動・管理できる公式ツールです。設定はdocker-compose.ymlという YAML 形式のファイルに記述します。
docker-compose.yml の基本構造
Compose ファイルの最低限の構造は次の通りです。
version: '3.8'
services:
app:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
主要ディレクティブの説明
- version:Compose のファイルバージョン。最新の機能を使うには “3.8” などを指定します。
- services:起動するコンテナ(サービス)を定義します。
- image:使用する Docker イメージ。
- build:Dockerfile からビルドする場合に指定。
- ports:ホストとコンテナのポートマッピング。
- volumes:ホストディレクトリや named volume をマウント。
- environment:環境変数を設定。
- depends_on:起動順序の依存関係を定義。
実践的なサンプル
Web アプリ(Node.js)とデータベース(PostgreSQL)を組み合わせた例です。
version: '3.8'
services:
web:
build: ./web
ports:
- "3000:3000"
environment:
- NODE_ENV=production
depends_on:
- db
volumes:
- ./:/app
db:
image: postgres:13
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- db_data:/var/lib/postgresql/data
ports:
- "5432:5432"
volumes:
db_data:
ポイント解説
- Web サービスは
buildでローカルの Dockerfile を指定し、コード変更時に自動でリビルドできます。 depends_onによって DB が先に起動することを保証しますが、起動後のヘルスチェックは別途実装が必要です。- 永続化データは
volumesセクションで named volume(db_data)として管理し、コンテナ削除後もデータが残ります。
よくある質問
1. Compose ファイルのバージョンはどれを選べば良いですか?
最新機能を利用したい場合は 3.8(または Docker が推奨する最新版)を使用します。古い Docker Engine しか使えない環境では、対応バージョンを確認してください。
2. 環境変数を外部ファイルから読み込むには?
次のように env_file を指定します。
services:
web:
env_file:
- .env
3. 複数の Compose ファイルを組み合わせるには?
docker compose -f docker-compose.yml -f docker-compose.override.yml up -d のように -f オプションで複数ファイルを指定できます。上位のファイルが下位の設定を上書きします。