Header Ads

Compreendendo a tag "mais recente" do Docker

As tags Docker são usadas para identificar imagens pelo nome. Cada imagem pode ter várias tags atribuídas. As tags são semelhantes a my-image: latest, com a parte antes dos dois pontos definindo o nome da imagem e a última seção especificando a versão.

Você pode marcar uma imagem sem nada após os dois pontos. Sua imagem será automaticamente fornecida como a marca de versão mais recente. Esta é uma fonte comum de confusão para iniciantes no Docker.

Os problemas com o mais recente

A semântica da última tag parece sugerir algum significado especial além do que realmente existe. Na realidade, a última é usada como a tag padrão quando você não especificou mais nada. Essa é a única vez em que &’ será usado – ele não se refere automaticamente à imagem mais recente que você criou.

Aqui está um exemplo do problema resultante:

 # Cria minha-imagem: mais recente (primeira imagem) docker build -t minha-imagem # Atualiza minha-imagem: mais recente (segunda imagem) docker build -t minha-imagem: mais recente # Cria minha-imagem: v1 (terceira imagem) docker build -t my-image: v1 

Se você agora executou docker run my-image: latest, você &’ estaria usando a segunda imagem a ser construída. A tag v1 é completamente independente da última, então construir a terceira imagem não tem efeito sobre as duas existentes. Se você quisesse que my-image: v1 também se tornasse a imagem mais recente, você &’ precisaria marcá-la manualmente e enviá-la em uma operação separada.

Isso cria muita confusão no ecossistema do Docker. Muitos criadores de imagens marcam seus lançamentos mais recentes com os mais recentes. Isso confere à tag uma importância extra que o Docker não pretendia. Outros autores usam a última para suas compilações de desenvolvimento, enquanto alguns não publicam uma tag mais recente.

A falta de consistência entre os autores de imagens pode não deixar claro se a última é realmente a última imagem ou não. A regra mais importante da última é nunca fazer suposições sobre como uma determinada imagem usará a tag.

Evite fixar no mais recente

Você não deve consumir a última tag de uma imagem sempre que uma alternativa mais específica estiver disponível. A menos que você saiba que o autor da imagem atualiza ativamente a tag mais recente, fixá-la pode não fornecer a versão que você espera.

A maioria das imagens usa controle de versão semântico para criar tags de lançamento. É muito mais seguro consumir minha imagem: 1.1 do que minha imagem: mais recente. Se o autor não mantiver o mais recente, você pode acabar com uma imagem muito desatualizada. Por outro lado, os autores que mantêm o mais recente costumam usar a tag para sua versão de desenvolvimento de ponta. Fixá-lo provavelmente resultará em alterações importantes e regulares sobre as quais você não será avisado.

Vários projetos de ecossistema de contêiner agora alertam contra o uso do mais recente por esse motivo. Kubernetes observa que usar o mais recente não é apenas imprevisível, mas também torna mais difícil para você identificar a versão da imagem real usada por seus contêineres.

Reverter um contêiner que foi implantado com o mais recente não é diretamente possível. Você não tem nenhum ponto de referência com o qual trabalhar. Alterar uma marca de imagem de 1.1.0 para 2.1.0 permite reverter facilmente a atualização, se necessário. As ferramentas de orquestração de contêineres &’ não podem ajudá-lo a mudar “ a nova imagem mais recente ” de volta à “ imagem antiga mais recente ”.

Imutabilidade

Mais fundamentalmente, as boas práticas de marcação ditam que as marcações de imagem devem ser imutáveis. Depois que uma tag é atribuída, ela não deve ser reutilizada pela mesma imagem. Isso permite que os consumidores posteriores identifiquem versões específicas, sabendo que eles obterão a mesma imagem todas as vezes.

O mais recente quebra este sistema por ser inerentemente mutável. Se você usar o mais recente, terá que aceitar a mudança. Como autor de imagens, você tornará mais difícil para os usuários referenciarem sua imagem com segurança se publicá-la apenas com a tag mais recente.

Muitas ferramentas fazem suposições sobre como as tags de imagem são usadas. o mais recente geralmente recebe um tratamento especial do qual você precisa estar ciente. O Kubernetes, por exemplo, sempre tentará extrair uma versão mais recente da tag mais recente, mesmo se uma já existir localmente. Outras tags só são retiradas se ainda não existirem no cluster.

Melhores abordagens para marcação

Tente manter o controle de versão semântico quando você &’ remarcar imagens que estarão disponíveis publicamente. Este é um padrão amplamente conhecido que ajuda a comunicar a magnitude de cada mudança que você faz em sua imagem.

Você tem mais opções ao criar imagens para uso privado. As imagens que são construídas por um servidor CI geralmente podem ser marcadas com o SHA do commit que executou o pipeline. Isso garante que cada pipeline crie uma tag exclusiva que não será substituída no futuro. Ele também ajuda a corresponder as imagens do registro do contêiner às alterações da base de código que as criaram.

Finalmente, não pense demais na última tag. Você não precisa mantê-lo atualizado com as “ mais recentes ” versão da sua imagem. Muitas vezes, é melhor ignorá-lo completamente – a menos que você execute o docker build sem um nome de tag, ele nunca será criado. Se você publicar uma tag mais recente, certifique-se de declarar a que ela se refere.

Resumo

A aparente simplicidade da última tag do Docker mascara um atoleiro de possíveis problemas. Você os encontrará como autores e consumidores de imagens. Os problemas decorrem da inconsistência semântica da tag: embora pareça dinâmica, não é nada mais do que uma tag estática atribuída pelo Docker na ausência de um valor fornecido pelo usuário.

Você deve fixar em versões de imagens específicas sempre que possível. Isso o ajudará a evitar alterações significativas e comportamentos ambíguos de ferramentas de terceiros. Como autor de imagens, tente fornecer versões de lançamento semântico e deixar claro como seu projeto trata os mais recentes. Isso ajudará os usuários em potencial a avaliar como fazer referência à sua imagem.

Nenhum comentário