docker-compose
docker compose watch
volume でマウントするのでなく develop.watch に書く
package.json など特定のファイルが変わっていたら rebuild させられる
一方でオレが思っていた挙動と違う...
up 時に sync してほしい、最後に build した image + watch 後に更新したファイルだけ反映される
include
v2.20.0 から、最高
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 間に露出
COMPOSE_DOCKER_CLI_BUILD=1
environment
シェルのようにデフォルト値が使える
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 で待つ
Datastore emulator の起動を待って node を実行する