ヴェズルフェルニルの研究ノート

座右の銘「ただ一人犀の角のように歩め」的な研究活動ノート

LimaによるDocker Desktop代替環境の構築

最近Node.js + ExpressやPython + FastAPIなどを使って、サーバー・プログラムを作ることが多くなってきた。

サーバー・プログラムを作るときは、Dockerを利用するかどうかでぜんぜん作業効率が違ってくる。

小生のメインPCはMacなので、いままでMac版Docker Desktopを使っていたが、Docker Desktopの商用利用には「一定規模以上の企業で利用する場合有料サブスクリプションが必要」という制限がある。

いまやサーバー・プログラム開発にはDockerは欠かせない存在なので、Docker Desktopに代わる別の方法を探していたらLimaというものを見つけた。

github.com

LimaはQEMUベースの仮想マシン・ツールで、Dockerに代わる仮想マシン環境として利用すると、Docker Desktopを利用しなくてもDockerコンテナを扱うことができるようになる。

本記事では、Limaを利用したDocker環境の構築方法を紹介しよう。ただし、いまのところMacでしかLimaを利用していないので、Mac限定の内容で書いておく。

LimaおよびDockerのインストール

% brew install lima

Dockerコンテナの作成や操作のためにdockerコマンドは利用するので、dockerバッケージはインストールしておく必要がある。

% brew install docker

docker-composeを利用する場合は、それもインストールする。

% brew install docker-compose

LimaによるDocker仮想マシンのインストール

下のコマンドによって、Dockerエンジンとなる仮想マシンをインストールできる。

% limactl create --name=default template://docker

これがDocker Desktopに含まれているdockerデーモンに代わるものとなる。

limactl createコマンドによってインストールした仮想マシンは停止状態となっている。

% limactl list
NAME       STATUS     SSH            VMTYPE    ARCH      CPUS    MEMORY    DISK      DIR
default    Stopped    127.0.0.1:0    qemu      x86_64    4       4GiB      100GiB    ~/.lima/default

この仮想マシンを起動するには、下のコマンドを実行すれば良い。

% limactl start
% limactl list
NAME       STATUS     SSH                VMTYPE    ARCH      CPUS    MEMORY    DISK      DIR
default    Running    127.0.0.1:60022    qemu      x86_64    4       4GiB      100GiB    ~/.lima/default

コマンドlimactl createではなくlimaclt start --name=default template://dockerを使うと、Docker仮想マシンのインストールと起動まで同時に行える。

Docker仮想マシンが起動状態だとCPUパワーを消費するので、Dockerコンテナを利用しないときは、limactl stopコマンドによって停止しておいた方が良いだろう。

あとは、dockerコマンドを使ってDockerイメージの生成やコンテナの起動などの操作が行える。

Lima Docker仮想マシンのリソース制限変更

Dockerコンテナの内容によっては、Docker仮想マシンの使用リソース制限を拡張しないとビルドできないときがある。

下の一連の操作によって、Docker仮想マシンのリソース制限値を変更することできる。

% limactl stop default
% limactl list
NAME       STATUS     SSH            VMTYPE    ARCH      CPUS    MEMORY    DISK      DIR
default    Stopped    127.0.0.1:0    qemu      x86_64    4       4GiB      100GiB    ~/.lima/default
% limactl delete default
% limactl create  --cpus=6 --memory=8 --disk=800 --name=default template://docker
% limactl list
NAME       STATUS     SSH            VMTYPE    ARCH      CPUS    MEMORY    DISK      DIR
default    Stopped    127.0.0.1:0    qemu      x86_64    6       8GiB      800GiB    ~/.lima/default
% limactl start default

Lima Docker仮想マシンとDocker Desktopの共存

LimaのDocker仮想マシンを利用するならDocker Desktopをアンイストールできるが、Docker Hub閲覧機能などを利用したくてこれを残したい場合もあるだろう。

Docker Desktopに含まれているdockerデーモンの起動状態は、下のコマンドによって知ることができる。

% docker context list
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT                                      KUBERNETES ENDPOINT   ORCHESTRATOR
default             moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock
desktop-linux       moby                Docker Desktop                            unix:///Users/LOGINUSER/.docker/run/docker.sock
lima-default *      moby                                                          unix:///Users/LOGINUSER/.lima/default/sock/docker.sock

Lima Docker仮想マシンが稼働している状態では上のようになっているが、Docker Desktopを起動すると、これは下のような状態に変わる。

% docker context list
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT                                      KUBERNETES ENDPOINT   ORCHESTRATOR
default             moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock
desktop-linux *     moby                Docker Desktop                            unix:///Users/LOGINUSER/.docker/run/docker.sock
lima-default        moby                                                          unix:///Users/LOGINUSER/.lima/default/sock/docker.sock

dockerコマンドの実行時に使われるデーモンは、このdockerコンテキストによって管理されている。

下のコマンドを実行すると、dockerコマンドの実行時に使わるコンテキストはLima Docker仮想マシンになる。

% docker context use lima-default

これをDocker Desktop側のdockerデーモンに変える場合は、下のコマンドを実行する。

% docker context use desktop-linux

なお、Lima Docker仮想マシンを利用して作成したDockerイメージとDocker Desktopのdockerデーモンによって作成したイメージは別々に管理されている。前者のイメージをDocker Desktopで見ることはできないし、後者のイメージをlima-defaultコンテキスト有効時のdocker imagesコマンドで見ることもできない。

【参照リンク】

lima-vm.io

nopipi.hatenablog.com