Skip to content

docker compose推奨構成

This content is a draft and will not be included in production builds.

DockerfileについてはDockerfileベストプラクティス2024がある。

テストのときにDB等のサービスが必要で、元の compose.yml がある場合など部分的に拡張したい場合は extends を使うといい。

services:
diamond-redis:
extends:
file: ../docker-compose.yml
service: diamond-redis
runner:
image: node:22
depends_on:
diamond-redis:
condition: service_healthy
environment:
- IS_REDIS_CLUSTER=false
- REDIS_HOSTS=diamond-redis:6379
- SECONDARY_REDIS_HOSTS=diamond-redis-secondary:6379
tty: true

ボリュームマウントの代わりにwatchする

Section titled “ボリュームマウントの代わりにwatchする”

従来は volumes ディレクティブでローカルのファイルシステムをマウントしていたけれど、この場合、ファイルのオーナーが異なっていることによる問題や、ホストとコンテナで環境が異なる場合に動作しないバイナリが作られる可能性がある。

この問題を対処するためファイルに変更があったら同期するようなしくみがあるので、それを使う。

services:
develop:
watch:
- action: rebuild
path: package.json
- action: sync
path: .
target: /app
ignore:
- node_modules/

この構成で

Terminal window
docker compose watch

または

Terminal window
docker compose up --build --watch

を実行すると、package.json が更新されたとき rebuild アクションによって Dockerfile の再ビルドが行われる。他のコードが変更された場合は sync アクションでコンテナと同期する。