首頁>技術>

​​​摘要:使用Multi-Architecture映象,可以讓docker根據系統架構去拉取對應的映象,服務的部署指令碼等可以在不同架構的系統間使用相同的配置,減化服務配置,提高了服務在不同系統架構間的一致性。

背景

由於Kubernetes叢集支援amd64和arm64架構的系統,容器部署時兩種型別的節點都可能被叢集排程到;所以容器在打包推送到映象倉庫時需要考慮支援多架構,防止排程到不支援的架構節點導致執行失敗。

簡介Docker register: v2.3.0開始支援Multi-Architecture映象Docker CLI

o v1.11開始支援Multi-Architecture映象拉取

o v18.03開始支援Multi-Architecture映象製作

參考資料:

Manifest標準:https://docs.docker.com/registry/spec/manifest-v2-1/Manifest命令:https://docs.docker.com/engine/reference/commandline/manifest/Registry:https://github.com/docker/distribution/releases/tag/v2.3.0製作說明

雖然Multi-Architecture標準很早就有,但是官方的Docker CLI直到v18.03版本才開始支援Multi-Architecture映象的製作;或者可以考慮使用第三方工具,參考:構建多CPU架構支援的Docker映象

後續Multi-Architecture映象的製作使用Docker v18.09版本進行說明。

設定Docker

Docker使用manifest命令來設定MANIFEST_LIST從而支援Multi-Architecture。到Docker v18.09版本為止,manifest命令還是實驗性的,所以要配置Docker使能實驗性功能。

Docker daemon

修改配置檔案/etc/docker/daemon.json,新增配置"experimental": true:

Docker Cli

修改當前使用者home目錄的配置檔案~/.docker/config.json,新增配置"experimental":"enabled":

驗證配置

重啟docker服務,手工執行dockermanifest,出現如下資訊說明配置成功:

映象打包

示例程式stop是一個go程式,啟動後暫停不做任何操作,編譯到amd64和arm64平臺,在amd64平臺分別執行如下:

使用相同的Dockerfile:

amd64版本arm64版本驗證映象建立MANIFEST_LIST

建立一個MANIFEST_LIST引用之前兩個不同平臺的映象。

修改MANIFEST_LIST

修改剛建立的MANIFEST_LIST,使映象和架構對應。

驗證升級MANIFEST_LIST

後期升級MANIFEST_LIST方法與建立類似,如:docker-hub.***.com/zhangsan/stop:1.0-amd64映象升級或docker-hub.***.com/zhangsan/stop:1.0這個MANIFEST_LIST要關聯其它映象時,都需要升級MANIFEST_LIST。需要注意幾點:

manifest create時使用引數-a(--amend)·升級後沒有關聯到期望的映象可以先手工刪除本地儲存的manifest再嘗試使用Multi-Architecture映象的好處

使用Multi-Architecture映象,可以讓docker根據系統架構去拉取對應的映象,服務的部署指令碼等可以在不同架構的系統間使用相同的配置,減化服務配置,提高了服務在不同系統架構間的一致性。

16
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 帶你瞭解經典的Java垃圾回收機制