第一种方案:使用 QEMU + binfmt_misc(推荐)
启用 binfmt 支持(Linux)
会提示解释器安装完成 docker run --privileged --rm tonistiigi/binfmt --install all

这会注册多种架构的解释器(包括 x86_64),让内核自动调用 QEMU 模拟。

拉取并运行 x86 镜像(指定平台) docker run --platform linux/amd64 -it ubuntu:20.04 uname -m 输出应为 x86_64,即使你是在 ARM 主机上运行。docker 版本要支持 --platform 参数
拉取镜像:
docker pull --platform=linux/amd64 ubuntu:18.04
扩展命令:
卸载全部解释器:
docker run --privileged --rm tonistiigi/binfmt --uninstall all
卸载个别解释器:
docker run --privileged --rm tonistiigi/binfmt --uninstall amd64
第二种方案:使用 multiarch/qemu-user-static(推荐)原理与方案一一致,只是镜像插件不同
sudo apt-get install qemu binfmt-support qemu-user-static # 安装qemu包 docker run --rm --privileged multiarch/qemu-user-static --reset -p yes # 这一步将执行注册脚本(docker+qemu功能) docker run --rm -t arm64v8/ubuntu uname -m # 测试仿真环境 #aarch64
第三种方案:使用 Docker Buildx 构建多架构镜像(长期方案)
1、 目前安装较高版本docker 会自带buildx
2、github 官网进行安装 https://github.com/docker/cli/blob/master/experimental/README.md
对于构建镜像的ARM版本,有如下两种方式:
- 在ARM机器上使用 docker build 进行构建;
- 在X86/AMD64 的机器上使用 docker buildx 进行交叉构建;
如需使用 buildx,需要开启docker的实验功能后,才可以使用,开启方式
编辑 /etc/docker/daemon.json 添加: { "experimental": true } 编辑 ~/.docker/config.json 添加: "experimental" : "enabled" 重启Docker使生效: sudo systemctl daemon-reload sudo systemctl restart docker 确认是否开启: docker version -f’{{.Server.Experimental}}’ 如果输出true,则表示开启成功
使用buildx构建
使用 docker buildx ls 命令查看现有的构建器
docker buildx ls
创建并构建器:
# 创建 buildx builder(如果尚未创建) docker buildx create --use # 构建并推送多架构镜像 docker buildx build \ --platform linux/amd64,linux/arm64 \ -t your-registry/your-image:tag \ --push .
直接运行:
docker run your-registry/your-image:tag # 自动选择 arm64 版本
浙公网安备 33010602011771号