Blog

lima-vm + docker-cliで脱Docker Desktopする

こんにちは。ニフティ株式会社の島田です。

AppleのContainerizationフレームワークが6月10日に発表されましたが、この記事ではlima-vm + docker-cliで脱Docker Desktopをしてみました。

これは何?

lima-vmとは

Limaは自動的なファイル共有とポートフォワード機能つきでLinux仮想マシンを起動します(WSL2と同様)。

Limaは、Macユーザへnerdctl (contaiNERD ctl)を含むcontainerdを普及させることを当初の最終目標に据えていました。しかし、Limaではコンテナ化されていないアプリケーションも実行することができます。

Limaは他のコンテナエンジン(Docker, Podman, Kubernetes 等)やmacOS以外のホスト(Linux, NetBSD 等)での動作もサポートしています。

https://github.com/lima-vm/lima/blob/v0.23.2/README.ja.md
  • 現在は CNCF Sandbox プロジェクトとして管理されています。OSS(Apache 2.0)

limaでvmを起動する

  • vmにアタッチ
  • vmを停止
  • vmを削除

limaでdocker engineを動かす

  • docker desktopが作ったファイルを削除する
権限が足りないと言われる場合

設定> プライバシーとセキュリティ> フルディスクアクセス> ターミナルをオン

必要に応じてsudoを付けて実行

  • limaでvmを作成、docker engine(rootful)を起動する
    • テンプレートから起動する場合、vmの名前がテンプレートのファイル名になる

https://github.com/lima-vm/lima/blob/master/templates/docker-rootful.yaml

rootlessでいい場合は以下のテンプレートを使う

https://github.com/lima-vm/lima/blob/master/templates/docker.yaml

  • 起動後に出力されるdocker contextを登録して切り替える
rootlessの場合
  • docker engineとdocker cliが通信できることを確認する
出力例

lima+dockerでdevcontainerを起動する

  • vscode(devcontainer)はdocker contextを使ってくれない
選択肢1: /var/run/docker.sock にシンボリックリンクを作成する

vmが停止したタイミングでdocker.sockが消えるので起動するたびに張り直しが必要

選択肢2: vscodeが見るdocker endpointを変更する(基本こっちがおすすめ)

vscodeを開き、command + , で設定を開く

dev.containers.dockerSocketPath で検索

自分のdocker endpoint(~/.lima/docker-rootful/sock/docker.sock)に変更する

その他覚えておくと便利なこと

  • ドキュメントが優秀なので基本そっちを見たほうが分かります
  • vm停止状態でlimactl editするとvmの定義ファイルを開いて編集できる
  • vmの設定は~/.lima配下にある
    • ./lima/vm-name/lima.yaml に今の設定があるので削除前に保存しておくことができる
  • シャットダウン時vscodeを起動したままだと次回起動後docker hostを認識してくれない
    • vscodeを再起動する
  • 自動採番されるdocker networkのipレンジを変更する
    • 以下を参考にdaemon.jsonを配置するように書き換える
    • rootlessはmodeと配置先を変更する必要がある
daemon.json

ニフティでは、
さまざまなプロダクトへ挑戦する
エンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトより
お気軽にご連絡ください!

ニフティに興味をお持ちの方は
キャリア登録をぜひお願いいたします!

connpassでニフティグループに
参加いただくと
イベントの
お知らせが届きます!