Docker Desktopの挙動がなんかいまいちだったのでLimaに乗り換えました。M1 MacBook Airで試しています

インストールと初期設定

# limaとdocker cliをインストール(Docker Desktopは入らない)
brew install lima docker

# configファイル作成。基本docker用サンプルそのままで、~のマウントだけはwritableにする
curl https://raw.githubusercontent.com/lima-vm/lima/master/examples/docker.yaml | sed -e 's%- location: "~"%- location: "~"\n  writable: true%g' > ./tempconf.yaml

# lima vmを作成して起動。選択肢が出るので Proceed with the current configuration を選ぶ
# 結構かかるので気長に待つ
limactl start --name=docker ./tempconf.yaml

# confはもう使わない
rm ./tempconf.yaml

# 起動が完了すると、以下のようなサンプルコマンドが3行表示されるので実行する
# 他の記事だとDOCKER_HOSTの環境変数を設定したりするが、docker contextを使うとVSCode連携がとても楽になるのでこれを使う
docker context create lima-docker --docker "host=unix:///Users/<ユーザー名>/.lima/docker/sock/docker.sock"
docker context use lima-docker
docker run hello-world

hello-worldのメッセージが出たら完了。VM操作系コマンドは以下

# VM一覧の表示。VMの名前がdockerであることが分かる
limactl list
# VM停止
limactl stop docker
# VM開始。初回起動以外はVM名を指定するだけでOK
limactl start docker
# VM削除。消す必要はない
limactl delete docker
# もし消す場合はdocker contextも忘れず消す
docker context use default
docker context delete lima-docker

VM自動起動

limaのVMは自動では起動してくれないので自動起動させる。やり方は複数あるが、ショートカットアプリを使う。キーボードのショートカットではない

  1. ショートカットアプリを起動し新規作成
  2. Appタブのターミナルから[シェルスクリプトを実行]をダブルクリック
  3. スクリプト入力欄に以下を入力
     eval "$(/opt/homebrew/bin/brew shellenv)"
     limactl start docker
    
  4. ショートカット一覧画面に戻ると作ったショートカットが出来ているため、右クリックから[Dockに追加]
  5. Dockに出たアイコンを右クリックし[オプション]->[ログイン時に開く]

自動起動はログイン項目を利用しているので、やめる場合は以下

VSCode連携

Docker for Visual Studio Code 編

docker context をいい感じに読んでくれるので特段やることは無い

  1. 拡張機能の管理画面でDockerを入れる。うまく動かない場合は一度拡張機能をアンインストールしたりVSCodeを再起動したりする
  2. 上の手順で作ったhello-worldコンテナが見えることを確認。必要ないのでコンテナを消す

Visual Studio Code Dev Containers 編

~をwritableでマウントしてるので、こっちも大してやることは無い

  1. 拡張機能の管理画面でDev Containersを入れる。うまく動かない場合は一度拡張機能をアンインストールしたりVSCodeを再起動したりする
  2. VSCode左下の><みたいなアイコンから[Reopen in Container]すればすんなり動く。もちろんdevcontainer.jsonは別途必要