Image s více architekturami v registru kontejneru Azure

Tento článek představuje image s více architekturami (více archů) a informace o tom, jak můžete používat Azure Container Registry funkce k jejich vytváření, ukládání a používání.

Image s více oblouky 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 oblouky jsou založené na manifestech obrázků a seznamech manifestů.

Manifest

Každá image kontejneru je reprezentována manifestem. Manifest je soubor JSON, který jedinečně identifikuje obrázek a odkazuje na jeho vrstvy a odpovídající velikosti.

Základní manifest pro image Linuxu hello-world vypadá přibližně takto:

{
  "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 v Azure Container Registry pomocí Azure Portal nebo nástrojů, jako je příkaz az acr manifest list-metadata v Azure CLI.

Seznam manifestů

Seznam manifestu pro image s více oblouky (obecně označovaný jako index image pro image OCI) je kolekce (index) imagí, kterou vytvoříte zadáním jednoho nebo více názvů imagí. Obsahuje podrobnosti o jednotlivých imagích, například podporovaný operační systém a architekturu, velikost a přehled manifestu. Seznam manifestu lze použít stejným způsobem jako název obrázku v docker pull příkazech a docker run .

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ů můžete zobrazit pomocí docker manifest inspect příkazu . Následuje výstup pro image mcr.microsoft.com/mcr/hello-world:latests více oblouky , 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 oblouky uložený v Azure Container Registry, můžete ho zobrazit také pomocí Azure Portal nebo pomocí nástrojů, jako je příkaz az acr manifest list-metadata.

Import obrázku s více oblouky

Existující image s více archy je možné importovat do registru kontejneru Azure pomocí příkazu az acr import . Syntaxe importu bitové kopie je stejná jako u image s jednou architekturou. Podobně jako import image s jednou architekturou se při importu image s více oblouky nepoužívají příkazy Dockeru.

Podrobnosti najdete v tématu Import imagí kontejneru do registru kontejneru.

Vložení obrázku s více oblouky

Pokud máte pracovní postupy sestavení pro vytváření imagí kontejnerů pro různé architektury, pomocí těchto kroků odešlete image s více oblouky do registru kontejneru Azure.

  1. Označte a nasdílejte jednotlivé image specifické 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
    
  2. Spuštěním příkazu docker manifest create vytvořte seznam manifestů, který zkombinuje předchozí obrázky do víceobsadové image.

    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
    
  3. Odešlete manifest do registru kontejneru pomocí docker manifest pushpříkazu :

    docker manifest push myregistry.azurecr.io/multi-arch-samples/myimage:multi
    
  4. Pomocí příkazu docker manifest inspect zobrazte seznam manifestu. Příklad výstupu příkazu je uveden v předchozí části.

Po nasdílení manifestu s více oblouky do registru pracujte s imagí s více oblouky stejným způsobem jako s jednou imagí architektury. Například stáhněte image pomocí docker pulla pomocí příkazů az acr repository zobrazte značky , manifesty a další vlastnosti image.

Vytvoření a vložení image s více oblouky

Pomocí funkcí ACR Tasks můžete vytvořit a odeslat image s více oblouky do registru kontejneru Azure. Můžete například definovat vícekrokovou úlohu v souboru YAML, která sestaví linuxovou image s více archy.

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 oblouky, 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

Další kroky

  • Pomocí Azure Pipelines můžete vytvářet image kontejnerů pro různé architektury.
  • Přečtěte si o vytváření imagí pro více platforem pomocí experimentálního modulu plug-in Docker buildx .