第09回: 開発用と本番用の分離 — 同じ設定ファイルを使い回すと危険な理由

章: 第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アプリが動く実践的な開発環境を構築します。

Related Articles