153
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

Macのdocker遅い問題

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

ただ、やはり遅い。

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

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

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

  • docker-sync
  • vagrantで別立て

の2つでした。

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

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

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

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

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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
153
Help us understand the problem. What are the problem?