Laradockを卒業しました

こんにちは、kubotakです。 アドベントカレンダーシーズンですが敢えて会社のブログを書こうと思います。

弊社では開発環境としてDockerを利用しています。 Dockerの管理はLaradockというOSSを利用していましたが、最近自前のdocker-composeに移行したという話をしたいと思います。

Laradockとは

laradock.io

もともとは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 updown,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

www.wantedly.com