当前位置: 首页 > java >正文

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

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

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

拉取镜像

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

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

在这里插入图片描述

修改镜像名

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

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_amd64docker 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

在这里插入图片描述

推送镜像

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

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

在这里插入图片描述
在这里插入图片描述

创建清单

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

在这里插入图片描述

推送清单

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

在这里插入图片描述

在这里插入图片描述

删除清单

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

验证

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

docker pull --platform linux/amd64 registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3

在这里插入图片描述

在这里插入图片描述

运行镜像验证

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

在这里插入图片描述

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

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

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

在这里插入图片描述

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

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

在这里插入图片描述

拉取arm64镜像

docker pull --platform linux/arm64 registry.cn-guangzhou.aliyuncs.com/devyunze/nginx:1.26.3

在这里插入图片描述

运行镜像验证

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

在这里插入图片描述

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

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

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

http://www.xdnf.cn/news/16777.html

相关文章:

  • 贝锐蒲公英X4 Pro 5G新品路由器:异地组网+8网口+双频WiFi全都有
  • 网站域名备案和服务器有关系吗
  • 【源力觉醒 创作者计划】文心大模型开源:从封闭研发到生态共建的转折点
  • 设计模式:命令模式 Command
  • 【Java23种设计模式】:模板方法模式
  • Windows 11下IDEA中使用git突然变得卡慢及解决办法
  • UI测试平台TestComplete如何实现从Git到Jenkins的持续测试
  • 【AI大模型】披着羊皮的狼--自动化生成越狱提示的系统(ReNeLLM)
  • thinkphp3.2 中使用redis
  • Linux应用开发基础知识——Makefile初级教程(九)
  • 分布式微服务--万字详解 微服务的各种负载均衡全场景以注意点
  • Echarts堆叠柱状图和折线图以及堆叠柱状画遇到存在极小值label数字重叠解决
  • python之使用ffmpeg下载直播推流视频rtmp、m3u8协议实时获取时间进度
  • 【qiankun】基于vite的qiankun微前端框架下,子应用的静态资源无法加载的问题
  • 进阶向:YOLOv11模型轻量化
  • 浅谈“压敏电阻”
  • 【Prompt集合】一个学习英文单词更好的提示词
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第一天(HTML5)
  • WinForm之CheckBox 控件
  • 微服务架构技巧篇——接口类设计技巧
  • 循环神经网络RNN原理精讲,详细举例!
  • 【笔记】重学单片机(51)
  • 嵌入式硬件中瓷片电容的基本原理与详解
  • 51c自动驾驶~合集12
  • 图像处理中级篇 [2]—— 外观检查 / 伤痕模式的原理与优化设置方法
  • MELF电阻的原理,特性和应用
  • 8,FreeRTOS时间片调度
  • 技术速递|GitHub Copilot for Eclipse 迈出重要一步
  • Leetcode-206.反转链表
  • 当过滤条件不符合最左前缀时,如何有效利用索引? | OceanBase SQL 优化实践