在x86服务器上构建arm架构容器镜像
- docker
- 2小时前
- 0评论
随着技术架构的深刻变革,docker 镜像也迎来了关键的转型 —— 从 x86 向 arm 架构转变。
在Linux系统上构建ARM镜像,可以通过使用Docker的buildx插件 来实现。以下是具体的操作步骤:
1.安装Docker Buildx:
Docker 与 Buildx 之间没有一份官方发布的、严格一一对应的版本兼容性矩阵。不过,根据官方文档和发行说明,可以梳理出一个清晰的版本对应关系和使用建议。
核心版本要求:
-
最低要求:使用 Buildx 要求 Docker Engine 19.03 或更高版本。这是能否使用
buildx命令的门槛。 -
默认集成:从 Docker Engine 23.0 和 Docker Desktop 4.19 开始,Buildx 已成为默认的构建客户端。这意味着直接运行
docker build命令,背后调用的就是 Buildx。
以下是根据公开信息整理的部分 Docker 版本所捆绑的 Buildx 版本:
| Docker 版本 | 捆绑的 Buildx 版本 | 备注 |
|---|---|---|
| Docker 20.10 | v0.9.1, v0.10.0, v0.10.4 | 不同补丁版本会更新 Buildx |
| Docker 23.0+ | 需单独安装 | 自此版本起,Buildx 成为默认构建客户端 |
| Docker 28+ | 需单独安装 | 推荐使用,以获得最完整的 Buildx 功能支持 |
安装buildx插件的示例命令:
wget https://github.com/docker/buildx/releases/download/v0.14.0/buildx-v0.14.0.linux-amd64
chmod a+x buildx-v0.14.0.linux-amd64
mkdir -p /usr/libexec/docker/cli-plugins
mv buildx-v0.14.0.linux-amd64 /usr/libexec/docker/cli-plugins/docker-buildx
如果遇到 client version ... is too old 或 is too new 之类的错误,通常意味着 Buildx 与 Docker 守护进程(Daemon)的 API 版本不匹配。此时,升级或降级 Buildx 版本(优先选择与 Docker 版本相近的发行版)通常可以解决问题。
2.启用Docker实验性功能:
通过修改Docker配置文件(通常位于/etc/docker/daemon.json)来启用实验功能。
{
"experimental": true
}
重启Docker服务:
systemctl daemon-reload
systemctl restart docker
3.检查实验特性是否开启以及buildx是否安装成功:
docker version --format '{{.Server.Experimental}}'
docker buildx version
4.创建buildx构建器:
推荐使用docker-container驱动,它对多平台构建支持更好
docker buildx create --name image_buildx --driver docker-container --use
docker buildx ls
5.构建ARM镜像:
使用buildx构建ARM镜像的命令:
docker buildx build --platform=linux/arm64 -t your-image-name:tag --push .
这个命令会构建一个指定平台(这里是ARM64)的Docker镜像,并将其推送到远程仓库。
-
加速构建(交叉编译):QEMU模拟会降低构建速度,尤其是在编译大型项目时。如果使用Go、Rust等语言,可以在Dockerfile中直接设置目标操作系统和架构的环境变量(如
GOOS=linux,GOARCH=arm64)进行交叉编译,速度会快很多。 -
显式指定基础镜像:如果Dockerfile中的基础镜像没有明确支持ARM,可以在
FROM指令中指定平台:
FROM --platform=linux/arm64 ubuntu:22.04
6.实操范例演示&验证:
拉取特定于ARM64平台的Docker镜像,使用以下命令格式:
docker pull --platform=linux/arm64 <镜像仓库地址>/<镜像名>:<标签>
检查已拉取的Docker镜像的详细信息,使用以下命令格式:
docker inspect <镜像仓库地址>/<镜像名>:<标签>

将Docker镜像保存为tar格式的文件,使用以下命令格式:
docker save --platform linux/arm64 -o <本地文件>.tar <镜像仓库地址>/<镜像名>:<标签>
7.安装QEMU与binfmt-support:这是实现跨平台模拟的关键。
yum -y install qemu-user-static binfmt-support
8.在X86架构机器上运行ARM镜像:
确保Docker实验特性已经开启,运行一个特权容器,将QEMU注册到内核的binfmt_misc模块,使内核能自动调用QEMU来运行ARM程序,运行以下命令来启用QEMU仿真:
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
仿真开启成功后,使用以下命令运行ARM镜像:
docker run -it --platform=linux/arm64 your-arm64-image
以上步骤提供了在Linux 系统上构建ARM镜像的详细指南,包括安装buildx、启用实验性功能、创建构建器、构建镜像以及在X86架构机器上运行ARM镜像的方法。
