docker composeでマイグレーションを自動化する
2024年7月29日
docker composeでローカル開発環境を構築しているとき、DBのマイグレーションはどのように行ってますでしょうか。
通常はコンテナ内に入ってマイグレーションコマンドを打つのではないでしょうか。
1人開発なら良いですが、チーム開発をしているとマイグレーションを忘れ思わぬエラーになったりします。
そのため、docker composeで起動するときにマイグレーションを自動化するcompose設定を公開します。
DBコンテナ(この場合MySQL)
mysql:
image: mysql:8.0
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
ports:
- 3307:3306
volumes:
- ./tmp/db:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 2
ポイントはhealthcheckを入れていることです。
次にマイグレーション専用のコンテナを作成します。
migration:
build:
dockerfile: ./Dockerfile
volumes:
- ./backend:/var/www/html
command: php artisan migrate
depends_on:
mysql:
condition: service_healthy
このようにmysqlがhealthyになった段階でマイグレーションコマンドを実行することができます。