はじめに
本番環境、ローカル環境、CI環境など、環境によって異なるコンテナを使用したいケースがある。
そこで、環境ごとにdocker-composeファイルを作るケースが多いと思うが、それぞれの環境で同じコンテナがある場合は、重複した記述の分冗長になってしまう。
そんな時は共通ファイルを作ろう!!
各ファイル構成とコマンド
共通ファイルを作り、各環境のdocker-composeファイルでは、共通のコンテナを、コンテナごとにextends
で拡張します。
共通ファイル
docker-compose.common.yaml
services:
version: '3.3'
db:
image: mysql:5.7
container_name: db
ports:
- '3306:3306'
environment:
MYSQL_DATABASE: 'mydb'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
web:
build:
context: ./
dockerfile: ./php/Dockerfile
ports:
- '8000:80'
container_name: web
例1: ローカル環境
docker-compose.local.yaml
services:
db:
# 規定ファイルのものをそのまま使う
extends:
file: docker-compose.common.yaml
service: db # 規定ファイル内の対象のサービス
web:
# 規定ファイルのものを拡張して使う
extends:
file: docker-compose.common.yaml
service: web
environment: # ここを拡張
ENV: 'local'
起動コマンド
$ docker-compose -f docker-compose.local.yaml up
例2: CI環境
docker-compose.ci.yaml
services:
db:
extends:
file: docker-compose.common.yaml
service: db
web:
extends:
file: docker-compose.common.yaml
service: web
environment:
ENV: 'ci'
起動コマンド
$ docker-compose -f docker-compose.ci.yaml up
最後に
共通の設定を追加したい時には、共通ファイルに書くだけでどの環境にも反映されるなど、冗長化を防ぐ構成ができました!
複数環境でdocker-composeを使う方は参考にしてみてください。
参考ページ