Compartilhar via


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

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

Uma imagem de vários arcos é um tipo de imagem de contêiner que pode combinar variantes para diferentes arquiteturas e, às vezes, para sistemas operacionais diferentes. Ao executar uma imagem compatível com várias arquiteturas, os clientes do contêiner selecionarão automaticamente uma variante de imagem que corresponda ao seu sistema operacional e à sua arquitetura.

Manifestos e listas de manifestos

Imagens de vários arcos são baseadas em manifestos de imagem e listas de manifesto.

Manifest

Cada imagem de contêiner é representada por um manifesto. Um manifesto é um arquivo JSON que identifica a imagem de forma exclusiva, fazendo referência às suas camadas e seus tamanhos correspondentes.

Um manifesto básico para uma hello-world imagem do Linux se assemelha a esse:

{
  "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 manifestos para uma imagem em vários arcos (geralmente conhecida como um índice de imagem para imagens de OCI) é uma coleção (índice) de imagens. Para criar uma, especifique um ou mais nomes de imagem. Ela inclui detalhes sobre cada uma das imagens, tais como o sistema operacional e a arquitetura compatíveis, o tamanho e o resumo do manifesto. A lista de manifestos pode ser usada da mesma forma que um nome de imagem nos comandos docker pull e docker run.

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

Observação

No momento, o docker manifest comando e os subcomandos são experimentais. Consulte a documentação do Docker para obter detalhes sobre como usar comandos experimentais.

Você pode exibir uma lista de manifestos usando o comando docker manifest inspect. Veja a seguir a saída da imagem em vários arcos mcr.microsoft.com/mcr/hello-world:latest, que contém três manifestos: dois para arquiteturas do sistema operacional 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 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 ferramentas como o comando az acr manifest list-metadata.

Importar uma imagem em vários arcos

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

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

Enviar uma imagem em vários arcos por push

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

  1. Marque e envie por push cada imagem específica da arquitetura para o registro de contêiner. O exemplo a seguir 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 que combine 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 por push o manifesto para o registro de contêiner usando docker manifest push :

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

Depois de enviar por push o manifesto de vários arcos para o registro, trabalhe com a imagem em vários arcos da mesma maneira que faria com uma imagem de arquitetura única. Por exemplo, efetue o pull da imagem utilizando docker pull e use os comandos az acr repository para exibir marcas, manifestos e outras propriedades da imagem.

Criar e enviar por push uma imagem em vários arcos

Com recursos de Tarefas ACR, você pode criar e enviar por push uma imagem em vários arcos para o registro de contêiner do Azure. Por exemplo, defina uma tarefa de várias etapas em um arquivo YAML que crie uma imagem em vários arcos 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 um manifesto em vários arcos que tem a latest marca:

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óximas etapas

  • Use as Pipelines do Azure para criar imagens de contêiner para diferentes arquiteturas.
  • Saiba mais sobre como criar imagens de várias plataformas usando o plug-in experimental do Docker buildx.