第07回: 環境変数と.env管理 — 秘密情報をyamlに書かないための正しい設計

章: 第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}.envAPP_PORT=8080 で展開されます。docker compose config を実行すると、変数展開後の最終的なYAMLを確認できます。

まとめ & 次のステップ

  • パスワードなどの秘密情報は compose.yml に直書きしない
  • .env ファイルに値を書き、.gitignore でGitから除外する
  • .env.example を用意してチームと共有できる雛形を残す
  • docker compose config で変数展開後の設定を確認する習慣をつける

次回は「ヘルスチェックと起動順制御」を学びます。DBが起動する前にアプリが接続しようとして失敗する問題を、Composeの機能で解決します。

Related Articles