As compilações em múltiplos estágios no Alibaba Cloud Container Registry (ACR) geram imagens de aplicações Java seguras e compactas, com tempos de compilação mais rápidos.
Pré-requisitos
O Alibaba Cloud Container Registry está ativado.
O docker deve estar instalado. Para mais informações, consulte Instalar e usar o Docker e o Docker Compose.
-
Um repositório de código-fonte Java está hospedado no GitHub, GitLab ou Bitbucket.
NotaPara testar o processo, copie e hospede um projeto Java Maven simples do GitHub.
Informações básicas
Problemas comuns na compilação de imagens
A compilação de uma imagem a partir de um Dockerfile pode apresentar diversos desafios:
-
Dificuldade na escrita de Dockerfiles
Desenvolvedores podem não ter familiaridade com a criação de Dockerfiles para compilar imagens de aplicações.
-
Imagens excessivamente grandes
Incluir compilação, testes e empacotamento em um único Dockerfile adiciona camadas desnecessárias à imagem, resultando em uma hierarquia complexa e um arquivo de imagem grande.
-
Risco de vazamento de código-fonte
O código-fonte pode ser incluído acidentalmente na imagem final, criando um risco de segurança.
Benefícios das compilações em múltiplos estágios
Para linguagens compiladas como Java, o uso de compilação em múltiplos estágios no Dockerfile oferece os seguintes benefícios:
-
Maior segurança da imagem
O primeiro estágio usa uma imagem base de tempo de compilação para baixar dependências, compilar, testar e empacotar a aplicação. O segundo estágio utiliza uma imagem base leve de tempo de execução e copia apenas os artefatos compilados do primeiro estágio. A imagem final não contém código-fonte.
-
Camadas e tamanho da imagem otimizados
A imagem final contém apenas a imagem base e os artefatos compilados. Isso resulta em menos camadas de imagem e um tamanho de arquivo menor.
-
Velocidade de compilação aumentada
Ferramentas de compilação como docker e BuildKit podem executar vários estágios de compilação em paralelo para reduzir o tempo total de compilação.
Etapa 1: Vincular um repositório de código-fonte
No console do Alibaba Cloud Container Registry, vincule seu repositório de código hospedado. Este exemplo utiliza um repositório do GitHub.
Faça login no console do Container Registry.
Na barra de navegação superior, selecione uma região.
Na página Instances, clique em a instância Personal Edition que deseja gerenciar.
No painel de navegação à esquerda, escolha .
Na linha do GitHub, clique em Bind Account na coluna Actions. Na caixa de diálogo exibida, clique em Go to the source code repository to bind account para abrir o GitHub.
Na página de autorização, clique em Authorize AliyunDeveloper. Após retornar à página Code Source, o status do GitHub será exibido como Bound, indicando que o vínculo foi bem-sucedido.
Etapa 2: Criar um repositório
Faça login no console do Container Registry.
Na barra de navegação superior, selecione uma região.
Na página Instances, clique em a instância Personal Edition que deseja gerenciar.
No painel de navegação à esquerda, escolha e clique em Create Repository.
-
Configure as informações do repositório.
Parâmetro
Descrição
Exemplo
Region
Região onde o repositório está localizado.
China (Hangzhou)
Namespace
Namespace do repositório.
test23432
Repository Name
Insira um nome para o repositório.
test
Repository Type
O tipo de repositório pode ser Public ou Private. É necessário fazer login para enviar imagens, independentemente do tipo de repositório. Para proteger seus dados, utilize um repositório privado.
-
Public: Qualquer pessoa pode baixe imagens sem autenticação.
-
Private: A autenticação é obrigatória para baixe imagens.
Private
Summary
Breve descrição.
-
Description
Descrição detalhada. Markdown é suportado.
Use o Dockerfile criado e o serviço de compilação de imagens do ACR para compilar, empacotar e execute a imagem.
-
-
Clique em Next e defina a origem do código.
Parâmetro
Descrição
Code Source
Defina Code Source como GitHub e selecione o repositório de código-fonte vinculado.
Build Settings
Para este exemplo, selecione Automatically Build Images When Code Changes e Build with Servers Deployed Outside Chinese Mainland.
-
Automatically Build Images When Code Changes: Aciona automaticamente uma compilação quando o código é enviado para um branch.
-
Build with Servers Deployed Outside Chinese Mainland: Executa a compilação em um data center fora da China continental e envia a imagem resultante para a região especificada.
-
Build Without Cache: Força uma nova busca da imagem base de dependências a cada compilação, o que pode aumentar o tempo de compilação.
-
-
Clique em Create Repository.
Após a criação do repositório, a página de detalhes exibirá suas informações básicas.
No painel de navegação à esquerda, clique em o ícone
à esquerda do nome do repositório. Na página Repositories, você verá seu novo repositório. Um Status definido como Normal indica que o repositório foi criado com sucesso.
Etapa 3: Executar uma compilação
No painel de navegação à esquerda, escolha . Clique em o nome do seu repositório ou em Manage na coluna Actions do repositório.
No painel de navegação à esquerda, clique em Build. Na seção Build Rules, clique em Add Build Rule.
-
Configure a regra de compilação.
Parâmetro
Descrição
Exemplo
Type
Evento que aciona a regra de compilação quando o código é enviado ao repositório. Os valores válidos são Branch e Tag.
Branch
Branch/Tag
Branch de código a partir do qual a compilação será feita.
master
Build Context Directory
Diretório onde o Dockerfile está localizado. Trata-se de um caminho relativo à raiz do branch de código. Neste tutorial, o caminho completo é /Dockerfile, portanto insira / aqui.
/
Dockerfile Filename
Nome do Dockerfile. O padrão é Dockerfile. Por exemplo, se o caminho completo for /Dockerfile, insira Dockerfile.
Dockerfile
Image Version
Tag para a versão da imagem.
V1.0.0
Clique em OK para retornar à página Build.
-
Na seção Build Rules, localize a regra criada e clique em Build na coluna Actions correspondente.
Na seção Build Log, um status de compilação Success indica que a compilação foi concluída.
Verifique os resultados
Visualize a imagem compilada
No painel de navegação à esquerda, escolha Repository > Repositories. Clique em o nome do seu repositório ou em Manage na coluna Actions. No painel de navegação à esquerda da página de detalhes do repositório, clique em Image Version para visualize a imagem compilada.
Execute a imagem
A partir de 9 de setembro de 2024, o formato dos endpoints de registro para novas instâncias Personal Edition será alterado. Para mais informações, consulte Notas de uso para novas instâncias Personal Edition. Escolha um método para enviar e baixe imagens com base na versão da sua instância.
Nova instância Personal Edition
-
Execute o seguinte comando no docker para fazer login no Alibaba Cloud docker Registry. No comando, substitua
acr_e2******@test.aliyunid.compelo nome da sua conta Alibaba Cloud,cn-hangzhoupela região da instância ecrpi-xxxxpelo ID da instância. Será solicitada sua senha. Para encontrar o ID da instância, faça login no console do Alibaba Cloud Container Registry, acesse sua Personal Edition e encontre o Instance ID na página Overview, sob a aba Instance.docker login --username=acr_e2******@test.aliyunid.com crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com -
Execute o comando a seguir para baixe a imagem.
docker pull crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com/test23432/test:V1.0.0 -
Execute o comando a seguir para visualize suas imagens docker.
docker images -
Execute o comando a seguir para execute a imagem.
docker run -ti crpi-xxxx.cn-hangzhou.personal.cr.aliyuncs.com/test23432/test:V1.0.0 Hello World!
Instância Personal Edition antiga
-
Execute o seguinte comando no docker para fazer login no Alibaba Cloud docker Registry. No comando, substitua
acr_e2******@test.aliyunid.compelo nome da sua conta Alibaba Cloud ecn-hangzhoupela região da sua instância. Será solicitada sua senha.docker login --username=acr_e2******@test.aliyunid.com registry.cn-hangzhou.cr.aliyuncs.com -
Execute o comando a seguir para baixe a imagem. No comando, substitua
cn-hangzhoupela região da sua instância,test23432pelo seu namespace etest:V1.0.0pelo nome do repositório e tag da imagem.docker pull registry.cn-hangzhou.cr.aliyuncs.com/test23432/test:V1.0.0 -
Execute o comando a seguir para visualize suas imagens docker.
docker images -
Execute o comando a seguir para execute a imagem. Substitua
cn-hangzhoupela região da sua instância Personal Edition. Substituatest23432pelo seu namespace real. Substituatest:V1.0.0pelo nome do repositório e tag da imagem reais.docker run -ti registry.cn-hangzhou.cr.aliyuncs.com/test23432/test:V1.0.0 Hello World!