Limaを使ってDockerのファイル同期を試す

動機

  • ファイル数が増えるとMacでのDockerでVolumeの同期が遅い
  • DockerDesktopのMutagenに期待していたがDockerDesktopの有料プランに取り込まれてしまった
  • 他の手段としてlimaを試したいのでDockerの起動とファイルの同期までをやってみる

Limaの実行

インストール

brew install lima

Limaではなにも指定せずにstartすればDefaultという名前で環境を作ってくれるが、今回Dockerを使いたいので用意されているTemplate元に設定を作成

Docker向けののTemplate
lima/examples/docker.yaml at master · lima-vm/lima · GitHub

Templateの修正

mountType: "virtiofs" # ファイルの共有方法virtiofsに変更
vmType: "vz" # mountTypeに合わせてvmTypeもvsを指定

virtiofsとvzは現時点でexperimental

設定ファイルを指定してLimaインスタンスの作成と起動

limactl create --name=my-docker docker.yaml
limactl start my-docker

起動している仮想マシンの一覧。vmTypeがvzであることが確認できる

$ limactl list
NAME         STATUS     SSH                VMTYPE    ARCH       CPUS    MEMORY    DISK      DIR
my-docker    Running    127.0.0.1:57337    vz        aarch64    4       4GiB      100GiB    ~/.lima/my-docker

Dockerの動作確認

limaインスタンス起動時のメッセージを参考にDockerのcontextを切り替える

$ docker context create lima-my-docker --docker "host=unix://$HOME/.lima/my-docker/sock/docker.sock"
$ docker context use lima-my-docker
$ docker context show
lima-my-docker

コンテナの起動

docker run --name nginx -p 127.0.0.1:8080:80  nginx:alpine

ブラウザからhttp://localhost:8080/を開くとnginxの起動を確認できる

ファイルの同期

開発環境として実行したいのでファイル同期の確認をしておく
limaのインスタンスのマウントはDockerのTemplateで以下のように指定されているので/tmp/lima/以下にサンプルのhtmlをおく

docker.yaml

mounts:
- location: "~"
- location: "/tmp/lima"
  writable: true

/tmp/lima/index.html

<!DOCTYPE html>
<html>
<body>
<h1>Lima test</h1>
</body>
</html>

ファイルを置いた状態でvolumeをマウントしてdockerを起動

docker run --name nginx -p 127.0.0.1:8080:80 -v /tmp/lima/index.html:/usr/share/nginx/html/index.html nginx:alpine

ブラウザからの表示が変更されているの確認したあと

Lima test

ローカルの/tmp/lima/inde.htmlを修正してからリロードすると

...
<h1>changed file</h1>
...

表示が変更される

changed file

Limaのインスタンスから変更しても同期される(ブラウザの反映にはリロード & キャッシュの削除が必要だった)

$ limactl shell my-docker bash
$ sed -i 's/changed file/changed file in lima/' /tmp/lima/index.html

感想

Lima側の設定が用意されたTemplateから出来たので試したかったことは簡単に行えた

ローカル、Lima、Dockerと3つの環境の把握が必要になるのが難点だが、そもそもそういうものなのでやむをえないしアプリケーションのファイル数が増えて同期が遅くなってくるのも辛いので、改善されるなら試す価値はあると思う

環境の管理が大変なら有料でも同じことができるDesktop環境を探す選択肢をとることになりそう