知っておくとちょっと便利な Docker Compose の Tips。
Docker Compose の設定は上書きできる
docker compose
コマンドの実行時に -f
(もしくは --file
) を指定しなかった場合に compose.yml
がデフォルトで読み込まれることは誰もが知っているかと思うが、このとき同時に compose.override.yml
も読み込まれて上書きされる。
compose.yml
services:
echo_env:
image: busybox
environment:
DEFAULT: 1
command: env
compose.override.yml
services:
echo_env:
environment:
OVERRIDE: 1
$ docker compose up
echo_env_1 | DEFAULT=1
echo_env_1 | OVERRIDE=1
-f
をひとつでも指定した場合は compose.override.yml
は読み込まれない。
$ docker compose -f compose.yml up
echo_env_1 | DEFAULT=1
-f
を指定する場合で設定を上書きしたい場合は、明示的に -f
を複数指定する。
$ docker compose -f compose.yml -f compose.override.yml up
echo_env_1 | DEFAULT=1
echo_env_1 | OVERRIDE=1
このような設定の上書き機能は、実行環境ごとの環境変数を指定する場合などに便利。
Docker Compose の設定ファイル名を環境変数で指定する
毎回 -f
を指定するのは面倒なので、これは環境変数で指定することが出来る。
$ COMPOSE_FILE=compose.yml docker compose up
echo_env_1 | DEFAULT=1
複数指定する場合は :
で結合する。(Windows の場合は ;
)
$ COMPOSE_FILE=compose.yml:compose.override.yml docker-compose up
echo_env_1 | DEFAULT=1
echo_env_1 | OVERRIDE=1
docker compose
コマンドはデフォルトで .env
から環境変数を読み込むので、これを書いておけば毎回ファイル名を指定する必要がなくなる。
.env
COMPOSE_FILE=compose.yml:compose.override.yml
$ docker compose up
echo_env_1 | DEFAULT=1
echo_env_1 | OVERRIDE=1