AnyDigi
アイキャッチ
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になった段階でマイグレーションコマンドを実行することができます。