go で mysql のテストに docker を使う
mysql を含むものをテストする際に例えば go だと、lestrrat/go-test-mysqld とかを使います。 perl には Test::Docker::MySQL っていうのがあって、面白いなと思ったので、(雰囲気 go-test-mysqld インターフェースで)go で書いてみました。
go で mysql の立ち上げを docker に寄せると、go-sql-driver/mysql が pure go なので簡単にバージョンの固定が出来て良いです。
最近は、開発にも docker を使っているので、アプリケーションのコードも docker な事が多いです。そうなると、docker run ... go test
となるので、そのコンテナの中から mysql コンテナをさらに立ち上げる必要があります。
とりあえずって事で コンテナに docker クライアントを入れて、さらに -v /var/run/docker.sock:/var/run/docker.sock
で docker コマンドを呼び出せるようにするのがお手軽かなぁという感じです。
後 docker-compose も最近使っているので、そうすると、ネットワークが普通に使った場合と隔離されているので、そこらへんも面倒を見るようにしてあります。( mysql を立ち上げるコンテナと同じネットワークを指定すれば良い)
テストにコンテナ内と外の場合を書いたけど、travis だとどっちも出来て便利。使ってみて便利そうだったらもう少しちゃんと書こうかな?