最近Node.js + ExpressやPython + FastAPIなどを使って、サーバー・プログラムを作ることが多くなってきた。
サーバー・プログラムを作るときは、Dockerを利用するかどうかでぜんぜん作業効率が違ってくる。
小生のメインPCはMacなので、いままでMac版Docker Desktopを使っていたが、Docker Desktopの商用利用には「一定規模以上の企業で利用する場合有料サブスクリプションが必要」という制限がある。
いまやサーバー・プログラム開発にはDockerは欠かせない存在なので、Docker Desktopに代わる別の方法を探していたらLimaというものを見つけた。
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/LOGNAME/.docker/run/docker.sock lima-default * moby unix:///Users/LOGNAME/.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/LOGNAME/.docker/run/docker.sock lima-default moby unix:///Users/LOGNAME/.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
コマンドで見ることもできない。
【参照リンク】