Docker for Macでマウントしたvolumeの遅さに対処する
結論
マウント時にdelegated
あるいはcached
オプションを付ければ、一貫性を犠牲にして速度を改善できる。
バージョン
- Docker Desktop for Mac: 2.0.0.3
困ったこと
Docker for Macでのvolumeマウントは非常に遅い。
ローカルにあるプロジェクトディレクトリをマウントして開発するような場合、
各種ビルドやライブラリのインストール、下手をするとWebサーバーへのアクセスすら耐えられないほど遅くなってしまう。
解決策
この問題には公式に解決策が示されており、
マウント時に特定のオプションを指定することで、一貫性は犠牲になるものの速度が劇的に改善する。
https://docs.docker.com/docker-for-mac/osxfs-caching/
詳細な解説は上記ページに譲るとして、概要だけを記しておく。
delegated
は最も信頼できないが最も速い。
コンテナで起こった書き込みがホスト側のファイルシステムに反映されるまでに遅延がありうる。
よって、書き込みがホスト側に反映される前にコンテナがクラッシュした場合、書込の内容は失われる。
書き込みの内容が失われても良いならばこれ。
cached
は中庸。
コンテナで起こった書き込みは直ちにホスト側のファイルシステムに反映される。
ただしホスト側の書き込みがコンテナに反映されるまでに遅延がありうる。
コンテナで頻繁に書き込みがないならばこちらでもかなりパフォーマンスの改善が見込める。
consistent
はデフォルトの設定で、一貫性が担保される代わりに非常に遅い。
一応の参考までに、自分の関わっていたプロジェクトではconsistent
からdelegated
にすることで、
WebページのTTFBが2sから300ms程度まで改善した。