こんにちは、kubotakです。 アドベントカレンダーシーズンですが敢えて会社のブログを書こうと思います。
弊社では開発環境としてDockerを利用しています。 Dockerの管理はLaradockというOSSを利用していましたが、最近自前のdocker-composeに移行したという話をしたいと思います。
Laradockとは
もともとはPHPフレームワークLaravelをDockerでローカル開発しやすいようにしたパッケージでしたが今ではPHP開発全般で利用できるように汎用的にあらゆるミドルウェアなどが追加されているOSSです。 弊社では開発当初からLaradockを利用してローカル開発を行っていました。 とても便利なツールで助かっていたものの以下の点で困っていました。
導入手順が複雑
導入するためにアプリケーションのREADMEに多く手順を残す必要がありました。
また、Elasticsearchなど使うミドルウェアも増えてきていて、docker-compose up -d {container}
に追加するものが増えていきました。
イメージが重い
できるだけ初回起動を早めるためにイメージは最小限で良いと思いますのでLaradockではオーバーな気がしていました。 また、自分たちでDockerfileを書かないとイメージにどんなライブラリを入れているのかなどの見通しが悪く、とりあえず動くからOKみたいになりがちで良くないなと思っていました。
自前でDockerfile,docker-compose.ymlを作る
Makefileで管理する
まず導入手順を簡略化するためにMakefileによる管理を行いました。
導入手順をそのままMakefileで実行できるようにmake init
というコマンドで作り初回起動の一連の手順を自動化させました。
また、よく使うdocker-compose up
やdown
,exec
などはそれぞれmake up
, make down
, make ssh
など簡易的なコマンドに変更。
make help
で利用可能なコマンド一覧を出力させるなどの工夫も取り入れました。
composer_install アプリケーションに依存するPHPライブラリをインストールする down 開発環境を落とす import_es Elasticserachにデータを格納する init 初回実行用 migrate DBマイグレーションを実行する migrate_seed DBマイグレーション(fresh)とシードを実行する php_unit PHPユニットを実行する ssh 開発環境内にsshで入る up 開発環境の立ち上げ
ミドルウェアなどはalpineイメージ
Alpine Linuxは軽量なLinuxのイメージです。 ミドルウェアなどは直接コンテナに入ってコマンドを実行するなどがないのでalpineイメージで構成しました。
移行後
現在ではメンバー全員がLaradockから移行しましたが特に問題なく開発を続けられているようです。 当初はLaradockに比べてアクセスが遅い、重たいなどとのレビューがありましたが、Laradock側の実装を参考にopcacheの設定やNginxのconfigのチューニングなどを行い同等レベルまでパフォーマンスを出せるようになりました。 また、メンバーでPHPUnitの実行時間に差が大きい事象がありましたがDockerに割り当てるメモリが8GB未満だと顕著に遅くなっていたことがわかりました。 おそらくElasticsearchのコンテナがメモリを多く消費してそうな気がしてますが、メモリの割当によって改善されたのでそのまま運用しています。
余談ですが、移行後に弊社鈴木がLaradockへのOSSコミットなどを果たすなどもありました。
PHP開発環境のOSS(Laradock)に初めてのプルリクを出してマージされた話 - Qiita
最後に
一緒にDeveloper Experience(開発体験)を向上させてくれる仲間も随時募集中です。 www.wantedly.com