March 31, 2024

x86_64のDockerコンテナをApple Silicon Macで動かす

用意したもの

  • M2 MacBook Air
  • macOS Sonoma 14.4.1
  • Homebrew 4.2.12 でLima 0.21.0 をインストール済み

手順

Lima公式サイトのIntel-on-ARM and ARM-on-Intelには2つの方法があるけど、Rosettaを使うFast mode 2について。

VMの起動はFast mode 2に書いてあるとおり。

% limactl start --vm-type=vz --rosetta

実行すると選択肢が表示されるので、デフォルト設定のままで良ければそのままEnter、しばらく待つとUbuntu 23.10のVMが起動する。

% limactl start --vm-type=vz --rosetta
WARN[0000] `--rosetta` is experimental
? Creating an instance "default"  [Use arrows to move, type to filter]
> Proceed with the current configuration
  Open an editor to review or modify the current configuration
  Choose another template (docker, podman, archlinux, fedora, ...)
  Exit

このVMは、Intelバイナリを実行できるRosettaが入ったarm64版のUbuntu

% lima uname -a
Linux lima-default 6.5.0-25-generic #25-Ubuntu SMP PREEMPT_DYNAMIC Wed Feb  7 15:18:19 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux
% lima cat /etc/os-release
PRETTY_NAME="Ubuntu 23.10"
NAME="Ubuntu"
VERSION_ID="23.10"
VERSION="23.10 (Mantic Minotaur)"
VERSION_CODENAME=mantic
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=mantic
LOGO=ubuntu-logo

nerdctlで–platformオプションを指定すれば、arm64版はもちろん、

% lima nerdctl run --rm --platform=arm64 alpine uname -m
aarch64

amd64版のコンテナイメージも実行できる。

% lima nerdctl run --rm --platform=amd64 alpine uname -m
x86_64

Arch LinuxのDockerイメージはamd64版しかないけど、

% lima nerdctl run --rm --platform=arm64 archlinux cat /etc/os-release
docker.io/library/archlinux:latest: resolving      |--------------------------------------|
elapsed: 1.5 s                      total:   0.0 B (0.0 B/s)
FATA[0001] no match for platform in manifest: not found

この方法ならApple Silicon Macでも実行できる。

% lima nerdctl run --rm --platform=amd64 archlinux cat /etc/os-release
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
VERSION_ID=20240101.0.204074
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo

HugoのDockerイメージもamd64版しかないけど、この方法ならApple Silicon Macでも実行できる。

$ nerdctl run --rm -it --platform=amd64 -v $(pwd):/src -p 1313:1313 klakegg/hugo:0.64.1-ext server

© 2020 nissy-lab.com