環境変数と.envファイル
環境変数、変数置換、.envファイルを使ってComposeサービスを適切に設定し、開発、ステージング、本番環境で同じComposeファイルを利用できるようにします。
「環境変数と.envファイル」はCoddyKit上の無料Docker & DevOps Fundamentalsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDocker & DevOps Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。
設定を外部化する理由
Composeファイル内にパスワードやポートをハードコードすると、壊れやすく安全性も低くなります。環境変数を使えば、YAMLを編集せずに環境ごとに動作を変更できます。
- シークレットをバージョン管理から除外する
- 1つのComposeファイルをどこでも再利用する
- 実行時に値を上書きする
environmentキー
サービス内で、environmentの下にマップとして変数を宣言します。これらの変数は起動時にコンテナへ注入されます。
services:
db:
image: postgres:16
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secretリスト形式
同じキーには、KEY=VALUE形式の文字列リストも指定できます。読みやすいと思う形式を選んでください。
services:
db:
image: postgres:16
environment:
- POSTGRES_USER=app
- POSTGRES_PASSWORD=secret.envファイル
Composeは、プロジェクトディレクトリにある.envという名前のファイルを自動的に読み込みます。そこに値を一度定義し、${VAR}による置換で参照します。
# .env
PG_USER=app
PG_PASS=secret
WEB_PORT=8080変数置換
Composeファイル内の任意の場所で${VAR}を使えます。Composeは解析前に、.envまたはシェルから取得した値へ置き換えます。
services:
db:
image: postgres:16
environment:
POSTGRES_USER: ${PG_USER}
POSTGRES_PASSWORD: ${PG_PASS}デフォルト値
${VAR:-default}を使うと、代替値を指定できます。変数が未設定または空の場合はデフォルト値が使われるため、完全な.envファイルがなくてもスタックを動作させられます。
ports:
- "${WEB_PORT:-80}:80"必須変数
${VAR:?message}を使うと、変数を必須にできます。変数がない場合、Composeは指定したメッセージとともに処理を中止するため、設定ミスを早期に検出できます。
environment:
API_KEY: ${API_KEY:?API_KEY must be set}env_fileディレクティブ
置換だけでなく、変数を含むファイル全体をコンテナへ直接渡すには、env_fileを使います。各行がコンテナの環境変数になります。
services:
api:
image: myapi:1.0
env_file:
- api.env優先順位のルール
変数が複数の場所で定義されている場合、Compose は優先順位に従って適用します。シェル環境変数は .env より優先され、明示的な environment: エントリは env_file より優先されます。
- シェル / CLI の
-eが最優先 - 次に
environment: - 次に
env_file - 最後にイメージのデフォルト値
解決済みの値を確認する
docker compose config を実行すると、すべての置換を適用した、完全に解決済みの Compose ファイルが出力されます。実際に実行される内容を確認するのに便利です。
docker compose configシークレットを Git の外で管理する
プレースホルダーを含む .env.example をコミットし、実際の .env は .gitignore に追加してください。実際の本番環境のシークレットには、環境変数より Docker secrets を使用することをおすすめします。
# .gitignore
.env簡単な確認
置換におけるデフォルト値はどのように機能しますか?
まとめ
これで、環境データを使って Compose を適切に設定できるようになりました。
environment:はサービスごとに変数を注入します.envファイルは${VAR}の置換に値を提供します:-はデフォルト値を指定し、:?は必須値として扱いますdocker compose configは解決済みの結果を表示します
これにより、1 つの Compose ファイルをあらゆる環境で利用できるようになります。
よくある質問
「環境変数と.envファイル」レッスンは無料ですか?
はい。「環境変数と.envファイル」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Docker & DevOps Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。
「環境変数と.envファイル」で何を学びますか?
環境変数、変数置換、.envファイルを使ってComposeサービスを適切に設定し、開発、ステージング、本番環境で同じComposeファイルを利用できるようにします。 ブラウザで直接実行するハンズオンコードでDocker & DevOps Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Docker & DevOps Fundamentalsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDocker & DevOps Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「環境変数と.envファイル」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDocker & DevOps Fundamentalsレッスンでコードを書いて実行できますか?
はい。すべてのDocker & DevOps Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Docker Composeとは
- Composeファイルの記述
- 複数サービスアプリのデプロイ
- 環境変数と.envファイル