Limaってなに?
virtualboxやwindowsのWSL2のようにlinuxの仮想環境をmac上に構築するツールです。
mac上でdocker環境を構築するにはいくつか方法がありますが、あまりにもDocker Desktopのパフォーマンスが悪いため(主にマウント周り)他の方法を試していきます。
これまでにDocker Desktopの代替として、
- Podmanで構築
- vagrant+virtualboxで構築
- リモートのlinux環境で構築
を試してきました。
そのなかでもvagrant+virtualboxが一番ストレスがないかなといった印象。
ただこの方法だとコンテナにsshしてdockerコマンドを実行するといったワンクッションが入ります。
ざっと調べた感じ、limaはpodmanと同様に、macのターミナル上から直接dockerコマンドを実行しつつマウントやらファイル転送やらが遅くならないようになるはず。
準備
homebrewでコマンドをインストールします。
$ brew install lima
$ limactl --version
limactl version 0.13.0
dockerのコマンドのみをインストールしておきます。
$ curl -O https://download.docker.com/mac/static/stable/x86_64/docker-20.10.21.tgz
$ tar zxvf docker-20.10.21.tgz
$ mkdir -p ~/.docker/bin
$ mv ~/docker/docker ~/.docker/bin/
docker compose(v2)も利用するのでインストールします。
$ curl -SL https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-darwin-x86_64 -o ~/.docker/cli-plugins/docker-compose
$ chmod +x ~/.docker/cli-plugins/docker-compose
仮想環境を立ち上げるためのテンプレートというものがあり、今回はDocker環境を構築したいのでdockerテンプレートを利用します。
$ curl -O https://raw.githubusercontent.com/lima-vm/lima/master/examples/docker.yaml
$ vim docker.yaml
# ディスクサイズ
disk: "10GiB"
# 共有するディレクトリ
mounts:
- location: "~/projects"
writable: true
ディスクサイズをいったん10GBにして、共有したいディレクトリを指定しつつwritable: trueを書き加えます。
変更した設定ファイルをもとに環境構築をします。
$ limactl start ./docker.yaml
...
------
docker context create lima-docker --docker "host=unix:///Users/runeleaf/.lima/docker/sock/docker.sock"
docker context use lima-docker
docker run hello-world
------
仮想環境が立ち上がるとdockerを利用するための設定コマンドが最後の方に出力されるので、そのままそれを実行します。
$ docker context create lima-docker --docker "host=unix:///Users/runeleaf/.lima/docker/sock/docker.sock"
$ docker context use lima-docker
mac上からdocker infoで確認します。
$ docker info
Client:
Context: lima-docker
Debug Mode: false
Plugins:
compose: Docker Compose (Docker Inc., v2.12.2)
Server:
...略
試す
いちど構築が済めば、以下のコマンドで確認・操作ができます。
$ limactl ls
NAME STATUS SSH ARCH CPUS MEMORY DISK DIR
docker Running 127.0.0.1:49351 x86_64 4 4GiB 10GiB /Users/runeleaf/.lima/docker
$ limactl stop docker
$ limactl start docker
立ち上げた仮想環境には
$ limactl shell docker
上記コマンドで入ることができます。
dockerやcomposeはいつもどおり実行できる状態になっていました。
$ docker run hello-world
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0320ee09576 hello-world "/hello" 24 seconds ago Exited (0) 23 seconds ago trusting_wu
$ docker compose run --rm app /bin/bash
所感
割とすんなり構築できました。
writable: trueの記述がなくてGemfile.lockが更新できずにrailsが起動しない、というところで詰まったくらい。
dockerコマンドをsshしてから実行することもなく、vscodeもRemote-sshを使わずにコードを編集できるので楽です。
マウント周りやrails sなどの実行速度は、やはりlinux環境やvirtualbox環境に比べると若干遅く感じます。ただしDocker Desktopよりは格段に速いので、ストレスはそこまで感じませんでした。