概要
これまで「MacでDockerを利用すると遅い」というのが一般認識だったと思います。
そのため、以下のような涙ぐましい努力をしてきたことと思います。
-
node_modules
やvendoer
などのPHPやNodeのライブラリをホストとマウントしないようする - マウントするvolumeに
cached
やdelegated
のオプションを付ける - ボリュームをrsyncで同期する
- Linuxサーバーを用意してリモート開発する
- Vagrantで作成した仮想環境内でDockerを利用する
しかし、これらの努力は全て過去のものと化しました!(言い過ぎです。笑)
環境
- macOS Ventura 13.2
- プロセッサ 2.8 GHz クアッドコアIntel Core i7
- Docker Desktop v4.16.2
解決法
Docker Desktopの設定でgRPC FUSE
(デフォルト)からVirtioFS
に変更するだけです。
VirtioFSとは?
VirtioFSとは、公式サイトにあるように、仮想マシンとホストとの間で共有できるファイルシステムです。
今までのファイルシステムだと仮想環境での使用に対し最適化されておらずパフォーマンスに影響が出ていたようです。
公式サイト:https://virtio-fs.gitlab.io/
設定手順
- Docker Desktopを起動
- 「設定アイコン」 => 「General」を開く
- file sharingを
gRPC FUSE
からVirtioFS
に変更 - 「Apply & restart」をクリック
検証
検証内容
上記環境でnode_modules
を削除し、yarn
を実行して、nuxt構築のために必要なnodeパッケージをインストールする時間を計測します。
結果
1回目 | 2回目 | 3回目 | 平均 | |
---|---|---|---|---|
gRPC FUSE | 150.65s | 177.35s | 144.08s | 157.36s |
virtiofs | 137.33s | 132.69s | 66.69s | 112.24s |
平均値で約45s早くなったという感じですね。
最後に
今回の検証はプレーンなNuxt3環境でのテストでしたので、もっと開発が進み利用するパッケージが増えたり、ソースコードが増えたりした環境だともっと恩恵を感じられそうな気がしますね。
Docker × Macの開発環境で苦痛を感じている方はぜひ一度試してみてください。