社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

如何构建多架构 Docker 镜像(ARM、x86 等)

运维狗工作日记 • 2 周前 • 53 次点击  

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 .
  1. docker buildx build
  • 作用:使用 Docker Buildx 插件进行镜像构建(传统 docker build 的增强版)。
  • 特点:支持多平台构建、缓存优化等高级特性。
  1. --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 列表。
  1. --push
  • 作用:构建完成后直接推送镜像到远程仓库。
  • 对比:若省略此参数,镜像仅保存在本地(多平台构建时默认不保存到本地)。

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 位。

●  🔥【实战】K8S云原生企业实战训练营课程大纲(直播+录播)

● ⚓【加薪】基于 Istio 的微服务架构实践总结

● 🏆【精华】基于Prometheus的全方位监控平台

● 🌟【Free】每天2分钟,跟我学Istio

● 🌟【Free】应用可观察性-APM

● 🌟【Free】负载均衡Ingress-nginx最佳实践

● 🌟【Free】基于Jenkins的CICD实战场景

● 🌟【Free】Helm企业场景从入门到精通

● 🌟【Free】K8S故障|经验|考题|手册

● 🌟【Free】基于K8S场景下存储持久化

● 🌟【Free】K8S基础架构讲解(面向企业真实场景)

● 😉加群】扫码,备注: 进群

● 关注回复“学习资料”,“面试资料”,获取惊喜!

关注七哥,带你领略不一样的K8S!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/182677
 
53 次点击