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.
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
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
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
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.