20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

docker-composeで環境ごとの共通ファイルを作る

Last updated at Posted at 2019-04-05

はじめに

本番環境、ローカル環境、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を使う方は参考にしてみてください。

参考ページ

20
20
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?