使用manifest創建多CPU架構的鏡像

前言


Docker image 存儲設計之初,沒有充分考慮到鏡像Multi architecture的支持,而是簡單的使用鏡像存儲庫的前綴來區分相同應用的不同平臺,并建議開發者將不同平臺的鏡像應該push到相對應的Docker hub的鏡像倉庫中,目前這種設計依舊保存在最新的Docker設計文檔中:

https://github.com/docker-library/official-images#architectures-other-than-amd64

我們可以基于鏡像存儲庫的前綴,或者是基于tag或image名稱后綴來區分不同的運行平臺來pull相應的Docker鏡像,例如:


manifest相關命令


查看一個鏡像的manifest文件信息

$docker manifest inspect java

查看一個鏡像的manifest文件的詳細信息包括cpu平臺架構等信息

$docker manifest inspect --verbose java


使用manifest創建多CPU架構的鏡像


1)實現一個 arm或者amd64 平臺都可以執行的main.go腳本(略

2)構建鏡像

雖然我們要實現 “多架構” 構建,但我們首先構建這兩個架構的image。以下是它們的Dockerfile文件

不同的架構需要修改GOARCH

(1)構建第一個arm架構的鏡像,并推送到dockerhub中

????????????$ docker build -t blackdob/test-arch:v1-arm -f ./build/Dockerfile .

? ??????????$ docker push blackdob/test-arch:v1-arm

(2)構建第一個amd64架構的鏡像,并推送到dockerhub中(需要更改GOARCH=amd64)

????????????$ docker build -t blackdob/test-arch:v1-amd64 -f ./build/Dockerfile .

? ??????????$ docker push blackdob/test-arch:v1-amd64


3)查看 Experimental 是否已開啟

????????docker version


3) 創建一個manifest list列表

創建一個自定義命名的鏡像名的manifest list,然后用該列表關聯倉庫里面的兩個不同架構的鏡像

$ docker manifest create --insecure blackdob/test-arch:v1 blackdob/test-arch:v1-amd64 blackdob/test-arch:v1-arm

?? 此時存在的問題是兩個鏡像的架構都是amd64, 我們需要將對應的鏡像手動使用annotate更改為arm

? ? ?$ docker manifest annotate blackdob/test-arch:v1 blackdob/test-arch:v1-arm --arch arm

此時再查看就沒問題了


4) 將創建好的manifest list 推到倉庫中:

????$ docker manifest push -p --insecure blackdob/test-arch:v1


????-p : 創建的MANIFEST_LIST會保存在本地目錄~/.docker/manifests,在push時可以使用-p(--purge)參數刪除本地數據


4)、查看倉庫中創建好的manifest list:

????$ docker manifest inspect blackdob/testarch:v1

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容