多架构镜像整合全攻略:在Docker中实现单一镜像支持同时支持amd64和arm64架构

  • 多架构支持的挑战 :随着异构计算(如 ARM、x86、RISC-V 等)的普及,开发者需要为不同硬件平台提供对应的镜像,传统方式需维护多个版本(如 image:v1-amd64image:v1-arm64 ),导致版本管理复杂。
  • Docker 的解决方案 :通过 Manifest List(清单列表) 将多架构镜像合并到单一版本下,用户只需拉取 image:v1 ,Docker 会自动匹配当前平台对应的镜像。

Docker合并多架构镜像到一个镜像方案

拉取镜像

先将不同架构的镜像拉取到本地

shell 复制代码
docker pull registry.cn-guangzhou.aliyuncs.com/devyunze/linux_amd64_nginx:1.26.3

docker pull registry.cn-guangzhou.aliyuncs.com/devyunze/linux_arm64_v8_nginx:1.26.3

修改镜像名

将不同架构镜像的 repository 修改一致,在tag 标签里做版本和架构的区分。

shell 复制代码
docker image tag registry.cn-guangzhou.aliyuncs.com/devyunze/linux_amd64_nginx:1.26.3 registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3_amd64

docker image tag registry.cn-guangzhou.aliyuncs.com/devyunze/linux_arm64_v8_nginx:1.26.3 registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3_arm64

推送镜像

这里使用的是阿里云的容器镜像服务,但是不管使用哪家企业提供的镜像服务,其操作过程都是一样的,将本地的修改好名称的镜像推送上去。

shell 复制代码
docker push registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3_arm64

docker push registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3_amd64


创建清单

shell 复制代码
docker manifest create registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3 registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3_arm64 registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3_amd64

推送清单

shell 复制代码
docker manifest push registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3

删除清单

shell 复制代码
docker manifest rm registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3 

验证

arm64架构环境拉取amd64架构镜像验证

shell 复制代码
docker pull --platform linux/amd64 registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3

运行镜像验证

shell 复制代码
docker run -d --name=nginx-test -p 80:80 registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3 

运行镜像时可以看到,已经有警告提示信息说架构不匹配了。这就证明拉取到镜像的确实是amd64架构的镜像。

arm64架构环境拉取arm64架构镜像验证

先清理上一步测试的容器和镜像。

关闭并删除之前测试的容器和镜像。

shell 复制代码
docker stop d23741cd8db3

docker rm d23741cd8db3

docker rmi registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3

拉取arm64镜像

shell 复制代码
docker pull --platform linux/arm64 registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3

运行镜像验证

shell 复制代码
docker run -d --name=nginx-test -p 80:80 registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3 

可以看到容器运行成功,并成功访问到nginx。

证明此次拉取到镜像的确实是arm64架构的镜像。

至此将多个架构镜像合并到一个镜像里的操作可以宣告成功了。

相关推荐
xfhuangfu3 分钟前
19c CDB架构下的数据库启动和停止
数据库·架构
爱折腾的小黑牛18 分钟前
小程序云开发数据模型设计:礼账系统的三表结构
数据库·架构
XUHUOJUN1 小时前
Azure Local GPU 部署与企业应用场景指南(下篇)
microsoft·架构·nvidia·azure local
爱勇宝2 小时前
3位工程师靠“删AI代码”创业,一周收费1万美元:以后最贵的能力,可能不是写代码
前端·后端·架构
jieyucx2 小时前
Docker 入门第二阶段:掌握日常命令
运维·docker·容器
●VON2 小时前
HarmonyKit | 鸿蒙开发:项目目录结构与多模块架构最佳实践
华为·架构·单元测试·harmonyos·鸿蒙
有毒的教程3 小时前
Kubernetes进阶实战教程(生产落地完整版)
云原生·容器·kubernetes
没落英雄3 小时前
6. 从零搭建一个 AI Agent —— 构建 Web 前端,让用户能和 agent 实时交互
前端·人工智能·架构
鱼听禅4 小时前
Ubuntu学习笔记-安装docker容器
学习·ubuntu·docker
不会C语言的男孩5 小时前
Docker 在嵌入式设备中的常用玩法
运维·docker·容器