Intel-on-ARM / ARM-on-Intel
Lima 支持两种运行 Intel-on-ARM 和 ARM-on-Intel 的模式:
- 慢速模式:ARM 主机上的 Intel VM / Intel 主机上的 ARM VM
- 快速模式:ARM 主机上的 ARM VM 上的 Intel 容器 / Intel 主机上的 Intel VM 上的 ARM 容器
- 快速模式 2 (Rosetta):ARM 主机上的 ARM VM 上的 Intel 容器
慢速模式:ARM 主机上的 Intel VM / Intel 主机上的 ARM VM
Lima 可以运行外来架构的 VM,只需在 YAML 中指定 arch
即可。
arch: "x86_64"
# arch: "aarch64"
images:
- location: "https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img"
arch: "x86_64"
- location: "https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-arm64.img"
arch: "aarch64"
# 禁用挂载和 containerd,否则如果主机较慢,启动可能会超时
mounts: []
containerd:
system: false
user: false
运行外来架构的 VM 极其缓慢。 尽可能考虑使用快速模式或快速模式 2。
快速模式:ARM 主机上的 ARM VM 上的 Intel 容器 / Intel 主机上的 Intel VM 上的 ARM 容器
此模式使用 QEMU 用户模式仿真。 QEMU 用户模式仿真明显比 QEMU 系统模式仿真快,但它通常牺牲兼容性。
设置:
lima sudo systemctl start containerd
lima sudo nerdctl run --privileged --rm tonistiigi/binfmt:qemu-v7.0.0-28@sha256:66e11bea77a5ea9d6f0fe79b57cd2b189b5d15b93a2bdb925be22949232e4e55 --install all
运行容器:
$ lima nerdctl run --platform=amd64 --rm alpine uname -m
x86_64
$ lima nerdctl run --platform=arm64 --rm alpine uname -m
aarch64
构建和推送容器镜像:
lima nerdctl build --platform=amd64,arm64 -t example.com/foo:latest .
lima nerdctl push --all-platforms example.com/foo:latest
另请参阅 https://github.com/containerd/nerdctl/blob/main/docs/multi-platform.md
快速模式 2 (Rosetta):ARM 主机上的 ARM VM 上的 Intel 容器
⚡ 要求 | Lima >= 0.14, macOS >= 13.0, ARM |
---|
众所周知,Rosetta 比 QEMU 用户模式仿真快得多。 Rosetta 可用于 ARM 主机上的 VZ 实例。
limactl start --vm-type=vz --rosetta
vmType: "vz"
rosetta:
# 为 Linux 启用 Rosetta。
# 提示:如果 Lima 卡在 `Installing rosetta...`,请尝试 `softwareupdate --install-rosetta`
enabled: true
# 将 rosetta 注册到 /proc/sys/fs/binfmt_misc
binfmt: true