Docker Compose の YAML ファイルをマージ/オーバーライドする
TLDR
-
次のコマンドで複数の
compose.yaml
ファイルをマージ/オーバーライドして起動docker compose -f compose.yaml -f compose.override.yaml up -d
-
マージされた内容は
docker compose config
コマンドで確認docker compose -f compose.yaml -f compose.override.yaml config
-
compose.override.yaml
で設定を削除する場合、YAML の!reset
タグを使う例:
services: web: ports: !reset []
-
compose.override.yaml
で設定を上書きする場合、YAML の!override
タグを使う例:
services: web: ports: !override - "18080:80"
概要
Docker Compose で複数の compose.yaml
ファイルをマージ/オーバーライドする方法について説明します。
docker compose
コマンドの -f/--file
オプションを使う
docker compose
コマンドには -f/--file
オプションがあり、複数の
compose.yaml
ファイルを指定できます。
docker compose -f compose.yaml -f compose.override.yaml up -d
このコマンドの場合、 compose.yaml
に compose.override.yaml
の内容がマージされた内容でコンテナが起動されます。
開発/本番環境切り替えや、既存の compose.yaml
に新しい設定を追加する際に便利です。
マージされた内容は docker compose config
コマンドで確認できます。
docker compose -f compose.yaml -f compose.override.yaml config
設定の削除
上記の compose.override.yaml
で設定を削除する場合、YAML の !reset
タグを使うことで削除できます。
compose.yaml
services:
web:
image: nginx
ports:
- "8080:80"
compose.override.yaml
services:
web:
ports: !reset []
この場合、 compose.override.yaml
で ports
の設定を削除しています。
設定の上書き
上記の compose.override.yaml
で設定を上書きする場合、 YAML の !override
タグを使うことで上書きできます。
compose.yaml
services:
web:
image: nginx
ports:
- "8080:80"
compose.override.yaml
services:
web:
ports: !override
- "18080:80"
!override
タグを付与しないと、 ports
の設定がマージされてしまい、次のような内容になってしまいます。
services:
web:
image: nginx
ports:
- "8080:80"
- "18080:80"
!override
タグを付与することで、 ports
の設定が上書きされます。
参考
Discussion