Docker Composeの設定共通化
Docker Composeファイル(docker-compose.yaml
)を作成する際、同じ設定や環境変数を繰り返し書くのを避け、効率的に管理する方法として、x-プレフィックスという仕組みがあります。
🔹 x-プレフィックスとは?
Docker Composeでは、標準の予約語以外にもカスタム設定を記述できます。こうした設定に使用されるのがx-
プレフィックスです。Docker Compose自身はこのキーを特別に処理せず、ユーザーが自由に共通設定や再利用可能なパーツとして活用できます。
代表的な活用例として以下の2つがあります。
- x-compose:複数のサービスで共通する設定をまとめて定義
- x-env:複数のサービスで使われる環境変数をまとめて管理
🔹 x-composeの活用例
複数サービスで共通する設定(例えばリスタートポリシーやログ設定など)を一元管理するために、x-compose
セクションを定義し再利用します。
記述例
version: '3.9'
x-compose: &common-settings
restart: always
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
services:
frontend:
image: frontend-app:latest
<<: *common-settings
ports:
- "3000:3000"
backend:
image: backend-app:latest
<<: *common-settings
ports:
- "4000:4000"
api:
image: api-app:latest
<<: *common-settings
ports:
- "5000:5000"
-
&common-settings
で共通設定を定義し、アンカーとして登録します。 - 各サービスは
<<: *common-settings
でその設定を参照し再利用します。
これにより、冗長な設定を防ぎ、設定変更時のメンテナンスが容易になります。
🔹 x-envの活用例
複数のサービスで共通して利用される環境変数を一元管理するために、x-env
セクションを使って設定します。
記述例
version: '3.9'
x-env: &common-env
DATABASE_URL: postgres://user:password@db:5432/mydb
REDIS_URL: redis://redis:6379/0
LOG_LEVEL: info
services:
web:
image: myweb:latest
environment:
<<: *common-env
API_KEY: "web-specific-key"
worker:
image: myworker:latest
environment:
<<: *common-env
API_KEY: "worker-specific-key"
db:
image: postgres:15
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
- 共通環境変数を
x-env
セクションで設定し、アンカー化します。 - 各サービスは
<<: *common-env
で共通環境変数を参照し、追加でサービス固有の環境変数も指定できます。
🔹 利用するメリット
記述方法 | 主な用途 | メリット |
---|---|---|
x-compose |
restartやloggingなどの設定共通化 | 冗長な設定の排除、メンテナンス性の向上 |
x-env |
DATABASE_URLなど環境変数の共通管理 | 環境変数の効率的な管理と設定ミスの防止 |
🔹 まとめ
Docker Composeのx-compose
やx-env
を活用することで、複数サービス間の設定や環境変数を効率よく共通化でき、Docker環境の運用管理が劇的に改善します。設定変更が容易になり、複雑な構成や大規模プロジェクトで特に効果を発揮しますので、積極的に活用しましょう。