章: 第2章: Docker Compose実践
パスワードをcompose.ymlにベタ書きしていませんか?
MYSQL_ROOT_PASSWORD: secret をそのまま compose.yml に書いてGitにコミットすると、リポジトリに秘密情報が残り続けます。これはセキュリティ上の深刻なリスクです。
.env ファイルと環境変数の仕組みを正しく使うことで、秘密情報をコードから分離し、環境ごとの差分を安全に管理できるようになります。
.envを使うと何が変わるか
.env ファイルに設定値を書き、compose.yml では変数参照(${VAR_NAME})を使います。こうすることで次が実現します。
.envを.gitignoreに追加し、Gitに秘密情報を含めない- 開発・ステージング・本番で異なる
.envを差し替えるだけで切り替えできる compose.yml自体はどの環境でも同じファイルを使える
.envとenv_fileの使い分け
| 方法 | 特徴 | 向いている場面 |
.env(Compose自動読込) |
${VAR} でcompose.yml内で参照 |
ポート番号・DB名など構成値 |
env_file: |
ファイルの変数をコンテナに注入 | アプリケーションに渡す設定値 |
environment: 直書き |
値がYAMLに残る | 非秘密の固定値のみ |
チェックポイント: パスワードやAPIキーは
environment:に直書きしない。.envに書いて.gitignoreに追加し、リポジトリに含めないのが鉄則です。
実際の設定サンプル
# .env
APP_PORT=8080
MYSQL_DATABASE=blog
MYSQL_ROOT_PASSWORD=secret
# compose.yml
services:
app:
ports:
- "${APP_PORT}:8080"
${APP_PORT} が .env の APP_PORT=8080 で展開されます。docker compose config を実行すると、変数展開後の最終的なYAMLを確認できます。
まとめ & 次のステップ
- パスワードなどの秘密情報は
compose.ymlに直書きしない .envファイルに値を書き、.gitignoreでGitから除外する.env.exampleを用意してチームと共有できる雛形を残すdocker compose configで変数展開後の設定を確認する習慣をつける
次回は「ヘルスチェックと起動順制御」を学びます。DBが起動する前にアプリが接続しようとして失敗する問題を、Composeの機能で解決します。