Pular para o conteúdo

Como criar, nomear e publicar uma imagem Docker sem se perder nas tags

Um guia prático, baseado na documentação oficial do Docker, para criar, nomear e publicar imagens sem confundir build context, registry e tags.

Ilustração oficial da documentação do Docker sobre criação e publicação de imagens

Docker Docs

Como criar, nomear e publicar uma imagem Docker sem se perder nas tags

Uma imagem Docker pode nascer de um Dockerfile e, ainda assim, terminar sem um nome útil. Isso não impede o build, mas torna mais difícil identificar a imagem, iniciar um container depois e enviá-la para um registry. A documentação oficial do Docker organiza esse caminho em três verbos: construir, nomear e publicar. Entender a diferença entre eles evita boa parte dos erros de iniciantes.

Ilustração oficial da documentação do Docker sobre imagens

1. O build começa pelo contexto

O comando de build recebe um Dockerfile e um contexto. No exemplo mais simples, o ponto final representa o caminho ou a URL do contexto de build. É nesse local que o builder procura o Dockerfile e os arquivos referenciados por ele. Portanto, o ponto não é uma decoração da linha de comando: ele define a origem dos arquivos que podem participar da construção.

Durante o build, o builder pode baixar a imagem-base, quando necessário, e executar as instruções escritas no Dockerfile. O resultado é uma imagem formada por camadas. Se o comando não receber um nome, a saída ainda poderá mostrar um identificador, mas esse identificador é pouco memorável. A primeira lição prática é separar o processo de construir a imagem do processo de dar um nome que faça sentido.

Antes de executar o comando, confira se o terminal está no diretório correto, se o Dockerfile está no contexto e se os arquivos copiados realmente estão disponíveis. Um contexto amplo demais também pode levar arquivos desnecessários para o processo. O guia do Docker aponta o conceito de build context como uma etapa própria, porque ele influencia diretamente o que o builder consegue encontrar.

2. O nome completo explica para onde a imagem vai

Tagging é o ato de atribuir um nome memorável à imagem. Esse nome tem uma estrutura: pode começar por um host de registry, pode conter uma porta, traz um caminho com namespace e repositório e termina com uma tag que identifica uma versão ou variante. Quando o host não aparece, o Docker Hub é usado como padrão, e quando a tag também não aparece, latest é usada por padrão.

Essa conveniência ajuda em testes rápidos, mas pode esconder decisões importantes. nginx, por exemplo, equivale ao caminho do Docker Hub para a imagem oficial do Nginx com a tag latest. Já um nome com namespace aponta para uma imagem pertencente a um usuário ou organização. Em um registry diferente, como o GitHub Container Registry, o host aparece explicitamente no começo do nome.

Para equipes, uma tag explícita comunica melhor a intenção do build. Em vez de depender de latest, use uma identificação que corresponda à versão, ao ambiente ou à variante que você realmente quer publicar. O guia oficial apresenta exemplos com repositórios, namespaces e tags, mas a regra mais importante é manter o mesmo nome durante o tag e o push. Se o nome mudar entre os comandos, o push pode apontar para outro repositório.

Ilustração oficial do Docker sobre build, tag e push

3. Tag e push são etapas diferentes

Depois de construir a imagem, você pode adicionar uma tag com a opção -t no próprio build ou usar o comando docker image tag para nomear uma imagem que já existe. Essa etapa não envia nada para a internet. Ela apenas cria uma referência local com o nome completo que será usado no registry.

O push é a etapa de distribuição. Com a imagem construída e nomeada, o comando docker push envia as camadas para o registry indicado pelo nome. O Docker informa que as camadas são transferidas e que, em poucos segundos, a imagem poderá estar disponível. O tempo e o resultado dependem do tamanho da imagem, da conexão e das permissões no repositório.

Autenticação é outro ponto separado. Para enviar uma imagem a um repositório que exige login, primeiro é necessário autenticar-se com docker login. A autenticação não corrige um nome errado: ela apenas permite que o registry reconheça o usuário. Por isso, confira o host, o namespace, o repositório e a tag antes do push. Uma conta autenticada ainda pode receber acesso negado se o nome não pertencer a ela.

4. Como diagnosticar os erros mais comuns

O erro requested access to the resource is denied aparece no guia como um caso prático. A recomendação é verificar se você está conectado e se o nome de usuário usado na tag está correto. O mesmo diagnóstico vale para um namespace digitado com diferença de maiúsculas, um repositório que não existe ou uma tentativa de publicar em um projeto sem permissão.

Se o build termina, mas a imagem fica sem nome, o problema não está necessariamente no Dockerfile. Você pode criar uma nova referência com docker image tag e então usar essa referência no push. Se o push procura a imagem em um host inesperado, releia o primeiro componente do nome. Se o comando não encontra arquivos durante o build, volte ao contexto e confirme o caminho fornecido ao comando.

Também vale olhar o histórico da imagem. A documentação indica o comando docker image history para mostrar como a imagem foi criada e quais camadas foram adicionadas ou herdadas da imagem-base. Esse histórico não substitui uma revisão de segurança, mas ajuda a descobrir se a imagem produzida corresponde ao Dockerfile e ao contexto que você pretendia usar.

5. Checklist antes de publicar

Use um checklist curto: confirme o diretório do contexto; verifique o Dockerfile e os arquivos copiados; escolha um host de registry; confira namespace e repositório; defina uma tag explícita; execute o build com o nome final ou aplique docker image tag; faça login quando o repositório exigir autenticação; e só então rode docker push. Depois, confirme no registry se a imagem e a tag esperadas aparecem.

Esse fluxo parece simples porque cada comando tem uma responsabilidade clara. Build transforma instruções e arquivos em uma imagem. Tag cria uma referência legível para essa imagem. Push distribui a referência e suas camadas. Quando essas etapas são misturadas, fica fácil culpar o Docker por um erro que, na verdade, está no contexto, no nome ou na permissão.

O ponto de partida deste guia é a documentação oficial do Docker, que também aponta materiais sobre build context, referências de build, docker image tag, docker push e registries. Consulte a fonte original para conferir a sintaxe atual e os próximos passos, especialmente se você for usar um registry privado ou uma configuração de build mais avançada. Fonte: Docker Docs — Build, tag, and publish an image.

Resumo da semana

Leve contexto para a caixa de entrada.

Uma edição semanal, sem barulho e sem promessas vazias.