はじめに
Docker composeの起動時オプション「--env-file」と「environment」のデフォルト環境変数を使って、コンテナ内の環境変数を切り替える方法を紹介する。
設定ファイル(xxx.env)を複数用意することで、コンテナ内の環境変数を変更することができるので、docker-compose起動時にコンテナの振る舞いを変更したいときに有用。
動作確認環境
- Ubuntu 22.04
- Docker compose v2.24.2
方法
ポイント
- docker-compose.ymlファイルの
environment
セクションに、コンテナ内に指定したい環境変数を指定- この時、デフォルト環境変数の値を設定しておく
- xxx.envファイルに、個別設定したい環境変数を記載
-
environment
に指定するコンテナ内の環境変数と、xxx.envファイルに指定するdocker-composeファイル内の環境変数の名前は同じにしておく(別々でも良いが、わかりやすくするため)
環境変数の設定の流れは以下となる。
具体例
構成
以下のようなファイル構成とする。ここでは、切り替えたい個々の環境変数設定として、a.env
とb.env
を用意する。
.
├── docker-compose.yml
└── config
├── a.env
└── b.env
docker-compose.ymlの設定
環境変数のデフォルト値の指定は、${環境変数名:-デフォルト値}
と指定する。こうすることで、環境変数が設定されていない場合はデフォルト値が使われるようになる。
デフォルト値の前に-が入るので、数値を設定する場合は注意する。
version: '3'
services:
test:
image: ubuntu:20.04
environment:
STRING_VALUE=${STRING_VALUE:-default} # デフォルト値:default
BOOL_VALUE=${BOOL_VALUE:-false} # デフォルト値:false
INT_VALUE=${INT_VALUE:-1} # デフォルト値:1
DOUBLE_VALUE=${DOUBLE_VALUE:--1.5} # デフォルト値:-1.5
xxx.envファイルの設定
個別設定したい環境変数をxxx.envファイルに記述する。docker-compose.ymlに記述したデフォルト値を利用したい場合は、xxx.envファイルには指定しない。
設定A
STRING_VALUE=a
BOOL_VALUE=true
INT_VALUE=2
DOUBLE_VALUE=0.1
設定B
STRING_VALUE=b
起動方法
環境変数のデフォルト値を使いたい場合
docker compose up
コンテナ内の環境変数は以下のようになる(全てデフォルト値)。
STRING_VALUE=default
BOOL_VALUE=false
INT_VALUE=1
DOUBLE_VALUE=-1.5
設定A (a.envを指定する場合)
docker compose --env-file ./config/a.env up
コンテナ内の環境変数は以下のようになる(全てa.envで設定した値)。
STRING_VALUE=a
BOOL_VALUE=true
INT_VALUE=2
DOUBLE_VALUE=0.1
設定b (b.envを指定する場合)
docker compose --env-file ./config/b.env up
コンテナ内の環境変数は以下のようになる(STRING_VALUE以外デフォルト値)。
STRING_VALUE=b
BOOL_VALUE=false
INT_VALUE=1
DOUBLE_VALUE=-1.5
まとめ
Docker composeの起動オプション--env-fileとenvironment環境変数のデフォルト値を使って、コンテナ内の環境変数を切り替える方法を紹介した。envファイルを複数用意することで、コンテナ環境変数を変更してコンテナの挙動を変更させたい場合に有用。
参考