Manter imagens separadas com tags diferentes para as arquiteturas x86 e Arm aumenta a sobrecarga de manutenção. Use docker buildx para compilar imagens multi-arquitetura a partir de um Dockerfile ou docker manifest para combinar imagens existentes de arquitetura única em uma única tag.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância do Container Registry Enterprise Edition. Para mais informações, consulte Crie uma instância do Container Registry Enterprise Edition.
Um cliente Docker instalado no dispositivo local. Para mais informações, consulte Instale o Docker.
-
Acesso à instância do Container Registry Enterprise Edition pelo cliente Docker. Execute o comando abaixo e substitua o espaço reservado pelo endereço do seu registro:
docker login --username=<your-username> <registry-address>Exemplo:
docker login --username=xxx acr-test-registry.cn-hangzhou.cr.aliyuncs.com
Compile uma imagem multi-arquitetura a partir de um Dockerfile
-
Crie um Dockerfile no diretório do projeto. Este exemplo usa um projeto Java Maven:
# First stage: build environment FROM maven:3.5.0-jdk-8-alpine AS builder ADD ./pom.xml pom.xml ADD ./src src/ RUN mvn clean package # Second stage: minimal runtime environment FROM openjdk:8-jre-alpine COPY --from=builder target/my-app-1.0-SNAPSHOT.jar my-app-1.0-SNAPSHOT.jar EXPOSE 8080 CMD ["java", "-jar", "my-app-1.0-SNAPSHOT.jar"] -
Abra um terminal no diretório do projeto e execute os comandos a seguir:
-
Desative a opção Provenance attestations do docker buildx:
export BUILDX_NO_DEFAULT_ATTESTATIONS=1 -
Compile a imagem multi-arquitetura e envie-a para o repositório de imagens:
docker buildx build . -t acr-test-registry.cn-hangzhou.cr.aliyuncs.com/test/test:multi --platform linux/amd64,linux/arm64 --pushEsse comando compila imagens para as arquiteturas amd64 e arm64 e as envia ao repositório com uma única tag multi-arquitetura.
NotaAntes de executar o comando docker push para enviar imagens a um repositório, execute o comando docker login para autenticar-se no repositório. Exemplo de comando docker login:
docker login --username=xxx acr-test-registry.cn-hangzhou.cr.aliyuncs.com. -
Crie uma imagem multi-arquitetura a partir de imagens existentes de arquitetura única
Use este método quando já houver imagens separadas de arquitetura única e for necessário combiná-las em uma única tag multi-arquitetura.
-
Execute o comando
docker tagpara aplicar novas tags às imagens de arquitetura única e envie-as para a instância do Container Registry Enterprise Edition. O exemplo a seguir usa uma imagem NGINX arm64 e uma imagem NGINX amd64:docker tag nginx:arm64 acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64 docker push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64 docker tag nginx:amd64 acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64 docker push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64 -
Execute o comando
docker manifest createpara criar uma lista de manifesto e mesclar as imagens da etapa 1 em uma imagem multi-arquitetura:docker manifest create acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:multi \ acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64 \ acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64 -
Execute o comando
docker manifest pushpara enviar a lista de manifesto à instância do Container Registry Enterprise Edition:docker manifest push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:multi -
(Opcional) Verifique se a imagem multi-arquitetura foi enviada com sucesso:
docker manifest inspect acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:multiA saída lista os manifestos de cada arquitetura incluída.
Referências
Para configurar e executar compilações de imagens multi-arquitetura no console do Container Registry, consulte Compilar imagens de contêiner para múltiplas arquiteturas.