摘要:使用Multi-Architecture映象,可以讓docker根據系統架構去拉取對應的映象,服務的部署指令碼等可以在不同架構的系統間使用相同的配置,減化服務配置,提高了服務在不同系統架構間的一致性。
背景由於Kubernetes叢集支援amd64和arm64架構的系統,容器部署時兩種型別的節點都可能被叢集排程到;所以容器在打包推送到映象倉庫時需要考慮支援多架構,防止排程到不支援的架構節點導致執行失敗。
簡介Docker register: v2.3.0開始支援Multi-Architecture映象Docker CLIo 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版本進行說明。
設定DockerDocker使用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根據系統架構去拉取對應的映象,服務的部署指令碼等可以在不同架構的系統間使用相同的配置,減化服務配置,提高了服務在不同系統架構間的一致性。