Azure 容器登錄中的多結構映像
本文介紹多結構映像,以及如何透過 Azure Container Registry 功能來協助您建立、儲存與使用。
多結構映像是一種容器映像類型,可合併不同結構的變體,有時也可供不同的作業系統使用。 執行支援多結構的映像時,容器用戶端會自動選取符合您 OS 和結構的映像變體。
資訊清單
多結構映像是以映像資訊清單為基礎。
Manifest
每個容器映像都是以資訊清單表示。 資訊清單是可唯一識別映像的 JSON 檔案,且會參考其圖層及對應大小。
Linux hello-world
映射的基本資訊清單看起來如下所示:
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1510,
"digest": "sha256:fbf289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 977,
"digest": "sha256:2c930d010525941c1d56ec53b97bd057a67ae1865eebf042686d2a2d18271ced"
}
]
}
您可以使用 Azure 入口網站或 Azure CLI 中的 az acr manifest list-metadata 命令等工具,在 Azure Container Registry 中檢視資訊清單。
資訊清單
多結構映像的資訊清單 (通常稱為 OCI 映像的映像索引) 即為映像 (索引) 集合,您可以藉由指定一個或多個映像名稱加以建立。 其中包含每個映像的詳細資訊,例如支援的 OS 和結構、大小以及資訊清單摘要。 在 docker pull
和 docker run
命令中,您可以採取與映像名稱相同的方法來使用資訊清單。
docker
CLI 會使用 docker 資訊清單命令來管理資訊清單。
注意
目前,docker manifest
命令和子命令均為實驗性質。 如需使用實驗性命令的詳細資訊,請參閱 Docker 文件。
您可以使用 docker manifest inspect
命令來檢視資訊清單。 以下是多結構映像 mcr.microsoft.com/mcr/hello-world:latest
的輸出,包含三個資訊清單:兩個適用於 Linux OS 結構,另一個適用於 Windows 結構。
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 524,
"digest": "sha256:83c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 525,
"digest": "sha256:873612c5503f3f1674f315c67089dee577d8cc6afc18565e0b4183ae355fb343",
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1124,
"digest": "sha256:b791ad98d505abb8c9618868fc43c74aa94d08f1d7afe37d19647c0030905cae",
"platform": {
"architecture": "amd64",
"os": "windows",
"os.version": "10.0.17763.1697"
}
}
]
}
將多結構資訊清單儲存在 Azure Container Registry 後,您也可以使用 Azure 入口網站或 az acr manifest list-metadata 命令等工具來檢視資訊清單。
匯入多結構映像
可以使用 az acr import 命令將現有的多結構映像匯入至 Azure 容器登錄。 映像匯入語法與單一結構映像相同。 與匯入單一結構映像相同,匯入多結構映像時不會使用 Docker 命令。
如需詳細資訊,請參閱將容器映像匯入至容器登錄。
推送多結構映像
藉由建置工作流程來建立不同結構的容器映像時,請遵循下列步驟,以將多結構映像推送至您的 Azure 容器登錄。
標記各結構的特定映像,並將其推送至您的容器登錄。 下列範例假設有兩個 Linux 結構:arm64 和 amd64。
docker tag myimage:arm64 \ myregistry.azurecr.io/multi-arch-samples/myimage:arm64 docker push myregistry.azurecr.io/multi-arch-samples/myimage:arm64 docker tag myimage:amd64 \ myregistry.azurecr.io/multi-arch-samples/myimage:amd64 docker push myregistry.azurecr.io/multi-arch-samples/myimage:amd64
執行
docker manifest create
以建立資訊清單,即可將上述映像合併成多結構映像。docker manifest create myregistry.azurecr.io/multi-arch-samples/myimage:multi \ myregistry.azurecr.io/multi-arch-samples/myimage:arm64 \ myregistry.azurecr.io/multi-arch-samples/myimage:amd64
使用
docker manifest push
將資訊清單推送至容器登錄:docker manifest push myregistry.azurecr.io/multi-arch-samples/myimage:multi
使用
docker manifest inspect
命令來檢視資訊清單。 命令輸出的範例已於上一節顯示。
將多結構資訊清單推送至登錄之後,請使用與單一結構映像相同的方法處理多結構映像。 例如,使用 docker pull
提取映像,並使用 az acr repository 命令來檢視映像的標籤、資訊清單和其他屬性。
建置並推送多結構映像
您可以使用 ACR 工作的功能,建置多結構映像並將其推送至 Azure 容器登錄。 例如,在 YAML 檔案中定義可建置 Linux 多結構映像的多步驟工作。
下列範例假設您的兩個結構 (arm64 和 amd64) 分別擁有各自的 Dockerfile。 系統建置並推送結構特定的映像後,會建立並推送含 latest
標籤的多結構資訊清單:
version: v1.1.0
steps:
- build: -t {{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-amd64 -f dockerfile.arm64 .
- build: -t {{.Run.Registry}}/multi-arch-samples/myyimage:{{.Run.ID}}-arm64 -f dockerfile.amd64 .
- push:
- {{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-arm64
- {{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-amd64
- cmd: >
docker manifest create
{{.Run.Registry}}/multi-arch-samples/myimage:latest
{{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-arm64
{{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-amd64
- cmd: docker manifest push --purge {{.Run.Registry}}/multi-arch-samples/myimage:latest
- cmd: docker manifest inspect {{.Run.Registry}}/multi-arch-samples/myimage:latest
下一步
- 使用 Azure Pipelines 建置不同結構的容器映像。
- 了解如何使用實驗性 Docker buildx 外掛程式來建置多平台映像。