一臺docker機器如何實現構建多平臺鏡像

1.實現方式

? ? ? 想在 x86_64/amd64 的一臺機器平臺上,構建適用于多個平臺的鏡像,例如 linux/amd64、linux/arm64,根據官方文檔,有三種方法可以使用:

QEMU
??使用 QEMU 模擬構建多平臺映像是最簡單的入門方法,但可能比本機構建慢得多,特別是對于編譯、壓縮或解壓縮等計算量大的任務。因此如果條件允許的話,更推薦使用 Cross-compilation(交叉編譯)。


Multiple native nodes
??使用多個本機節點可以為 QEMU 無法處理的更復雜的情況提供更好的支持,并且通常具有更好的性能。


Cross-compilation
??交叉編譯使多平臺構建速度更快、用途更廣泛,但必須要有相對應的編譯器。
?

注意:QEMU 使用起來最簡單,所以我們在x86_64平臺上構建arm64鏡像并運行容器時使用這種方式。

2.QEMU方式實現

如果是Docker Desktop ,可能已經預配置了 binfmt_misc 對其他平臺的支持, 但對于其他版本 Docker, 你可能需要使用 tonistiigi/binfmt 鏡像啟動一個特權容器來進行支持,如果您的節點已經支持 QEMU(例如,如果您正在使用 Docker Desktop),QEMU 是最簡單的入門方式。它不需要更改您的 Dockerfile,BuildKit 會自動檢測可用的輔助架構。當 BuildKit 需要運行不同架構的二進制文件時,它會自動通過binfmt_misc?處理程序中注冊的二進制文件加載它:

docker run --privileged --rm tonistiigi/binfmt --install all

使用docker buildx ls查看,如下已經支持:?

docker buildx ls
NAME/NODE       DRIVER/ENDPOINT STATUS  BUILDKIT PLATFORMS
default *       dockerdefault       default         running 20.10.21 linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
desktop-linux   dockerdesktop-linux desktop-linux   running 20.10.21 linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

當然這里有一個比較重要的一點:

binfmt_misc為了使在主機操作系統上注冊的 QEMU 二進制文件能夠在容器內透明地工作,必須使用fix_binary?標志進行注冊。這需要內核 >= 4.8 和 binfmt-support >= 2.1.7。您可以通過檢查F中的標志 是否正確來檢查注冊是否正確/proc/sys/fs/binfmt_misc/qemu-*。雖然 Docker Desktop 預先配置了binfmt_misc對其他平臺的支持,但對于其他安裝,可能需要使用映像進行安裝tonistiigi/binfmt?。

?3.builder的使用

可以使用默認的builder,也可以創建builder,默認的就是上邊docker buildx ls中看到的,可以這樣創建builder:

docker buildx create --name mybuilder

啟動builder:

docker buildx inspect --bootstrap mybuilder

?4.構建不同平臺鏡像

如下構建多平臺鏡像就可以

docker buildx build --platform linux/arm64,linux/amd64 -t test/aa:v1 .

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41933.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41933.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41933.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端面試題13(API請求方法)

在前端JavaScript中,進行API請求主要可以通過幾種方式來實現,最常見的是使用XMLHttpRequest(較舊的方法)、fetch(現代瀏覽器推薦方法)以及使用第三方庫如axios或jQuery.ajax等。 1. XMLHttpRequest 這是最…

仙人掌中的SNMP檢測不到服務器

登錄有問題的服務器1.檢測snmp localhost:~ # ps -ef|grep snmp root 55180 1 0 08:37 ? 00:00:08 /usr/sbin/snmpd -r -A -LF n /var/log/net-snmpd.log -p /var/run/snmpd.pid root 58436 53989 0 09:44 pts/0 00:00:00 grep --colorauto snmp2.檢測…

linux 編譯perf 工具

centos7下編譯步驟: wget https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.10.tar.gz tar -xf linux-3.10.tar.gz cd linux-3.10/tools/ yum install -y flex bison python2-devel make perf ./perf/perf top -d 1…

昇思第10天

RNN實現情感分類 二分類問題:Positive和Negative兩類 步驟: 1.加載IMDB數據集 2.加載預訓練詞向量:預訓練詞向量是對輸入單詞的數值化表示,通過nn.Embedding層,采用查表的方式,輸入單詞對應詞表中的index,…

【算法專題】模擬算法題

模擬算法題往往不涉及復雜的數據結構或算法,而是側重于對特定情景的代碼實現,關鍵在于理解題目所描述的情境,并能夠將其轉化為代碼邏輯。所以我們在處理這種類型的題目時,最好要現在演草紙上把情況理清楚,再動手編寫代…

FreeRTOS——隊列集

一、隊列集 一個隊列只允許任務間傳遞的消息為 同一種數據類型 ,如果需要在任務間 傳遞不同數據類型的消息 時,那么就可以使用隊列集 作用:用于對多個隊列或信號量進行“監聽”(接收或獲取),其中 不管哪一…

js 使用 lodash-es 檢測某個值是否是函數

import { isFunction } from lodash-eslet isA isFunction(() > {}) console.log(isA) //true https://www.lodashjs.com/docs/lodash.isFunction#_isfunctionvalue https://lodash.com/docs/4.17.15#isFunction 人工智能學習網站 https://chat.xutongbao.top

Spring框架配置進階_自動裝配(XML和注解)

Spring配置進階 Spring 容器提供配置元數據有三種方式 XML配置文件。基于注解的配置。基于java的配置。 一、自動裝配 應用程序上下文為你找出依賴項的過程,Spring會在上下文中自動查找,并自動給bean裝配與其關聯的屬性 Spring中實現自動裝配的方式有兩種: XML文…

26-ARM常用匯編指令

匯編格式: label:instruction comment label:標號instruction:具體匯編指令comment:注釋內容 常用段名: .text:代碼段.data:初始化的數據段.bss:未初始化的數據段.ro…

Spring Boot+Vue項目從零入手

Spring BootVue項目從零入手 一、前期準備 在搭建spring bootvue項目前,我們首先要準備好開發環境,所需相關環境和軟件如下: 1、node.js 檢測安裝成功的方法:node -v 2、vue 檢測安裝成功的方法:vue -V 3、Visu…

JSP WEB開發(一) JSP語言基礎

目錄 JSP JSP簡介: JSP頁面 JSP運行原理 JSP腳本元素 JAVA程序片 局部變量 全局變量和方法的聲明 全局變量 方法的聲明 程序片執行特點 synchronized關鍵字 表達式 JSP指令標記 page指令 include指令 JSP動作標記 JSP動作元素include和include指令的…

Docker在人工智能領域的應用與實戰

摘要 人工智能(AI)技術的快速發展帶來了對高效開發和部署工具的需求。Docker作為一個創新的容器化平臺,為AI領域提供了強大的支持。本文詳細介紹了Docker在AI模型開發、訓練、部署以及服務器集群管理等方面的應用,并探討了其在數…

AcWing 1550:完全二叉搜索樹

【題目來源】https://www.acwing.com/problem/content/1552/【題目描述】二叉搜索樹 (BST) 遞歸定義為具有以下屬性的二叉樹: (1)若它的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值 (2)若它的右…

大數據平臺之數據同步

數據同步也成為CDC (Chanage Data Capture) 。Change Data Capture (CDC) 是一種用于跟蹤和捕獲數據庫中數據變更的技術,它可以在數據發生變化時實時地將這些變更捕獲并傳遞到下游系統。以下是一些常用的開源 CDC 方案: 1. Flink CDC Flink CDC 是基于 …

快速上手LangChain:構建強大的語言模型應用

引言 在人工智能和自然語言處理(NLP)領域,構建高效且強大的語言模型應用變得越來越重要。LangChain 是一個專為開發者設計的框架,它簡化了語言模型應用的構建流程。本文將詳細介紹LangChain的功能和使用方法,幫助讀者…

76 4G模組 境外撥號入網注意

1 引言 最近朋友把國內的設備拿到新加坡了,然后發現原本國內可以使用的設備無法在異國他鄉聯網,所以就叫我來看看,發現是附網返回狀態、入網APN發生了改變導致的。另外,如果在境外使用國產4G模組撥號入網,也需要關注4G…

Windows安裝超好用的截圖工具——Snipaste

1、下載 官網:https://zh.snipaste.com/ 2、安裝 (1)解壓下載的壓縮包 (2)選中Snipaste.exe文件,右鍵發送到 -- > 桌面快捷方式 (3)雙擊桌面Snipaste圖標,桌面右下…

linux 服務器數據備份 和 mysql 數據遷移

查看域名ip 查看程序所處文件位置 list open files 1、 lsof -i :port 查看端口獲取進程 pid 2、lsof -i pid 1、scp 下載服務器文件到本地 security copy protocol 2、導出服務器 mysql 數據庫(表)到本地 mysqldump是MySQL自帶的一個實用程序&…

解析Java中1000個常用類:Date類,你學會了嗎?

在線工具站 推薦一個程序員在線工具站:程序員常用工具(http://cxytools.com),有時間戳、JSON格式化、文本對比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。程序員資料站 推薦一個程序員編程資料站:程序員的成長之路(http://cxyroad.com),收錄了一些列的技術教程…

Git 完整的提交規范教程

約定式提交規范 本文中的關鍵詞 “必須(MUST)”、“禁止(MUST NOT)”、“必要(REQUIRED)”、“應當(SHALL)”、“不應當(SHALL NOT)”、“應該(S…