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:latest
multi-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.
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
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
Envie o manifesto para o registo de contentor com
docker manifest push
:docker manifest push myregistry.azurecr.io/multi-arch-samples/myimage:multi
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 pull
e 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 .
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários