多架構鏡像整合全攻略:在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
英文地址,請注明出處:http://en.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業務數據庫維…