Mutagen compose
Mutagen composeは、Mutagenというローカル環境とリモート環境のディレクトリを高速に同期させることができるオープンソースの開発ツールをDocker composeと統合させたツール。
つまり、Docker環境でホスト側とコンテナー側のファイル同期を高速で行うのに特化したサードパーティーのツール。
事前準備
mutagen-composeのインストール
$ brew install mutagen-io/mutagen/mutagen-compose
※ GitHubからバイナリのダウンロードも可能。
これだけで事前準備は完了です。
試してみる
プロジェクトで使う 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を使用するための記述を追記
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 公式リリース)