docker-compose.override.ymlでcomposeファイルを上書きする
背景
ローカルでの開発用では問題なかったのですが,CI(GithubActions)を実行するときにテストが落ちてしまいました.
docker-compose.ci.ymlというCI用の別composeファイルを用意しようかと思ったりしたんですが,会社の人にdocker-compose.override.ymlというものを教えてもらい,それを使ってみました.
compose V2について
V1ではdocker-compose
という書き方をしていましたが,V2ではdocker compose
がスタンダードになるようです.docker-compose
はV2でも使えますが,いずれ使えなくなるかと思います.今回はV2の書き方でやってみます.
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
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
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