章: 第2章: Docker Compose実践
「開発と本番で同じ compose.yml を使えばいい」は危険な考え方
開発環境には「デバッグツール」「ソースコードのバインドマウント」「パスワードの簡略化」など、本番に含めてはいけない設定が多く含まれます。同じファイルを使い回すと、デバッグ機能が本番に混入したり、ソースコードが誤った場所からロードされるリスクがあります。
Composeのファイル分割機能を使うと、共通設定は一か所に持ちつつ、環境ごとの差分だけを別ファイルで管理できます。
なぜ設定を分離するべきか
開発と本番では必要な設定が大きく異なります。
| 設定 | 開発環境 | 本番環境 |
| ソース | Bind Mount(即時反映) | イメージにCOPY済み |
| ポート公開 | すべてホストに公開 | 必要最小限のみ |
| デバッグ設定 | 有効(詳細エラー表示) | 無効(セキュリティ) |
| パスワード | 簡易(secret等) | 強固(シークレット管理) |
| restart | 不要 | always または unless-stopped |
チェックポイント:
compose.override.ymlはデフォルトで自動読み込みされます。このファイルを開発用の差分定義として使うと、docker compose upだけで開発設定が適用され、本番では明示的に-fで指定する運用が整います。
実際のコマンドサンプル
# 開発
docker compose up -d
# 本番向け(例)
docker compose -f compose.yml -f compose.prod.yml up -d --build
compose.yml に共通設定を置き、compose.prod.yml に本番差分を書きます。開発時は up -d だけで compose.override.yml が自動適用されます。
まとめ & 次のステップ
- 開発と本番を同じ
compose.ymlで管理するのはリスクがある compose.override.ymlを開発用差分ファイルとして活用する- 本番は
-f compose.yml -f compose.prod.ymlで明示的にファイルを指定する - 本番ファイルにはデバッグ設定・Bind Mount・簡易パスワードを含めない
次回は「DockerでPHP+MySQL環境を作る」を学びます。ここまでの知識を組み合わせて、PHPアプリが動く実践的な開発環境を構築します。