多架构镜像整合全攻略:在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.pswp.cn/pingmian/91768.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux730 tr:-d /-s;sort:-r,-n,-R,-o,-t,-k,-u;bash;cut:-d,-c;tee -a;uniq -c -i

回顾 sort sort [选项] 文件-u:唯一,去除重复 -r:按数字大小,倒序排序,大到小 -o:输出文件 -n:按数字大小,顺序排序,小到大 -t: -t后加分割符,按分割符为标准,进行筛选 -k:k后加数字…

力扣457:环形数组是否存在循环

力扣457:环形数组是否存在循环题目思路代码题目 存在一个不含 0 的 环形 数组 nums ,每个 nums[i] 都表示位于下标 i 的角色应该向前或向后移动的下标个数: 如果 nums[i] 是正数,向前(下标递增方向)移动 |nums[i]| 步…

在 Elasticsearch 中落地 Learning to Rank(LTR)

1 为什么要引入 LTR? 常规检索(BM25、语义检索、Hybrid、RRF …)往往只能基于少量信号(关键词命中、向量相似度)排序。 Learning-to-Rank 通过机器学习模型把多维度特征(文档属性、查询属性、查询-文档相关…

Socket编程——TCP协议

文章目录一、TCP传输二、相关接口三、多进程版本四、多线程版本一、TCP传输 TCP和UDP类似,但是在传输中TCP有输入,输出缓冲区,看下面的传输图片 可以理解为TCP之间的数据传输都是依赖各自的socket,socket就充当传输的中介吧。 而…

GitHub使用小记——本地推送、外部拉取和分支重命名

GitHub 项目推送与拉取等操作使用随记 本小记适用于个人项目或组织项目,涵盖 GitHub 推送、拉取、分支管理、.gitignore 设置等常见需求。 1. 将已有本地工程推送至 GitHub 新仓库 1.1 前提条件 本地项目结构完整,已准备好;本地已安装 Git…

RabbitMQ 延时队列插件安装与使用详解(基于 Delayed Message Plugin)

RabbitMQ 延时队列插件安装与使用详解(基于 Delayed Message Plugin)📌 一、什么是 RabbitMQ 延时队列?🚀 二、安装前准备✅ RabbitMQ 环境要求🔧 三、安装延时队列插件🧩 插件名称:…

Vue项目使用ssh2-sftp-client实现打包自动上传到服务器(完整教程)

告别手动拖拽上传!本教程将手把手教你如何通过ssh2-sftp-client实现Vue项目打包后自动上传到服务器,提升部署效率300%。🚀一、需求场景与解决方案在Vue项目开发中,每次执行npm run build后都需要手动将dist目录上传到服务器&#…

《质光相济:Three.js中3D视觉的底层交互逻辑》

在Three.js搭建的虚拟维度中,光照与材质的关系远非技术参数的简单叠加,当光线以数字形态穿越虚空,与物体表面相遇的瞬间,便开始书写属于这个世界的物理叙事——每一缕光斑的形状、每一块阴影的浓淡、每一寸肌理的反光,都是对现实光学规律的转译与重构。理解这种交互的深层…

无刷电机在汽车领域的应用与驱动编程技术

文章目录引言一、核心应用场景1. 新能源汽车动力系统2. 底盘控制系统3. 车身与舒适系统4. 智能驾驶与安全系统二、无刷电机的技术优势解析三、无刷电机驱动编程基础1. 驱动原理2. 驱动架构四、核心控制算法与实现1. 六步换向法(梯形波控制)算法流程图C语…

【游戏引擎之路】登神长阶(十八):3天制作Galgame引擎《Galplayer》——无敌之道心

游戏引擎开发记录:2024年 5月20日-6月4日:攻克2D物理引擎。 2024年 6月4日-6月13日:攻克《3D数学基础》。 2024年 6月13日-6月20日:攻克《3D图形教程》。 2024年 6月21日-6月22日:攻克《Raycasting游戏教程》。 2024年…

kotlin kmp 跨平台环境使用sqldelight

欢迎访问我的主页: https://heeheeaii.github.io/ 1. 项目结构 SQLDelightKMPDemo/ ├── shared/ │ ├── src/ │ │ ├── commonMain/kotlin/ │ │ ├── androidMain/kotlin/ │ │ ├── desktopMain/kotlin/ │ │ └── commonMain/sqldel…

机器学习【五】decision_making tree

决策树是一种通过树形结构进行数据分类或回归的直观算法,其核心是通过层级决策路径模拟规则推理。主要算法包括:ID3算法基于信息熵和信息增益选择划分属性;C4.5算法改进ID3,引入增益率和剪枝技术解决多值特征偏差;CART…

简单记录一下VSCode中的一些学习记

在刚开始学习VSCode时,相信大家都会好奇VSCode底部区域那几个不同的状态栏具体有什么作用(输出、调试控制台、终端、端口),貌似好像都是输出与代码相关的信息的?貌似代码运行结果既可以出现在输出中,也可以…

基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(二)

目录 二、Hive、SparkSQL、Impala 比较 1. SparkSQL 简介 2. Hive、SparkSQL、Impala 比较 (1)功能 (2)架构 (3)场景 3. Hive、SparkSQL、Impala 性能对比 (1)cloudera 公司…

C++:std::array vs 原生数组 vs std::vector

📌 C:std::array vs 原生数组 vs std::vector 引用: C/C 标准库 std::vector、std::array、原生静态数组 的区别有哪些? 深度剖析:std::vector 内存机制与 push_back 扩容策略 今天过去了 还有许许多个明天 能和大…

Hyper-V + Centos stream 9 搭建K8s集群(二)

一、安装自动补全主节点安装就可以yum install -y bash-completion echo source <(kubectl completion bash) >>~/.bashrc kubectl completion bash >/etc/bash_completion.d/kubectl二、安装Calico网络插件&#xff08;主节点&#xff09;下载文件wget https://ca…

VBA代码解决方案第二十七讲:禁用EXCEL工作簿右上角的关闭按钮

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

Spring AI 系列之三十一 - Spring AI Alibaba-基于Nacos的MCP

之前做个几个大模型的应用&#xff0c;都是使用Python语言&#xff0c;后来有一个项目使用了Java&#xff0c;并使用了Spring AI框架。随着Spring AI不断地完善&#xff0c;最近它发布了1.0正式版&#xff0c;意味着它已经能很好的作为企业级生产环境的使用。对于Java开发者来说…

sqli-labs:Less-12关卡详细解析

1. 思路&#x1f680; 本关的SQL语句为&#xff1a; $uname".$uname."; $passwd".$passwd."; $sql"SELECT username, password FROM users WHERE username($uname) and password($passwd) LIMIT 0,1";注入类型&#xff1a;字符串型&#xff0…

【SpringAI】8.通过json动态添加mcp服务

前言 官方示例的代码中&#xff0c;mcp一般是配置到yml中或者json文件中&#xff0c;使用自动装配的方式注入服务&#xff0c;这种方式不方便在程序启动后添加新的服务&#xff0c;这里参考cherry studio的方式动态添加mcp服务 1.确定方案 mcp服务的维护放到mysql业务数据库维…