ZHDYA(七哥),9年互联网一线K8S从业者,专注分享K8S生态为主的实战经验,助力大家更高效、可靠地构建和管理容器!
近期更新:K8S架构、公有云、持久化存储、HELM、CICD、负载均衡、监控告警、可观察性、服务治理、AI探索等文章。
关注回复:“学习资料”,“面试资料”,获取惊喜!
在云原生与边缘计算爆发式增长的当下,跨平台镜像已成为现代开发者的刚需。
从x86云服务器到ARM边缘设备,从M1 Mac到国产化信创环境,开发者亟需一种能 自动生成多架构镜像 的标准化方案,以摆脱手动为每个硬件平台重复构建、测试、推送镜像的低效循环。
1)问题
如果尝试拉取不支持所有架构的 Docker 镜像,大概率会收到以下错误:
➜ docker pull zhdya/hey:latest
latest: Pulling from techiescamp/hey
no matching manifest for linux/arm64/v8 in the manifest list entries
在 Kubernetes 中,如果镜像不支持当前节点架构,会引发 ImagePullBackOff
错误。可以通过对 Pod 进行故障排除来检查是否。 为了解决这个问题,我们可以构建一个可以支持多种架构的 Docker 镜像。
2)使用 buildx 构建多架构 Docker 镜像
要构建多架构镜像,咱们需要使用名为 buildx 的 Docker 工具。
不必单独安装 Buildx,它在 MAC 和 Windows 上带有最新版本的 Docker Engine,在 Linux 中它带有最新的 Docker CLI 版本。
创建 Dockerfile,执行以下命令构建并推送多架构支持镜像。
docker buildx build \
--platform linux/amd64,linux/arm64,linux/arm/v8 \
-t zhdya/hey:latest \
--push .
- 作用:使用 Docker Buildx 插件进行镜像构建(传统
docker build
的增强版)。
--platform linux/amd64,linux/arm64,linux/arm/v8
linux/amd64
:64 位 x86 架构(常见 Intel/AMD 服务器/PC)。linux/arm64
:64 位 ARM 架构(如 Apple Silicon、树莓派 4B+)。linux/arm/v8
:ARMv8 架构(可能指 32 位 ARM,但通常 linux/arm64
更常见)。
- 结果:会为每个平台生成独立的镜像层,并自动创建统一的 manifest 列表。
-
对比:若省略此参数,镜像仅保存在本地(多平台构建时默认不保存到本地)。
3)验证&测试
Dockerfile:
# 使用多平台兼容的 Alpine 镜像作为基础
FROM --platform=$TARGETPLATFORM alpine:latest
# 示例:安装一个跨平台工具(如 curl)
RUN apk add --no-cache curl
# 示例:输出当前架构信息
RUN echo "Building for target platform: $TARGETPLATFORM"
# 设置容器启动时的默认命令
CMD ["echo", "Hello, multi-architecture world!"]
创建支持多平台的构建器 & 编译:
docker buildx create \
--name multi-platform-builder \ # 构建器名称
--platform linux/amd64,linux/arm64,linux/arm/v8 \ # 指定支持的平台
--driver docker-container \ # 使用容器驱动以实现跨平台构建
--use # 创建后立即启用该构建器
docker buildx build \
--platform linux/amd64,linux/arm64,linux/arm/v8 \
-t zhdya/helloalpine:latest \
--push .
验证环节,它显示了所有支持的作系统/架构,如下所示:

4)其他架构的支持
- Linux/arm/v7 -> 32 位 ARM(较旧的 Raspberry Pi 设备)
- linux/ppc64le -> 64 位 PowerPC Little Endian 用于 IBM 的某些系统。
- linux/s390x -> IBM Z 和 LinuxONE 系统。
- windows/amd64 -> 适用于 64 位 Windows 系统。
- linux/riscv64 -> RISC-V 64 位。