概要

PHPには、Phinxというデータベースのマイグレーション用のライブラリがあります。

これを、DockerのPHPイメージを使って動かそうとした時にやったことを書いておきます。

準備

Phinxは、PHPのライブラリのpdoやpdo_mysqlを使用しているので、公式のPHPイメージを利用するのではうまくいきません。

そこで、公式のPHPイメージを元にPhinx用のイメージをビルドしておきます。

もし、pdoやpdo_mysqlが使えるイメージを持っているのであれば、この作業はいりません。

今回は、下記のDockerfileを元にイメージをビルドします。

From php:7.1
Run docker-php-ext-install pdo pdo_mysql

docker-php-ext-installというコマンドでpdoやpdo_mysqlをインストールします。

この内容をDockerfileという名前のファイルで保存したら、そのDockerfileのある場所で下記のコマンドを実行してイメージをビルドします。

docker build -t php_phinx .

-tを使ってphp_phinxという名前でイメージを作成しました。ここはお好みで変えてください。

これで、イメージの準備ができたので、Phinxを使うことができます。

使い方

では、php_phinxイメージを使ってコンテナを作成して、Phinxを実行します。

Phinxは、Composerを使ってvendorディレクトリにインストールしているものとします。

docker run --rm -it -v $PWD:/app -w /app php_phinx ./vendor/bin/phinx init

--rmで、コマンドを実行し終わったらコンテナを削除するようにしています。

-v $PWD:/appから分かるように、このコマンドは、プロジェクトの直下で実行しています。こうすることで、ホストマシンで作成した設定ファイルを読み込んでくれたり、書き込んだりしてくれます。

-w /appはなくても動く場合もありますが、phinx.ymlを認識しない場合があるので、原則書いておくようにしましょう。

phinx initは、Phinxの初期設定をするコマンドで設定ファイルphinx.ymlを作成します。 なので、ここでPhinxへの指示を書きます。

さいごに

まさか、公式のPHPイメージをそのまま使うことができないということで少し苦労しました。

ビルドという手間がありますが、PHPをホストマシンにインストールして使うよりはましだと思うので、是非参考にしてください。