多架构镜像整合全攻略:在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架构的镜像。

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

相关推荐
Mr小林11 分钟前
Docker 安装教程(在线 + 离线)
运维·docker·容器
caoerzhong37 分钟前
JeeWMS 开源仓库管理系统多租户架构解析:一套 Java WMS 如何同时服务多个货主与多个仓库
java·架构·开源·vue
聚搜云——JuSouClouD1 小时前
阿里云代理商能帮忙设计架构方案吗?有哪些增值服务
阿里云·架构·云计算
java_logo1 小时前
Docker 部署 Milvus:轻松搭建高性能向量数据库平台
数据库·docker·私有化部署·milvus·向量数据库·rag·轩辕镜像
白远山2 小时前
智慧场馆解决方案软件开发实战:从架构设计到落地部署指南
java·开发语言·架构·需求分析
m0_587383002 小时前
折扣卡CPS软件开发实战:从系统架构设计到上线指南
java·小程序·架构·需求分析
Dawson Zhu2 小时前
基于 OKF 知识图谱的 Text2SQL 领域知识注入实践——半导体晶圆厂数据资产知识库 MVP 剖析
人工智能·语言模型·架构·aigc·agi
晚安日记wanna2 小时前
批量请求失败只弹一个 Toast面试官想听五层
前端·面试·架构
大模型码小白2 小时前
告别造假数据,直接连数据库查真实时序数据喂给 TimechoAI 大模型
java·数据库·人工智能·microsoft·架构
晚安日记wanna2 小时前
大表 DDL 面试翻车现场Online DDL 为什么还会锁死业务
数据库·面试·架构