docker-compose
Docker 一般の話は Docker へ
docker compose watch
Use Compose Watch | Docker Docs
volume でマウントするのでなく develop.watch に書く
package.json など特定のファイルが変わっていたら rebuild させられる
Docker Compose Watchのすすめ - Hatena Developer Blog
一方でオレが思っていた挙動と違う...
up 時に sync してほしい、最後に build した image + watch 後に更新したファイルだけ反映される
BUG watch sync does not pass project files to container / does not reflect file changes between container restarts · Issue 11102 · docker/compose
in watch mode force pull policy to build for services with both build and develop attributes by glours · Pull Request 11213 · docker/compose
include
v2.20.0 から、最高
docker compose v2.20.0 の新機能includeが追加された - blog.cateiru.com
exec で見に行く
$ docker-compose exec {service} /bin/bash とかで中を見に行ける
コンテナID調べなくて良いので便利
docker-compose.yml の読み込み直し
$ docker-compose restart は docker-compose.yml の内容を読み込みなおさない
service 単位で読み込み直したいときは stop & rm して上げ直す
ports と expose
ports は host に公開、expose はリンクされた service 間に露出
docker-compose でキャッシュが効かない?
COMPOSE_DOCKER_CLI_BUILD=1
environment
Environment variables in Compose | Docker Documentation
シェルのようにデフォルト値が使える
code:env
environment:
APP_ENV: ${APP_ENV:-local}
wait-for-it でいろいろ待つ
単に何回も呼ぶ
code:wait-for-it
command: [
'/tools/wait-for-it', 'mysql:3306', '--',
'/tools/wait-for-it', 'redis:6379', '--',
'/tools/wait-for-it', 'elasticsearch:9200', '--',
'carton', 'exec', '--', 'prove', '-vr', 't/'
]
volume も削除
$ docker-compose down --volumes
network 名決めたい
各サービスで networks は指定したくないが公開する名前は決めたいとき
code:network.yml
version: '3.8'
services:
...
networks:
default:
name: pokutuna_test
ミドルウェア系だけ up して、テストプロセスだけ docker run --network=pokutuna_test ... などしてくっつけやすい
docker-compose.yml の context と dockerfile
以下のような指定をするとき
code:docker-compose.context.yml
services:
app:
build:
context: .
dockerfile: docker/devel/Dockerfile
dockerfile のパスは context から辿られる
code:docker-comopse.context.yml
context: docker/devel/
dockerfile: docker/devel/Dockerfile
のような指定はできない、以下のようにする
code:docker-comopse.context.yml
context: docker/devel/
dockerfile: Dockerfile
logs -f
docker-compose up -d で上げて docker-compose logs -f とかで見に行くとうっかり殺さない
--boart-on-container-exit & --exit-code-from
$ docker-compose up --abort-on-container-exit --exit-code-from app
--exit-code-from {service}: 特定のサービスの終了コードを返す
--abort-on-container-exit: なにかコンテナが終了したら終了する
up しっぱなしになるのを止められる
healthckeck で待つ
https://gist.github.com/pokutuna/3a6c1f03125275638bd560ca94b7a65f#file-docker-compose-yaml
Datastore emulator の起動を待って node を実行する