Image s více architekturami ve vašem registru kontejnerů Azure
Tento článek představuje image s více architekturami (více archů) a způsob použití funkcí služby Azure Container Registry k jejich vytváření, ukládání a používání.
Multi-arch image je typ image kontejneru, která může kombinovat varianty pro různé architektury a někdy i pro různé operační systémy. Při spouštění image s podporou více architektur klienti kontejneru automaticky vyberou variantu image, která odpovídá vašemu operačnímu systému a architektuře.
Manifesty a seznamy manifestů
Obrázky s více archy jsou založené na manifestech obrázků a seznamech manifestů.
Manifest
Každá image kontejneru je reprezentována manifestem. Manifest je soubor JSON, který jednoznačně identifikuje obrázek a odkazuje na jeho vrstvy a jejich odpovídající velikosti.
Základní manifest image Linuxu hello-world
vypadá podobně jako následující:
{
"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"
}
]
}
Manifest můžete zobrazit ve službě Azure Container Registry pomocí webu Azure Portal nebo nástrojů, jako je příkaz az acr manifest list-metadata v Azure CLI.
Seznam manifestů
Seznam manifestu pro vícevrstvou image (obecně známý jako index image pro image OCI) je kolekce (index) imagí a vytvoříte ho zadáním jednoho nebo více názvů imagí. Obsahuje podrobnosti o jednotlivých imagích, jako jsou podporované operační systémy a architektura, velikost a hodnota hash manifestu. Seznam manifestu lze použít stejným způsobem jako název image v docker pull
a docker run
příkazy.
Rozhraní docker
příkazového řádku spravuje manifesty a seznamy manifestů pomocí příkazu manifestu Dockeru.
Poznámka:
docker manifest
V současné době jsou příkazy a dílčí příkazy experimentální. Podrobnosti o používání experimentálních příkazů najdete v dokumentaci k Dockeru.
Seznam manifestů docker manifest inspect
můžete zobrazit pomocí příkazu. Následuje výstup pro multi-arch image mcr.microsoft.com/mcr/hello-world:latest
, který má tři manifesty: dva pro architektury operačního systému Linux a jeden pro architekturu 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"
}
}
]
}
Pokud je seznam manifestů s více archy uložený ve službě Azure Container Registry, můžete seznam manifestu zobrazit také pomocí webu Azure Portal nebo pomocí nástrojů, jako je příkaz az acr manifest list-metadata .
Import obrázku s více archy
Existující image s více archy je možné importovat do registru kontejneru Azure pomocí příkazu az acr import . Syntaxe importu image je stejná jako u jedné image architektury. Stejně jako import image s jednou architekturou nepoužívá import multi-archové image příkazy Dockeru.
Podrobnosti najdete v tématu Import imagí kontejneru do registru kontejneru.
Nasdílení vícevrstěžového obrázku
Pokud máte vytvořené pracovní postupy pro vytváření imagí kontejnerů pro různé architektury, nasdílejte do registru kontejneru Azure image s více archy.
Označte a nasdílejte každou image specifickou pro architekturu do registru kontejneru. Následující příklad předpokládá dvě linuxové architektury: arm64 a 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
Spuštěním
docker manifest create
příkazu vytvořte seznam manifestu, který zkombinuje předchozí obrázky do vícevrstvého obrázku.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
Nasdílení manifestu do registru kontejneru pomocí
docker manifest push
:docker manifest push myregistry.azurecr.io/multi-arch-samples/myimage:multi
docker manifest inspect
Pomocí příkazu zobrazte seznam manifestu. Příklad výstupu příkazu je uvedený v předchozí části.
Jakmile do registru nasdílíte manifest s více archy, pracujte s multi-archovou imagí stejným způsobem jako s jednou architekturou image. Například stáhněte image pomocí docker pull
příkazu az acr repository příkazy k zobrazení značek, manifestů a dalších vlastností image.
Sestavení a nasdílení vícevrstěžové image
Pomocí funkcí ACR Tasks můžete sestavit a odeslat multi-arch image do registru kontejneru Azure. Například definujte úlohu s více kroky v souboru YAML, který sestaví image s více archy Linuxu.
Následující příklad předpokládá, že máte samostatné soubory Dockerfile pro dvě architektury, arm64 a amd64. Sestaví a nasdílí image specifické pro architekturu a pak vytvoří a nasdílí manifest s více archy, který má latest
značku:
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