Docker Compose YAMLアンカー(&)で繰り返し設定を排除する
問題
Docker Composeで類似のサービスを複数起動する際、image、volumes、restartなどの共通設定を毎回コピペしていました。サービスが10個あれば、同じ内容が10回繰り返されます。
解決方法
# 共通設定をアンカー(&)で定義
x-app-common: &app-common
image: my-app:latest
volumes:
- ./cert:/app/cert:ro
restart: unless-stopped
dns:
- 172.16.0.1
services:
# マージ(<<)で共通設定を取り込み、個別設定のみ追加
app01:
<<: *app-common
container_name: app01
environment:
- APP_ID=01
- PORT=3001
app02:
<<: *app-common
container_name: app02
environment:
- APP_ID=02
- PORT=3002
app03:
<<: *app-common
container_name: app03
environment:
- APP_ID=03
- PORT=3003
ポイント
x-プレフィックスで始まるキーは、Docker Composeが無視する拡張フィールドです。共通設定をまとめておくのに最適です。&名前でアンカーを定義し、<<: *名前でマージします。マージ後に同じキーを再度指定するとオーバーライドされます。- サービスが多いほど効果が大きくなります。10個のサービスを運用する際、共通設定の変更が1箇所で済むため、ミスが減ります。