導入
同じイメージを、開発では「開発用DB」、本番では「本番用DB」に繋ぎたい——イメージを作り直さずに設定を切り替える標準の方法が 環境変数 です。パスワードや接続先を、コードやイメージに焼き付けず、起動時に外から渡します。
説明
環境変数は docker run の -e KEY=VALUE で渡します。いくつでも並べられます。
docker run -d -e POSTGRES_PASSWORD=secret -e POSTGRES_DB=shop --name db postgres:16
多くの公式イメージは、こうした環境変数で挙動を決めます。上の postgres なら、POSTGRES_PASSWORD で初期パスワード、POSTGRES_DB で作るデータベース名を指定します。イメージは1つのまま、渡す値だけで設定が変わる——これが環境変数の力です。
flowchart LR
IMG["postgres:16<br/>(同じイメージ)"]
IMG -->|"-e POSTGRES_DB=dev_shop"| C1["開発用コンテナ"]
IMG -->|"-e POSTGRES_DB=shop"| C2["本番用コンテナ"]
コンテナに実際に渡った環境変数は、docker exec <名前> env で確認できます。
docker exec db env
一覧の中に POSTGRES_PASSWORD=secret や POSTGRES_DB=shop が並んでいるはずです。
変数がたくさんあるときは、1つのファイルにまとめて --env-file で渡せます。
docker run -d --env-file .env --name db postgres:16
flowchart TD
A[".env ファイル<br/>POSTGRES_PASSWORD=secret<br/>POSTGRES_DB=shop"] -->|"--env-file .env"| C["コンテナ"]
鉄則(第5章・Gitコースと共通):パスワードや API キーを、Dockerfile やソースコードに直書きしない。環境変数で外から渡し、
.envファイルは.gitignoreで Git に載せない。Linux コースの「バイナリに埋めた秘密は読まれる(strings)」、Git コースの「秘密は Secrets へ」——同じ原則が Docker でも生きます。
やってみよう
docker run -d -e POSTGRES_PASSWORD=secret -e POSTGRES_DB=shop --name db postgres:16を実行しましょう。docker exec db envで、渡した環境変数がコンテナ内に届いていることを確認してください。docker inspect dbの"Env"にも同じ値が記録されています。