Recomendações para etiquetagem e controlo de versões de imagens de contentor

Ao emitir imagens de contentor para um registo de contentor e, em seguida, implementá-las, precisa de uma estratégia para a identificação e o controlo de versões de imagens. Este artigo aborda duas abordagens e onde cada uma se ajusta durante o ciclo de vida do contentor:

  • Etiquetas estáveis – etiquetas que reutiliza, por exemplo, para indicar uma versão principal ou secundária, como mycontainerimage:1.0.
  • Etiquetas exclusivas – uma etiqueta diferente para cada imagem que emitir para um registo, como mycontainerimage:abc123.

Etiquetas estáveis

Recomendação: utilize etiquetas estáveis para manter imagens de base para as compilações de contentores. Evite implementações com etiquetas estáveis, uma vez que essas etiquetas continuam a receber atualizações e podem introduzir inconsistências em ambientes de produção.

As etiquetas estáveis significam que um programador, ou um sistema de compilação, pode continuar a solicitar uma etiqueta específica, que continua a obter atualizações. Estável não significa que os conteúdos estejam congelados. Em vez disso, estável implica que a imagem deve ser estável para a intenção dessa versão. Para se manter "estável", poderá ser reparado para aplicar patches de segurança ou atualizações de arquitetura.

Exemplo

Uma equipa framework envia a versão 1.0. Sabem que irão enviar atualizações, incluindo pequenas atualizações. Para suportar etiquetas estáveis para uma determinada versão principal e secundária, têm dois conjuntos de etiquetas estáveis.

  • :1 – uma etiqueta estável para a versão principal. 1 representa a versão "mais recente" ou "mais recente" 1.*.
  • :1.0- uma etiqueta estável para a versão 1.0, que permite a um programador vincular-se a atualizações da versão 1.0 e não ser revertida para a versão 1.1 quando for lançada.

Quando estão disponíveis atualizações de imagem base ou qualquer tipo de versão de manutenção da arquitetura, as imagens com as etiquetas estáveis são atualizadas para o resumo mais recente que representa a versão estável mais atual dessa versão.

Neste caso, as etiquetas principais e secundárias estão continuamente a ser reparadas. A partir de um cenário de imagem de base, isto permite que o proprietário da imagem forneça imagens com assistência.

Eliminar manifestos não marcados

Se uma imagem com uma etiqueta estável for atualizada, a imagem etiquetada anteriormente não é localizada, o que resulta numa imagem órfã. O manifesto da imagem anterior e os dados de camada exclusivos permanecem no registo. Para manter o tamanho do registo, pode eliminar periodicamente manifestos não marcados resultantes de atualizações de imagens estáveis. Por exemplo, remova automaticamente manifestos não marcados com mais de uma duração especificada ou defina uma política de retenção para manifestos não marcados.

Etiquetas exclusivas

Recomendação: utilize etiquetas exclusivas para implementações, especialmente num ambiente que possa ser dimensionado em vários nós. É provável que pretenda implementações deliberadas de uma versão consistente dos componentes. Se o contentor reiniciar ou um orquestrador aumentar horizontalmente mais instâncias, os anfitriões não solicitarão acidentalmente uma versão mais recente, inconsistente com os outros nós.

Etiquetagem exclusiva significa simplesmente que cada imagem enviada para um registo tem uma etiqueta exclusiva. As etiquetas não são reutilizadas. Existem vários padrões que pode seguir para gerar etiquetas exclusivas, incluindo:

  • Carimbo de data/hora – esta abordagem é bastante comum, uma vez que pode saber claramente quando a imagem foi criada. Mas como correlacioná-lo novamente com o seu sistema de compilação? Tem de encontrar a compilação que foi concluída ao mesmo tempo? Em que fuso horário está? Todos os seus sistemas de compilação estão calibrados para UTC?

  • Consolidação do Git – esta abordagem funciona até começar a suportar atualizações de imagens de base. Se ocorrer uma atualização de imagem de base, o seu sistema de compilação arranca com a mesma consolidação do Git que a compilação anterior. No entanto, a imagem de base tem novos conteúdos. Em geral, uma consolidação do Git fornece uma etiqueta semi-estável.

  • Resumo do manifesto – cada imagem de contentor enviada para um registo de contentor está associada a um manifesto, identificado por um hash SHA-256 exclusivo ou um resumo. Embora exclusivo, o resumo é longo, difícil de ler e não está correlacionado com o seu ambiente de compilação.

  • ID da Compilação – esta opção pode ser a melhor, uma vez que é provavelmente incremental e permite-lhe correlacionar novamente com a compilação específica para localizar todos os artefactos e registos. No entanto, como um resumo de manifesto, pode ser difícil para um humano ler.

    Se a sua organização tiver vários sistemas de compilação, o prefixo da etiqueta com o nome do sistema de compilação é uma variação nesta opção: <build-system>-<build-id>. Por exemplo, pode diferenciar as compilações do sistema de compilação jenkins da equipa de API e do sistema de compilação do Azure Pipelines da equipa Web.

Bloquear etiquetas de imagem implementadas

Como melhor prática, recomendamos que bloqueie qualquer etiqueta de imagem implementada ao definir o atributo write-enabled como false. Esta prática impede que remova inadvertidamente uma imagem do registo e, possivelmente, perturbe as suas implementações. Pode incluir o passo de bloqueio no pipeline de versão.

Bloquear uma imagem implementada ainda lhe permite remover outras imagens não despeployed do seu registo com Azure Container Registry funcionalidades para manter o seu registo. Por exemplo, remova automaticamente manifestos não marcados ou imagens desbloqueadas com mais de uma duração especificada ou defina uma política de retenção para manifestos não marcados.

Passos seguintes

Para uma discussão mais detalhada sobre os conceitos neste artigo, consulte a publicação de blogue Docker Tagging: Best practices for tagging and versioning docker images (Etiquetagem do Docker: Melhores práticas para etiquetar e controlo de versões de imagens do Docker).

Para ajudar a maximizar o desempenho e a utilização económica do registo de contentores do Azure, veja Melhores práticas para Azure Container Registry.