調べたことまとめる。
- いにしえよりDocker for Macでhost-container間のファイルアクセス遅い問題は議論されている
- macOSでなんで遅いかが↓ここら辺に書いてあるっぽい(が読んでない
- その問題の対応として、2017年にvolumesオプションに
cached
,delegated
フラグが追加された。consistencyを少し犠牲にしてファイルアクセスを高速化している。consistent
(デフォルト) >cached
>delegated
の順にconsistencyが高い。 - 以下のベンチマークだと、consistent(デフォルト)と比べて
cached
,delegated
は2-3倍くらい速い。 - が、これでもまだLinuxなどに比べると遅く、公式じゃない手段でいくつかそれより高速化する方法がある。
-
https://www.jeffgeerling.com/blog/2020/revisiting-docker-macs-performance-nfs-volumes
- ここでいろいろ手動で設定してNFSマウントする方法、 docker-sync と言うgem、 bg-syncと言うcontainerがベンチマークとともに紹介されている。いずれも
delegated
flagより2倍かそれ以上速い。
- ここでいろいろ手動で設定してNFSマウントする方法、 docker-sync と言うgem、 bg-syncと言うcontainerがベンチマークとともに紹介されている。いずれも
-
https://www.jeffgeerling.com/blog/2020/revisiting-docker-macs-performance-nfs-volumes
- 一方Docker公式ではMutagenと言うツール(?)がEdgeリリース v2.3.1.0(2020-05-20)で導入された。ネイティブに近いパフォーマンスが出るらしい。
- しかし、これがパフォーマンス改善に効果がある一方、いくつか問題がありEdge v2.3.5.0で削除された
- https://docs.docker.com/docker-for-mac/edge-release-notes/#docker-desktop-community-2350
- ↓で理由が説明されている。キャッシュが追いつかない場合があったり、サブディレクトリがキャッシュされない問題があったりするらしい(詳しく知らないので読み間違えてるかも)
- 代わりにgRPC-FUSEと言うファイルシステムが同じEdge v2.3.5.0で導入された。
- 公式曰く "This has much faster file sharing and uses much less CPU than osxfs" らしい(osxfsが古い(現状の)ファイルシステム)が、上記issueにポストされたベンチマークでは全然速くなってなかった。
- 上記issueにMutagenの開発者が、「Docker for Mac導入されなくてもMutagen自体は使えるから試してみてね」的なこと言ってる。
- mutagenが削除されることを不満に思っている人が多いようで「mutagen入ってるEdge release build使い続けるわ」とか同issueにコメントついてる。
- mutagenはEdgeの時点で削除され、stableに入る予定は今のところない(が、いろいろ考え直してデザインし直して入り直す可能性はある)。gRPC-FUSEは9月にstableに入る予定。デフォルトでgRPC-FUSEになるが、設定で古いやつ(osxfs)に切り替えることができる。
- 2020/09/30 に gRPC-FUSE入りのDocker for Mac 2.4.0.0がリリースされた
- https://docs.docker.com/docker-for-mac/release-notes/#docker-desktop-community-2400