のぴぴのメモ

自分用のLinuxとかの技術メモ

MacOSでDocker Desktopの代替えとしてLima+docker環境を作ってみた

はじめに

MacOSでdockerを使おうとすると、第一候補は Docker Desktopになりますが、一定規模以上の企業で利用する場合は有料サブスクリプションが必要になります。*1

WindowsならWLS2でLinuxの仮想環境を作ってその上で、linuxのdocker(Docker Desktopでないので有料サブスクリプション不要)を動かすということができます。一方MacOSには標準でWLS2相当のものがないので、OSSLimaを使ってLinux仮想環境を作って、その上でlinuxのdockerを動かします。

ここではそのセットアップ時の手順を備忘録として記載します。

Limaとは

Mac上でLinuxの仮想環境のVMを作ることができるOSSです。
LimaはGitHubにホストされており、URLは以下になります。

以下のような特徴があります

  • brewコマンドでインストールが楽
  • intel on intelARM on intelARM on ARMintel on ARMのどれでも可能
  • Linuxとして、Alpine、Arch LinuxDebianFedora、Ubunts(default)などさまざまなイメージが利用可能

セットアップ手順

前提のセットアップ

すでにセットアップされている場合はスキップしてください。

brewコマンドのインストール

macOS用のパッケージマネージャーbrewをセットアップします。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

セットアップ手順やその他brew情報は、下記のbrewのページを参照ください。

Limaのインストールとdockerインスタンスの作成

Limaのインストール
brew install lima
dockerが入ったLinux仮想環境の起動

Limaには多数のVMテンプレートがあり、それらテンプレートを利用して簡単に目的の仮想環境をセットアップすることができます。dockerの環境もLimaのテンプレートにあるため、ここではそのテンプレートを利用してdocker環境を起動する手順をまとめました。

limactl start --name=default template://docker
(参考)dockerが入ったLinux仮想環境の停止
limactl stop
(参考)dockerが入ったLinux仮想環境の2回目以降の起動
limactl start

dockerコマンドのセットアップ

dockerコマンドのインストール
brew install docker
dockerコマンドからLimaの仮想環境上のdockerデーモンへの接続

ここで記載した手順は、Limaのdocker環境を起動した時のメッセージの最後に表示されています。
lima-defaultという名前のコンテキストを作成して、切り替える方法になります。

  • dockerコンテキストの作成
docker context create lima-default --docker "host=unix:///Users/nobuyuf/.lima/default/sock/docker.sock"
  • dockerで作成したコンテキストへの切り替え
docker context use lima-default
  • テスト
docker run hello-world

下記メッセージが表示されればOKです。

Hello from Docker!
This message shows that your installation appears to be working correctly.

docker起動スクリプト

上記手順で作成した環境をベースに、Limaのdocker仮想環境を起動しdockerのコンテキストを変更する一括のシェルスクリプトです。

  • start-docker.sh
#!env bash

# start docker instance via Lima
limactl start

# change docker context
docker context use lima-default

補足

補足1 Limaの操作

Limaで稼働している仮想環境の一覧
limactl list
固有のインスタンス名をつけた仮想環境の新規作成と起動

fedora仮想環境をfedoravmというインスタンス名で起動する

limactl start --name=fedoravm template://fedora
Limaの仮想環境の停止

fedoravmというインスタンス名の環境を停止する。

limactl stop fedoravm
既存の仮想環境の起動

fedoravmという作成済みインスタンスを起動する。

limactl start fedoravm
起動中の仮想環境にインタラクティブなシェルで入る
limactl shell fedoravm
Limaの起動可能なテンプレート一覧参照
limactl start --list-templates

補足2 dockerのコンテキスト操作

コンテキスト一覧表示
docker context list
コンテキストの切り替え
docker context use <コンテキスト名>
コンテキストの削除
docker context rm <コンテキスト名>

*1:. Commercial use of Docker Desktop at a company of more than 250 employees OR more than $10 million in annual revenue requires a paid subscription (Pro, Team, or Business) to use Docker Desktop. Pricing | Docker