本文へスキップ
BecomeCoder

Dockerコース · 第8章 本番運用の作法 · レッスン27

環境変数 ― 設定をコンテナの外から渡す

ブラウザで完結

導入

同じイメージを、開発では「開発用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=secretPOSTGRES_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" にも同じ値が記録されています。

実際に動かしてみよう

下の端末に docker コマンドを打って Enter を押すと、その場で結果が返ります。本文の手順を実際になぞりながら進めましょう(各レッスンは毎回まっさらな状態から始まり、「最初からやり直す」でいつでも戻せます)。

Docker(シミュレート)

ブラウザ内で docker コマンドを試せる学習用環境を読み込みます(本物のDockerではなく、動きを再現したものです)。
スクロールして表示された時点でも自動で読み込まれます。