今まで単なるバイナリビルド環境としてしか使ってなかった docker を CI でまともに使い始めたのでいろいろ用意した。
Docker Toolbox で作る。ローカルマシンは Virtualbox の boot2docker イメージを default として使っている。Azure で動かしている個人用 VM にも docker engine を入れて、秘密鍵を作成してから tlsverify モードで起動するようにした後に docker-machine の none driver で登録して docker-machine env azure
とかしてリモートでも実行できるようにするなどして分散している。
none driver で作成した場合 .docker/machine/machines/azure/config.json
のファイルの AuthOptions セクションをそれっぽく書き換えないと docker-machine でいい感じに切り替えやステータスが取得できないのだけどドキュメントを見つけることができなくてだいぶ試行錯誤した。
@deeeet くんの https://github.com/tcnksm/docker-alias を使っている。最初、ここまで使うかなあと思ったけど、どのコマンドも重宝している。あと、docker-machine
と打つのが面倒なので dm にエイリアスした。
Veertu を使って boot2docker の環境を作れば Virtualbox のそれよりも性能が出るかなと思ったけど、近々 docker-toolbox でも対応するだろうから、あまり頑張らないことにした。
Dockerfile なんでも自由にかけすぎるから、如何にコンテナの更新でキャッシュを活用するようにするか、とか、CI として使うときにテスト実行と前準備・後始末のどのフェーズをコンテナイメージに入れて、どのフェーズを実行時にやらせるか、みたいなあたりが難しい。
この辺は試行錯誤中。production でも導入できるくらいにはわかったけど、今の仕組みよりバーンと楽になるイメージはまだないので、別のところにあるボトルネックを解決してからかなあ。