Partilhar via


Imagens de várias arquiteturas no registro de contêiner do Azure

Este artigo apresenta imagens de várias arquiteturas (vários arcos) e como você pode usar os recursos do Registro de Contêiner do Azure para ajudar a criá-los, armazená-los e usá-los.

Uma imagem multi-arch é um tipo de imagem de contêiner que pode combinar variantes para diferentes arquiteturas e, às vezes, para diferentes sistemas operacionais. Ao executar uma imagem com suporte a várias arquiteturas, os clientes de contêiner selecionarão automaticamente uma variante de imagem que corresponda ao seu sistema operacional e arquitetura.

Manifestos e listas de manifestos

As imagens de vários arcos são baseadas em manifestos de imagem e listas de manifestos.

Manifesto

Cada imagem de contêiner é representada por um manifesto. Um manifesto é um arquivo JSON que identifica exclusivamente a imagem, fazendo referência às suas camadas e seus 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"
      }
    ]
}

Você pode exibir um manifesto no Registro de Contêiner do Azure usando o portal do Azure ou ferramentas como o comando az acr manifest list-metadata na CLI do Azure.

Lista de manifestos

Uma lista de manifesto 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 você cria uma especificando um ou mais nomes de imagem. Ele inclui detalhes sobre cada uma das imagens, como o sistema operacional suportado e arquitetura, tamanho e resumo do manifesto. A lista de manifesto pode ser usada da mesma forma que um nome de imagem e docker pull docker run comandos.

A docker CLI gerencia manifestos e listas de manifestos usando o comando docker manifest.

Nota

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

Você pode exibir uma lista de manifestos usando o docker manifest inspect comando. A seguir está a saída para a imagem mcr.microsoft.com/mcr/hello-world:latestmulti-arch , que tem três manifestos: dois para arquiteturas de sistema operacional Linux e um para uma arquitetura 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 manifesto de vários arcos é armazenada no Registro de Contêiner do Azure, você também pode exibir a lista de manifestos usando o portal do Azure ou com ferramentas como o comando az acr manifest list-metadata .

Importar uma imagem de vários arcos

Uma imagem multi-arch existente pode ser importada para um registro de contêiner do Azure usando o comando az acr import . A sintaxe de importação de imagem é a mesma de uma imagem de arquitetura única. Como a importação de uma imagem de arquitetura única, a importação de uma imagem de vários arcos não usa comandos do Docker.

Para obter detalhes, consulte Importar imagens de contêiner para um registro de contêiner.

Enviar por push uma imagem de vários arcos

Quando você tiver fluxos de trabalho de compilação para criar imagens de contêiner para arquiteturas diferentes, siga estas etapas para enviar por push uma imagem de vários arcos para seu registro de contêiner do Azure.

  1. Marque e envie por push cada imagem específica da arquitetura para o registro do contêiner. O exemplo a seguir assume duas arquiteturas 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 manifesto para combinar as imagens anteriores em uma imagem de 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 registro do contêiner usando docker manifest push:

    docker manifest push myregistry.azurecr.io/multi-arch-samples/myimage:multi
    
  4. Use o docker manifest inspect comando para exibir a lista de manifesto. Um exemplo de saída de comando é mostrado em uma seção anterior.

Depois de enviar o manifesto de vários arcos para o registro, trabalhe com a imagem de vários arcos da mesma forma que faz com uma imagem de arquitetura única. Por exemplo, puxe a imagem usando docker pulle use os comandos az acr repository para visualizar tags, manifestos e outras propriedades da imagem.

Crie e envie por push uma imagem de vários arcos

Usando recursos de Tarefas ACR, você pode criar e enviar por push uma imagem de vários arcos para seu registro de contêiner do Azure. Por exemplo, defina uma tarefa de várias etapas em um arquivo YAML que cria uma imagem multi-arch do Linux.

O exemplo a seguir pressupõe que você tenha Dockerfiles separados para duas arquiteturas, arm64 e amd64. Ele cria e envia por push as imagens específicas da arquitetura e, em seguida, cria e envia por push um manifesto de vários arcos que tem a latest tag :

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

Próximos passos