M1 mac上でDockerをx86-64/arm64両方扱えるようにLimaの設定する。
Docker for Mac よりも Lima を使ったほうが早い、それと arm ではなく x86_64 で使いたいことがあるので m1 mac の Docker 環境を Docker for Mac から Lima へ変更しました。
Lima構築
$ brew install lima
$ limactl start
最初のVMはデフォルトで作成しました。ここで作成されるのは arm64 のubuntuです。
lima 内の Ubuntu へ docker インストール
lima をつけてコマンドを実行すると最初に作成した default と名前のついたVMで実行されます。
$ lima sh -c 'curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg'
$ lima sh -c 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null'
$ lima sudo apt-get update
$ lima sudo apt-get install docker-ce docker-ce-cli containerd.io
起動確認
$ lima sudo docker run hello-world
macからLima内のDockerを使う
Docker desktop は不要、Docker CLIがセットアップされている状態で
export DOCKER_HOST='unix://$HOME/.lima/default/sock/docker.sock
を追記
僕は fish なので
set -x DOCKER_HOST "unix://$HOME/.lima/default/sock/docker.sock"
起動確認、次は先頭に lima をつけず
$ docker run hello-world
これで比較的高速な Docker を使えるようになりました。 しかし arm64 なので x86-64 の vm も作っていままでの開発環境をそのまま使えるようにします。
x86-64
先程はyamlを指定せずdefaultでvmを作りましたが、今回はyamlで設定を書いて構築します。
公式のリポジトリにDockerも入れてくれるyamlがあったので
これをダウンロードして arch: "x86_64" を追記、x86-64.yaml に rename しました。
そのyamlを指定して構築します。
$ limactl start x86-64.yaml
x86-64という名前のVMが作られます。
このx86-64マシンでDockerを使いたい場合は先程の環境変数
export DOCKER_HOST='unix://$HOME/.lima/default/sock/docker.sock
を
export DOCKER_HOST='unix://$HOME/.lima/x86-64/sock/docker.sock
のように切り替えます。
よろしければTwitterのフォローお願いします。
Discussion