遅いDocker for macを「Mutagen compose」で爆速にする(M1対応)


Mutagen compose

Mutagen composeは、Mutagenというローカル環境とリモート環境のディレクトリを高速に同期させることができるオープンソースの開発ツールをDocker composeと統合させたツール。
つまり、Docker環境でホスト側コンテナー側のファイル同期を高速で行うのに特化したサードパーティーのツール。

事前準備

mutagen-composeのインストール

$ brew install mutagen-io/mutagen/mutagen-compose

GitHubからバイナリのダウンロードも可能。

これだけで事前準備は完了です。

試してみる

プロジェクトで使う docker-compose.yml を用意

docker-compose.yml
version: "2"

services:       
  web:           
    image: httpd
    volumes:
      - ./code:/code
    ports:
      - 8080:8080
  db:             
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example

上の docker-compose.yml にMutagenを使用するための記述を追記

docker-compose.yml
version: "2"

services:       
  web:           
    image: httpd
    volumes:
      - mutagen-volume:/code # 追記: volumeをマウント
    ports:
      - 8080:8080
  db:             
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example

# 以下追記
volumes:
  mutagen-volume:

x-mutagen:
  sync:
    mutagen-volume:
      mode: "two-way-resolved" # 同期モード指定(ホスト ↔ コンテナ 双方を同期)
      alpha: "./code" # プロジェクトのパス
      beta: "volume://mutagen-volume" # volumeの指定

mutagen-composeを起動

$ mutagen-compose up -d

mutagen-composeは、docker-composeと統合されているため、mutagenコンテナ以外のコンテナもこの1コマンドで同時に起動される。

起動されたかどうか確認

$ docker-ps # コンテナが起動しているかどうか確認
# Volumeの確認
$ docker volume ls | grep mutagen-volume
local               mutagen-volume

起動が確認できたら、ローカル環境にアクセスしたり、ファイルが問題なく同期されるかを試すとデフォルトのDocker for macとの違いを体感できると思います。

「Mutagen compose」 VS 「Docker-sync」

Docker環境に適したファイル同期ツールは他に「Dokcer-sync」があり、「Mutagen compose」とどちらのアーキテクチャ採用をするべきかを レスポンス(速度)同期の安定性導入難易度の3つの項目で比較していこうと思います。(本来ならばベンチマークを比較するべきだと思いますが、面倒だったので現時点では割愛します。)

レスポンス(速度) 同期の安定性 導入難易度
Mutagen compose
Docker-sync
Docker for mac(デフォルト) -

結論、以上の観点で一番優れていたMutagen composeを採用いたしました。

Docker-syncは、最初に試したのですが、rbenv/ruby のインストールが必要だったり、CPUの使用率が跳ね上がる問題やファイルの同期が安定しないなどの問題もあったので、個人的にはあまりおすすめできません。

まとめ

現状かなり安定して速くなっているので、Docker for macの遅さにイライラしている方は、mutagen-composeの導入はおすすめです。
ちなみに、MacのM1対応ですが、こちら問題なく動いており、同期も支障なく行われていますので使う分には十分問題ないと思います。

とはいえサードパティーのツールなのでDocker for mac公式でこのマウントが遅い問題を解決されるのが一番良いですね。。

(2022/01/15 v0.13.0 公式リリース)