タイトルそのまま。
// たぶん mysql 5.7 がプルされる
// が、わからんので DockerHub を要確認
$ docker pull mysql:latest
// mysqlコンテナの起動
// オプションについて
// -e : 環境変数
// --name: コンテナ名
// -d : バックグラウンド
// -p : ポートバインディング(ホスト:ゲスト)
// 環境変数について
// MYSQL_DATABASE : 作るデータべース
// MYSQL_USER : 作るユーザ
// MYSQL_PASSWORD : 作るユーザのパスワード
// MYSQL_ROOT_PASSWORD: ルートパスワード
$ docker run --name my_mysql \
-e MYSQL_DATABASE=homestead \
-e MYSQL_USER=homestead \
-e MYSQL_PASSWORD=secret \
-e MYSQL_ROOT_PASSWORD=secret \
-d \
-p 13306:3306 \
mysql
// 接続確認
// -h : ホスト名
// -P : ポート番号
// -u : ユーザ名
// -p : パスワードを入力するプロンプトを出す
$ mysql -h 127.0.0.1 -P 13306 -u root -p
記事書くときに Docker Hub を確認したら 5.7.19 が latest で指定されているっぽい。というか 8.0 系も指定できるのか、検証なんかにも便利そうだ。
でもって docker で MySQL が立ち上がると、こうさ、ほら、ユニットテスト回すときなんかに、こうしてクリーンな DB を提供できてよさそうだなーって。 イメージとしてはこんな感じ。
{
...
"scripts": {
"test": "phpunit --verbose",
"docker-test": [
"composer docker-db-remove"
"composer docker-db-create",
"composer test",
"composer docker-db-remove"
],
"docker-db-create": "docker run --name test_mysql -e MYSQL_DATABASE=homestead -e MYSQL_USER=homestead -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=secret -d -p 13306:3306 mysql",
"docker-db-remove": "docker rm --force test_mysql",
"docker-db-connect": [
"# Copy this command!",
"# mysql --host=127.0.0.1 --port=13306 --user=homestead --password=secret homestead"
]
},
...
}
composer docker-test とやったらコンテナが立ち上がり 127.0.0.1:13306 で待ち受けているので、そこを指定するように phpunit.xml だとか .env だとかで DB 接続用の値を設定すればよい。テストの後はコンテナがポイされるので、テスト用のDBはいつでもクリーンに。テストでコケても大丈夫なように、最初にコンテナをポイしたほうがいいのかな。
composer スクリプトで I/O を全部引き渡す方法がわからなかったので docker-db-connect タスクが非常にあやしい感じだけど、これくらいでもまあまあ運用していけるんじゃないかなーー