Docker鏡像的多平臺架構支持

Docker 官方鏡像如今支持多平臺架構

Docker Engine在2017年取得了很大的進展,社區版和企業版進行分開,支持OCI和containerD提升開放性和並行服務的性能,在ARM和ARM64上的版本已經跟上了主版本。Docker在多個操做系統和硬件環境的支持使鏡像的多平臺支持需求變得迫切起來。html

過去的幾周, Docker 的 Official Images 放出了一些大的更新,使其支持多平臺架構的感知。如今, 當你運行 docker run hello-world, Docker CE 和 EE 將 pull 和 run 正確的 hello-world image 版本,不管是運行 x86-64 Linux, Windows, ARM, IBM Z mainframes 或者其餘Docker支持的系統。爲了給Docker 加上更多的操做系統 (like Windows) 和 CPU architectures (like IBM Z) 的支持,這裏有一些重大的改進。python

一、原來的機制

Docker Official Images 是一系列基礎鏡像的集合:git

Docker的 x86-64 Linux鏡像一直可用。對非 x86 Linux architectures 也可使用,可是採用不一樣的命名空間 (docker pull s390x/golang 用於 IBM Z mainframe) 或者採用不一樣的 tag (docker pull golang:nanoserver 用於 Windows). 這會影響無縫操做和遷移的體驗,咱們但願經過 multi-arch and and multi-os orchestration 特徵給用戶更好的體驗。github

二、統一的方法

幸運的是, Docker registry 和 distribution protocol 已經自 Docker 1.10就支持多平臺架構, 使用 manifest lists 技術. 一個 manifest list 能夠在registry裏描述一種架構的鏡像(例如 golang) ,同時包含一個列表,包含 (「platform」, 「manifest-reference」) 元組. 若是registry響應 docker pull 命令不是 image manifest裏的, Docker 檢查manifest list 而後 pull該平臺對應的 list entry而後再運行。golang

distribution protocol 是後向兼容的,  manifest lists 只服務於指明瞭支持 Accept header的客戶端。對於不支持 manifest lists的客戶端, registries 將會返回給 x86-64 Linux image manifest. Manifest lists 經過 Docker Content Trust 支持所有特徵,確保 multi-platform image 內容被加密驗證和檢驗。redis

Manifest lists 以及覆蓋Linux images下的大部分CPU架構, 對 Windows的支持也正在進行. 若是你喜歡用的 CPU 架構和 OS尚未被支持, 你能夠繼續使用 CPU或OS的標籤來區分鏡像。docker

三、建立新鏡像

若是對建立支持多平臺鏡像感興趣,請查看 Phil Estes’ manifest-list tool ,以及關注 PR to add a manifest command to the Docker CLI.編程

Manifest lists 和 multi-arch Docker images 的工做已經進行了很長時間. 咱們很高興這個特徵讓使用Docker官方鏡像變得更加簡單,讓Docker的在多個支持的平臺上運行可以更加無縫地切換。ubuntu

四、更多資源

原文(英):https://blog.docker.com/2017/09/docker-official-images-now-multi-platform/架構

相關文章
相關標籤/搜索