O uso de recursos baseados em ARM para implantar contêineres reduz significativamente os custos. No entanto, essa abordagem aumenta a sobrecarga de manutenção ao exigir a criação e o gerenciamento de imagens separadas para diferentes arquiteturas, como x86 e ARM. O recurso de compilação multiarquitetura no console do ACR simplifica esse processo e permite gerenciar imagens para várias arquiteturas com uma única tag.
Pré-requisitos
Crie uma instância do Container Registry Enterprise Edition. Para mais informações, consulte Criar uma instância Enterprise Edition.
Vincule sua instância a uma plataforma de hospedagem de código-fonte. Para mais informações, consulte Vincular uma plataforma de hospedagem de código-fonte.
Configure seu projeto para oferecer suporte a compilações nas arquiteturas de destino.
Informações básicas
Se você selecionar apenas uma arquitetura, o sistema compilará uma imagem exclusivamente para ela e a enviará com a tag especificada.
Ao selecionar múltiplas arquiteturas, o sistema de compilação envia as imagens de todas as arquiteturas escolhidas para o repositório de imagens com a mesma tag. Clientes como docker e containerd baixam automaticamente a imagem correspondente à arquitetura do cliente.
A tabela a seguir descreve as arquiteturas compatíveis.
|
Sistema operacional |
Arquitetura |
Compatível |
|
Linux |
amd64 |
Sim (arquitetura padrão) |
|
Linux |
arm64 |
Sim |
|
Linux |
arm/v7 |
Sim |
|
Linux |
arm/v6 |
Sim |
|
Windows |
amd64 |
Não compatível |
Etapa 1: Preparar seu projeto
Prepare o repositório de código-fonte para a compilação da imagem. Para fins de demonstração, crie um projeto utilizando o seguinte arquivo Go e Dockerfile.
// Save as hello.go
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Printf("Hello, %s!\n", runtime.GOARCH)
}
FROM golang:alpine AS builder
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN go build -o hello hello.go
FROM alpine
RUN mkdir /app
WORKDIR /app
COPY --from=builder /app/hello .
CMD ["./hello"]
Etapa 2: Criar um repositório de imagens
Crie um repositório de imagens e vincule-o a um repositório de código-fonte. O sistema enviará todas as compilações de imagem acionadas a partir do repositório de código-fonte para este repositório de imagens.
Faça login no Console do Container Registry.
Na barra de navegação superior, selecione uma região.
No painel de navegação à esquerda, escolha Instances.
Na página Instances, clique na instância Enterprise Edition que deseja gerenciar.
No painel de navegação à esquerda da página de detalhes da instância, escolha .
Na página Repositories, clique em Create Repository.
No assistente Repository Info, configure Namespace, Repository Name, Repository Type, Image Version, Accelerated Image, Summary e Description. Em seguida, clique em Next.
-
No assistente de configuração Code Source, defina Code Source, Build Settings e Build Rules, e clique em Create Repository.
Parâmetro
Descrição
Code Source
O provedor de código-fonte.
Build Settings
-
Compilar imagens automaticamente quando houver alterações no código: aciona uma regra de compilação ao fazer commit de código em uma branch.
-
Build With Servers Deployed Outside Chinese Mainland: compila a imagem em um data center fora da China continental e a envia para a região especificada. Selecione esta opção se o seu Dockerfile precisar baixar arquivos de sites fora da China continental e a conexão de rede transfronteiriça for instável.
-
Build Without Cache: força uma nova busca da imagem base para cada compilação. Selecionar esta opção pode aumentar o tempo de compilação da imagem.
Na página Repositories, clique no repositório de imagens de destino. Se Build aparecer no painel de navegação à esquerda, o repositório de imagens foi vinculado com sucesso ao repositório de código-fonte.
-
Etapa 3: Criar uma regra de compilação multiarquitetura
Para esta demonstração, utilizamos linux/amd64 e linux/arm64 como arquiteturas de compilação.
Faça login no Console do Container Registry.
Na barra de navegação superior, selecione uma região.
No painel de navegação à esquerda, escolha Instances.
Na página Instances, clique na instância Enterprise Edition que deseja gerenciar.
No painel de navegação à esquerda da página de detalhes da instância, escolha .
Na página Repositories, localize o repositório de destino e clique em Manage na coluna Actions.
-
No painel de navegação à esquerda, clique em Build. Na seção Build Rules, clique em Add Build Rule. Na etapa Build Information, defina os parâmetros e clique em Next.
Parâmetro
Descrição
Type
O tipo de código-fonte para compilação. Valores válidos: Branch e Tag.
Branch/Tag
Selecione ou insira uma branch ou tag. Há suporte para expressões regulares. Por exemplo, ao usar a expressão regular release-(?<imageTag>\w*), uma alteração de código na branch release-v1 aciona automaticamente uma compilação para uma imagem com a tag v1. Para mais informações, consulte Apêndice: Grupos de captura nomeados para expressões regulares.
NotaApós definir uma expressão regular, apenas compilações automáticas serão acionadas. Não é possível acionar manualmente uma compilação imediata.
Dockerfile Directory
O caminho para o Dockerfile, relativo à raiz do repositório. Por exemplo, se o Dockerfile estiver no diretório raiz, insira /.
Dockerfile Filename
O nome do arquivo Dockerfile. O valor padrão é Dockerfile.
-
Na etapa Image Version, defina os parâmetros, clique em Save e, em seguida, clique em Next.
NotaClique em Add Configuration para adicionar tags de imagem. É possível adicionar até três tags de imagem.
Parâmetro
Descrição
Image Version
A tag da imagem, como latest. Oferece suporte a grupos de captura nomeados para utilizar conteúdo capturado da configuração Branch/Tag.
Build Time
O horário em que o código-fonte foi enviado, em UTC+8. Os formatos compatíveis são YYYYMMDD e YYYYMMDDHHMM. Exemplos: 20201015 e 202010151613.
NotaEste parâmetro é opcional. Se selecionado, apenas compilações automáticas são suportadas e não é possível acionar manualmente uma compilação imediata.
Commit ID
O ID de commit do envio de código mais recente. Por padrão, os primeiros 6 caracteres são utilizados. Use o controle deslizante para ajustar o comprimento.
NotaEste parâmetro é opcional. Se selecionado, apenas compilações automáticas são suportadas e não é possível acionar manualmente uma compilação imediata.
-
Na etapa Build Configurations, defina os parâmetros de compilação e clique em Confirm.
Parâmetro
Descrição
Build Architecture
Selecione as arquiteturas de compilação. As compilações para as arquiteturas selecionadas são executadas em paralelo, e as imagens resultantes são associadas a uma única tag de imagem.
Build Parameters
Argumentos de tempo de execução para a compilação da imagem, especificados como pares chave-valor sensíveis a maiúsculas e minúsculas. É possível definir até 20 argumentos de compilação. Esses argumentos podem modificar variáveis de ambiente no Dockerfile, permitindo que um único Dockerfile produza diferentes variações de imagem.
-
Acione a regra de compilação.
Existem duas maneiras de acionar a regra de compilação:
Na página Build, na seção Build Rules, localize a regra de compilação de destino e clique em Build na coluna Actions.
Envie código para a branch principal do seu repositório de código-fonte.
NotaPara cancelar uma tarefa de compilação em execução, acesse a página Build. Na seção Build Log, localize a tarefa de destino e clique em Cancel na coluna Actions.
Para visualizar o log de uma tarefa de compilação, acesse a página Build. Na seção Build Log, localize a tarefa de destino e clique em Log na coluna Actions.
Na barra de navegação à esquerda, clique em Image Version. A imagem compilada estará visível, indicando que a compilação foi bem-sucedida.
Etapa 4: Verificar o resultado da compilação
-
Após a conclusão da compilação, acesse a página de gerenciamento do repositório de destino e clique em Image Version no painel de navegação à esquerda para visualizar as imagens compiladas para a tag de destino.
Na lista de resumos (digest) da tag de imagem, é possível ver que a tag main inclui imagens tanto para linux/amd64 quanto para linux/arm64, confirmando uma compilação multiarquitetura bem-sucedida.
-
Verifique a imagem em máquinas com arquiteturas linux/amd64 e linux/arm64.
-
Em uma máquina com arquitetura linux/amd64, execute o seguinte comando:
docker run --rm xxx-registry.cn-hangzhou.cr.aliyuncs.com/test/golang-test:mainSaída esperada:
Hello, amd64! -
Em uma máquina com arquitetura linux/arm64, execute o seguinte comando:
docker run --rm xxx-registry.cn-hangzhou.cr.aliyuncs.com/test/golang-test:mainSaída esperada:
Hello, arm64!
Os resultados demonstram que a imagem compilada funciona corretamente em máquinas com diferentes arquiteturas.
-
Apêndice: Grupos de captura nomeados
Grupos de captura nomeados
Um grupo de captura salva o conteúdo correspondido por uma subexpressão dentro de uma expressão regular. É possível referenciar esse grupo posteriormente, seja dentro ou fora da expressão regular. Os grupos podem ser numerados ou nomeados explicitamente. Este apêndice apresenta uma breve introdução aos grupos de captura nomeados.
O formato geral para um grupo de captura nomeado é o seguinte:
(?<name>Expression)
Utilize um grupo de captura nomeado para converter release-11-2-10 em 11.2.10. A expressão regular correspondente é:
release-(?<major>\d*)-(?<minor>\d*)-(?<version>\d*)
Quando essa expressão regular corresponde a release-11-2-10, ela armazena automaticamente as subexpressões correspondentes nos grupos chamados major, minor e version. Em seguida, use o seguinte modelo para gerar a string 11.2.10:
${major}.${minor}.${version}
Documentos relacionados
Para saber como criar imagens de contêiner multiarquitetura localmente, consulte Criar e enviar uma imagem multiarquitetura para o Container Registry a partir da sua máquina local.