Docker Compose で環境依存情報を管理するにはどうすれば良いかってところですが、これは
- 環境共通の docker-compose.yaml を作る
- 環境依存の情報のみを記載した同様の YAML を作る
- これを組み合わせる
という手順とするのがベストプラクティスだと思います。簡単に説明します。
環境共通の docker-compose.yaml
何の意味もありませんが、サンプルとしてこのような docker-compose.yaml を書いてみます。
version: '3' services: web: image: nginx:latest networks: - nw db: image: postgres:latest networks: - nw networks: nw: driver: bridge
環境依存情報のみを既述した YAML ファイル
開発環境用の設定情報を記載した以下のようなファイル docker-compose.dev.yaml
を用意します。
version: '3' services: web: environment: DEBUG: 'true' db: environment: POSTGRES_PASSWORD: dev-passwd
マージする
あとはこの 2 つの YAML ファイルをマージすれば良い。これは、docker-compose
コマンドに -f
を複数指定すれば、docker-compose
が勝手にやってくれます。
順番が重要で、最初の -f
で指定するのがベースとなる docker-compose ファイルになります。その後に指定する docker-compose ファイルは、別に valid でなくても良い。
ただし、version だけは合わせないと、エラーになります。
実際に試してみると、以下のように、開発環境の設定で container が立ち上がっていることが分かります。
$ docker-compose -f docker-compose.yaml \ -f docker-compose.dev.yaml -d up # db で環境変数を出力 $ ddocker-compose -f docker-compose.yaml -f docker-compose.dev.yaml exec db env | grep POSTGRES_PASSWORD POSTGRES_PASSWORD=dev-passwd
もう少し厳密に差分を確認した結果が以下。環境依存の情報が適切にマージした docker-compose ファイルが生成されていることが分かります。
$ diff -u <(docker-compose -f docker-compose.yaml config) \ <(docker-compose -f docker-compose.yaml -f docker-compose.dev.yaml config) --- /dev/fd/11 2018-06-09 11:45:10.000000000 +0900 +++ /dev/fd/12 2018-06-09 11:45:10.000000000 +0900 @@ -3,10 +3,14 @@ driver: bridge services: db: + environment: + POSTGRES_PASSWORD: dev-passwd image: postgres:latest networks: nw: null web: + environment: + DEBUG: "true" image: nginx:latest networks: nw: null