🐕

docker-compose.override.ymlでcomposeファイルを上書きする

2022/04/21に公開

背景

ローカルでの開発用では問題なかったのですが,CI(GithubActions)を実行するときにテストが落ちてしまいました.
docker-compose.ci.ymlというCI用の別composeファイルを用意しようかと思ったりしたんですが,会社の人にdocker-compose.override.ymlというものを教えてもらい,それを使ってみました.

https://docs.docker.com/compose/extends/

compose V2について

V1ではdocker-composeという書き方をしていましたが,V2ではdocker composeがスタンダードになるようです.docker-composeはV2でも使えますが,いずれ使えなくなるかと思います.今回はV2の書き方でやってみます.

https://docs.docker.com/compose/cli-command/

https://docs.docker.com/engine/reference/commandline/compose/

https://github.com/docker/compose

docker-compose.ymlを書く

docker-compose.yml
services:
  web:
    image: httpd:2.4.53
    ports:
      - "8000:8000"

docker compose up -dで起動し, docker port [コンテナ名]でポートマッピングを確認します.

8000/tcp -> 0.0.0.0:8000
8000/tcp -> :::8000

8000番であることを確認後,docker compose downでコンテナを削除します.

docker-compose.override.ymlを書く

docker-compose.ymlと同じ階層にdocker-compose.override.ymlを作成します.

.
├── docker-compose.override.yml
└── docker-compose.yml
docker-compose.override.yml
services:
  web:
    ports:
      - "8001:8000"

docker compose up -dで起動し, docker port [コンテナ名]でポートマッピングを確認します.

8000/tcp -> 0.0.0.0:8001
8000/tcp -> :::8001
8000/tcp -> 0.0.0.0:8000
8000/tcp -> :::8000

docker-compose.ymlの内容をdocker-compose.override.ymlで上書きしたので8001番もポートマッピングされました.

docker compose downでコンテナを削除します.

-fオプションで上書きをする

docker-compose.override.ymlの場合は何も指定しなくても上書きしてくれました.
他のファイル名(docker-compose.ci.ymlなど)の場合は-fオプションで上書きが可能です.

docker-compose.ymlは先程と同じで新たにdocker-compose.ci.ymlというファイルを作成します.

.
├── docker-compose.ci.yml
└── docker-compose.yml
docker-compose.ci.yml
services:
  web:
    ports:
      - "8002:8000"

起動時は以下のコマンドにします.

$ docker compose -f docker-compose.yml -f docker-compose.ci.yml up -d

docker port [コンテナ名]でポートマッピングを確認します.

8000/tcp -> 0.0.0.0:8002
8000/tcp -> :::8002
8000/tcp -> 0.0.0.0:8000
8000/tcp -> :::8000

docker-compose.ci.ymlで上書きされて8002番もポートマッピングされました.

結局のところcomposeファイルは2つ必要になってくるのですが,重複した内容の記載を省くことが可能です.

株式会社ゆめみ

Discussion