Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Macのdockerが遅いストレスから解放されよう

Macのdocker遅い問題

Macで開発している時、主にRailsなのですがdockerを使うと遅くなるのが嫌でずっと避けてましたが、とあるプロジェクトでBFF構成にし開発環境とデプロイ環境をECS化したりとでdocker化の流れに抗えない状況になりました。

ただ、やはり遅い。

dockerが不慣れなこともありますが、Macのdockerなかなか遅い。

そしてMacが遅い件を調べてみてもみなさん困られるのが伺えます。

そんな中で対策としてよく見かけるのが

  • docker-sync
  • vagrantで別立て

の2つでした。

どちらが最適なのかな?と思い悩んでると、

ありました。dockerのドキュメントにまさにこの件に対しての内容が。

https://docs.docker.com/docker-for-mac/osxfs-caching/

ボリュームマウントのチューニング

端的にまとめるとv17.04からcacheddelegatedというオプションが追加され、書き込み読み込みの一貫性を担保しない(※)代わりにパフォーマンスが向上されるものです。

※コンテナ側で発生した変更がホスト側に書き込みされるまで遅延を許容する。

即時性を求められたり大規模な処理を組むこともなく、開発環境だけで使うことから現状大きな支障はないと思いこちらのオプションを利用することにしました。

導入の仕方

  • 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嫌いになる前に是非試してみてください。

まず困ったら公式ドキュメントをしっかり読むことの大事さを改めて実感する一件でした。

ysKey2
最近のブームはウクレレ
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away