MacでLimaを使ってDocker環境を作りVSCode連携する
Docker Desktopの挙動がなんかいまいちだったのでLimaに乗り換えました。M1 MacBook Airで試しています
インストールと初期設定
- 公式手順の通りに入れる lima/README.md at master · lima-vm/lima
- テンプレートは複数あるがdockerを使う。理由はVSCodeのdev-containersがnerdctlで動かないから。VSCodeとの連携を考えないならデフォルトのテンプレートもあり
- VSCode連携のためホームディレクトリの書き込みを許可する。ちなみに推奨はされていない
- lima/default.yaml at master · lima-vm/lima
# CAUTION: `writable` SHOULD be false for the home directory. # Setting `writable` to true is possible, but untested and dangerous.
- lima/default.yaml at master · lima-vm/lima
# 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は自動では起動してくれないので自動起動させる。やり方は複数あるが、ショートカットアプリを使う。キーボードのショートカットではない
- ショートカットアプリを起動し新規作成
- Appタブのターミナルから[シェルスクリプトを実行]をダブルクリック
- スクリプト入力欄に以下を入力
eval "$(/opt/homebrew/bin/brew shellenv)" limactl start docker
- ショートカット一覧画面に戻ると作ったショートカットが出来ているため、右クリックから[Dockに追加]
- Dockに出たアイコンを右クリックし[オプション]->[ログイン時に開く]
自動起動はログイン項目を利用しているので、やめる場合は以下
VSCode連携
Docker for Visual Studio Code 編
docker context をいい感じに読んでくれるので特段やることは無い
- 拡張機能の管理画面で
Docker
を入れる。うまく動かない場合は一度拡張機能をアンインストールしたりVSCodeを再起動したりする - 上の手順で作ったhello-worldコンテナが見えることを確認。必要ないのでコンテナを消す
Visual Studio Code Dev Containers 編
~をwritableでマウントしてるので、こっちも大してやることは無い
- 拡張機能の管理画面で
Dev Containers
を入れる。うまく動かない場合は一度拡張機能をアンインストールしたりVSCodeを再起動したりする - VSCode左下の
><
みたいなアイコンから[Reopen in Container]すればすんなり動く。もちろんdevcontainer.jsonは別途必要