属于我的梦,明明还在
个人工具站/持续更新中 http://rhx0306.online/

第一种方案:使用 QEMU + binfmt_misc(推荐)

启用 binfmt 支持(Linux)
会提示解释器安装完成 docker run
--privileged --rm tonistiigi/binfmt --install all

image

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

image

拉取并运行 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版本,有如下两种方式:

  1. 在ARM机器上使用 docker build 进行构建;
  2. 在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 版本
posted on 2025-03-24 16:11  属于我的梦,明明还在  阅读(1228)  评论(0)    收藏  举报