Macのdocker遅い問題
Macで開発している時、主にRailsなのですがdockerを使うと遅くなるのが嫌でずっと避けてましたが、とあるプロジェクトでBFF構成にし開発環境とデプロイ環境をECS化したりとでdocker化の流れに抗えない状況になりました。
ただ、やはり遅い。
dockerが不慣れなこともありますが、Macのdockerなかなか遅い。
そしてMacが遅い件を調べてみてもみなさん困られるのが伺えます。
そんな中で対策としてよく見かけるのが
- docker-sync
- vagrantで別立て
の2つでした。
どちらが最適なのかな?と思い悩んでると、
ありました。dockerのドキュメントにまさにこの件に対しての内容が。
ボリュームマウントのチューニング
端的にまとめるとv17.04からcached
とdelegated
というオプションが追加され、書き込み読み込みの一貫性を担保しない(※)代わりにパフォーマンスが向上されるものです。
※コンテナ側で発生した変更がホスト側に書き込みされるまで遅延を許容する。
即時性を求められたり大規模な処理を組むこともなく、開発環境だけで使うことから現状大きな支障はないと思いこちらのオプションを利用することにしました。
導入の仕方
- volumesの指定の最後に
:delegated
をつけていつも通りdocker-compose up
を実行
services:
app:
volumes:
- .:/project/sample_app:delegated
tips
linuxやwindowsユーザーの方と一緒に開発する場合は必要ないかと思うので、そんな時は通常使うdocker-compose.yml
に基本的な設定そのままにdocker-compose-local.yml
のように、別ファイル名のymlを用意します。
そこに例のようにservices:
、サービス名:
、volumes:
、マウント先:に:delegateオプション
を追加したものをのみを残し
docker-compose -f docker-compose.yml -f docker-compose-local.yml up
とオプション指定すればvolumesの指定のみ上書かれるのでMacユーザーの方はこちらを利用したら住み分けできて便利です。
※docker-compose.ymlにversion指定されていたら、versionの指定は合わせます。
改善の結果
ただのindexのレコード取得でも数秒、初回アクセスで10秒オーバーするケースがあったものが普通にサクサクと動くようになりました。
プロジェクトの内容や要件に合わせてですが、遅すぎてストレスが激しくdocker嫌いになる前に是非試してみてください。
まず困ったら公式ドキュメントをしっかり読むことの大事さを改めて実感する一件でした。