Partilhar via


Imagens de várias arquiteturas no seu registo de contentor do Azure

Este artigo apresenta imagens multi-arquitetura (multi-arco) e como pode utilizar Azure Container Registry funcionalidades para ajudar a criar, armazenar e utilizá-las.

Uma imagem de vários arcos é um tipo de imagem de contentor que pode combinar variantes para diferentes arquiteturas e, por vezes, para sistemas operativos diferentes. Ao executar uma imagem com suporte de várias arquiteturas, os clientes de contentores irão selecionar automaticamente uma variante de imagem que corresponda ao so e à arquitetura.

Manifestos e listas de manifestos

As imagens de vários arcos baseiam-se em manifestos de imagem e listas de manifestos.

Manifesto

Cada imagem de contentor é representada por um manifesto. Um manifesto é um ficheiro JSON que identifica exclusivamente a imagem, referenciando as respetivas camadas e os respetivos tamanhos correspondentes.

Um manifesto básico para uma imagem do Linux hello-world é semelhante ao seguinte:

{
  "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"
      }
    ]
}

Pode ver um manifesto no Azure Container Registry com o portal do Azure ou ferramentas, como o comando az acr manifest list-metadata na CLI do Azure.

Lista de manifestos

Uma lista de manifestos para uma imagem de vários arcos (conhecida mais geralmente como um índice de imagem para imagens OCI) é uma coleção (índice) de imagens e cria uma ao especificar um ou mais nomes de imagem. Inclui detalhes sobre cada uma das imagens, como o SO suportado e a arquitetura, o tamanho e o resumo do manifesto. A lista de manifestos pode ser utilizada da mesma forma que um nome de imagem nos docker pull comandos e docker run .

A docker CLI gere manifestos e listas de manifestos com o comando docker manifest .

Nota

Atualmente, o docker manifest comando e os subcomandos são experimentais. Veja a documentação do Docker para obter detalhes sobre a utilização de comandos experimentais.

Pode ver uma lista de manifestos com o docker manifest inspect comando . Segue-se o resultado da imagem mcr.microsoft.com/mcr/hello-world:latestmulti-arco , que tem três manifestos: dois para arquiteturas do SO Linux e um para uma arquitetura do 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"
      }
    }
  ]
}

Quando uma lista de manifestos com vários arcos é armazenada no Azure Container Registry, também pode ver a lista de manifestos com o portal do Azure ou com ferramentas como o comando az acr manifest list-metadata.

Importar uma imagem com vários arcos

Uma imagem multi-arco existente pode ser importada para um registo de contentor do Azure com o comando az acr import . A sintaxe de importação de imagens é igual à de uma imagem de arquitetura única. Tal como a importação de uma imagem de arquitetura única, a importação de uma imagem de vários arcos não utiliza comandos do Docker.

Para obter detalhes, veja Importar imagens de contentor para um registo de contentor.

Enviar uma imagem com vários arcos

Quando tiver fluxos de trabalho de compilação para criar imagens de contentor para diferentes arquiteturas, siga estes passos para enviar uma imagem de vários arcos para o seu registo de contentor do Azure.

  1. Marque e envie cada imagem específica da arquitetura para o seu registo de contentor. O exemplo seguinte pressupõe duas arquiteturas do Linux: arm64 e 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. Execute docker manifest create para criar uma lista de manifestos para combinar as imagens anteriores numa imagem com vários arcos.

    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. Envie o manifesto para o registo de contentor com docker manifest push:

    docker manifest push myregistry.azurecr.io/multi-arch-samples/myimage:multi
    
  4. Utilize o docker manifest inspect comando para ver a lista de manifestos. Um exemplo de saída de comando é apresentado numa secção anterior.

Depois de enviar o manifesto multi-arco para o seu registo, trabalhe com a imagem multi-arco da mesma forma que faz com uma imagem de arquitetura única. Por exemplo, puxe a imagem com docker pulle utilize comandos az acr repository para ver etiquetas, manifestos e outras propriedades da imagem.

Criar e emitir uma imagem com vários arcos

Com as funcionalidades do ACR Tasks, pode criar e emitir uma imagem multi-arco para o seu registo de contentor do Azure. Por exemplo, defina uma tarefa de vários passos num ficheiro YAML que cria uma imagem de vários arcos do Linux.

O exemplo seguinte pressupõe que tem Dockerfiles separados para duas arquiteturas, arm64 e amd64. Compila e emite as imagens específicas da arquitetura e, em seguida, cria e emite um manifesto multi-arco que tem a latest etiqueta:

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

Passos seguintes

  • Utilize o Azure Pipelines para criar imagens de contentor para diferentes arquiteturas.
  • Saiba como criar imagens multiplataforma com o plug-in experimental do Docker Buildx .