2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DEPARTUREAdvent Calendar 2022

Day 1

MacのDocker環境をLimaで構築する

Posted at

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よりは格段に速いので、ストレスはそこまで感じませんでした。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?