Olá! Na lição anterior, você aprendeu a etiquetar e versionar imagens Docker, uma habilidade crucial para a organização e reprodutibilidade. Vimos como o nome de uma imagem, no formato [registry/][namespace/]<repository>:<tag>, é fundamental.
Agora que suas imagens estão devidamente nomeadas e versionadas, o próximo passo é compartilhá-las. Nesta lição, você aprenderá a enviar (push) e baixar (pull) imagens de um registro de contêineres como o Docker Hub. Dominar este fluxo de trabalho é essencial para colaborar com equipes, automatizar deploys em pipelines de CI/CD e mover suas aplicações do ambiente de desenvolvimento local para servidores de produção.
O Papel de um Container Registry
Antes de começarmos com os comandos, vamos solidificar o conceito de um container registry. Se você está familiarizado com Git, pode pensar em um registry como o equivalente a um repositório remoto (como GitHub ou GitLab), mas para imagens Docker em vez de código-fonte. É um local centralizado para armazenar e distribuir suas imagens.

Existem vários tipos de registries, mas eles se enquadram em duas categorias principais:
- Public Registries: O mais conhecido é o Docker Hub, que é o registry padrão que o Docker utiliza. Ele hospeda milhares de imagens oficiais (como
python,node,.net/sdk) e imagens da comunidade. - Private Registries: Para projetos corporativos ou proprietários, você não quer que suas imagens sejam públicas. Registries privados como Amazon Elastic Container Registry (ECR), Google Container Registry (GCR) ou Harbor permitem controlar o acesso de forma segura. Dado seu interesse em AWS, o ECR será particularmente relevante para você mais tarde no curso.
Docker Pull: Registries, Authentication, and Troubleshooting
Para entender a fundo a mecânica de um registry e a sintaxe completa de uma referência de imagem, vamos consultar este artigo detalhado.
Leia as seções 'Docker image references explained' e 'Docker Registries and Where Images Come From'. Preste atenção na decomposição da referência da imagem (HOST/NAMESPACE/REPOSITORY:TAG@DIGEST) e na distinção entre imagens oficiais e da comunidade no Docker Hub. Isso solidificará a teoria por trás dos comandos que usaremos a seguir.
O Fluxo de Trabalho: Push e Pull com o Docker Hub
Vamos colocar a teoria em prática com o Docker Hub. O processo envolve três passos principais: autenticar, etiquetar corretamente e enviar a imagem.
1. Autenticação: docker login
Para enviar uma imagem para um registry, você precisa primeiro se autenticar. Se ainda não tiver uma conta no Docker Hub, crie uma em hub.docker.com.
How to Push and Pull a Docker Image from Docker Hub
Este vídeo demonstra o primeiro passo essencial: fazer login no Docker Hub a partir do seu terminal.
Assista ao trecho de 00:38 a 01:11, que mostra o comando docker login. Execute o comando em seu terminal e insira seu nome de usuário e senha do Docker Hub quando solicitado.
Após o login bem-sucedido, o Docker armazena suas credenciais localmente, geralmente em ~/.docker/config.json, para que você não precise fazer login a cada comando.
2. Etiquetagem (Tagging) para o Registry
Como vimos na lição anterior, para enviar uma imagem ao seu repositório no Docker Hub, ela precisa ser nomeada no formato seu-username/nome-do-repositorio:tag. Se você construiu uma imagem com um nome genérico (ex: my-api:1.0), você precisa adicionar uma nova tag antes de fazer o push.
Vamos supor que você tenha uma imagem local chamada minha-api:1.0.0. Para prepará-la para o push (substitua seu-username pelo seu nome de usuário real do Docker Hub):
# Comando para re-etiquetar uma imagem existente
docker tag minha-api:1.0.0 seu-username/minha-api:1.0.0
Este comando não cria uma nova imagem; ele apenas adiciona um "alias" ou ponteiro para a imagem existente, seguindo a convenção de nomenclatura do Docker Hub.
3. Enviando a Imagem: docker push
Com a imagem devidamente autenticada e etiquetada, você pode finalmente enviá-la para o Docker Hub com o comando docker push.
How to Push and Pull a Docker Image from Docker Hub
Agora vamos ver como etiquetar a imagem com o nome de usuário e, em seguida, executar o push.
Assista ao trecho de 02:31 a 06:24. O vídeo primeiro mostra o docker tag para renomear a imagem (passo 2 que acabamos de discutir) e depois o docker push para enviá-la. Observe no seu terminal como o Docker envia a imagem camada por camada. Somente as camadas que não existem no registry são enviadas, otimizando a largura de banda.
Após o push, você pode visitar seu perfil no Docker Hub e verá o novo repositório e a imagem com a tag correspondente.

Test your understanding!
Você acabou de construir uma imagem para sua nova API .NET e a etiquetou como awesome-api:2.1.0. Seu nome de usuário no Docker Hub é devpro. Qual sequência de comandos você usaria para enviar esta imagem para o Docker Hub?
Show answer
Primeiro, você precisa re-etiquetar a imagem para incluir seu nome de usuário:
docker tag awesome-api:2.1.0 devpro/awesome-api:2.1.0
Em seguida, você pode fazer o push da imagem recém-etiquetada:
docker push devpro/awesome-api:2.1.0
Lembre-se que você precisa ter executado docker login previamente.
4. Baixando a Imagem: docker pull
Agora, o processo inverso. Para usar uma imagem de um registry em qualquer máquina com Docker instalado (incluindo a sua, após remover a imagem local para teste), você usa o comando docker pull.
# Remove a imagem local para simular o download em uma nova máquina
docker rmi seu-username/minha-api:1.0.0
# Baixa a imagem do Docker Hub
docker pull seu-username/minha-api:1.0.0
O Docker baixará as camadas da imagem e a montará localmente. Assim como no push, se algumas camadas já existirem na sua máquina (por exemplo, de uma imagem base compartilhada), elas não serão baixadas novamente. Este é o poder do armazenamento em camadas (layer caching).
How to Push and Pull a Docker Image from Docker Hub
Vamos concluir o ciclo vendo como baixar e executar a imagem que acabamos de enviar.
Assista ao trecho de 08:06 a 09:29. O vídeo demonstra a remoção da imagem local (docker rmi), o docker pull para baixá-la novamente do Hub e, finalmente, o docker run para confirmar que a imagem baixada funciona perfeitamente.
Uma Abordagem para Desenvolvedores .NET
Dado seu background em .NET, existe uma maneira ainda mais integrada de publicar imagens diretamente do seu projeto. O SDK do .NET pode lidar com a criação da imagem e o push para um registry.
Deploying to a Container and Docker Hub
Este artigo, focado em uma API .NET, mostra uma abordagem alternativa usando as configurações do projeto para automatizar o processo de publicação.
Leia as seções 'Creating a Docker Hub Repository', 'Configuring the Project for Docker Hub', e 'Publishing to Docker Hub'. Preste atenção especial às propriedades (<ContainerRegistry>, <ContainerRepository>, <ContainerImageTags>) adicionadas ao arquivo .csproj. Isso permite que o comando dotnet publish construa a imagem e a envie para o Docker Hub em um único passo, um fluxo de trabalho muito eficiente para desenvolvedores .NET.
Um Olhar Adiante: Registries Privados (AWS ECR)
Embora o Docker Hub seja excelente para imagens públicas e projetos pessoais, em um ambiente de produção na AWS, você usará o Amazon Elastic Container Registry (ECR). O conceito é o mesmo, mas a implementação tem algumas diferenças importantes, principalmente na autenticação e na integração com o ecossistema AWS.
Day-20 | AWS ECR | ECR vs DockerHub | Free AWS job ready course | #aws #devops #abhishekveeramalla
Para conectar o que aprendemos hoje com seus objetivos de longo prazo, este vídeo oferece uma excelente comparação entre o Docker Hub e o AWS ECR, explicando por que você usaria o ECR em um cenário profissional na AWS.
Assista ao trecho de 02:09 a 12:32. O vídeo explica os benefícios do ECR, como repositórios privados por padrão e integração nativa com o IAM da AWS (Identity and Access Management). Entender esses pontos agora o preparará para quando formos implantar sua aplicação .NET na AWS mais adiante no curso.
A principal diferença prática que você notará é o comando de login. Em vez de docker login com usuário e senha, você usará a AWS CLI para obter credenciais de curta duração, o que é muito mais seguro. O resto do fluxo (docker tag, docker push, docker pull) permanece o mesmo.
Conclusão
Parabéns! Você concluiu com sucesso o ciclo de vida de uma imagem Docker: desde a criação de um Dockerfile, passando pela construção (build), etiquetagem (tag), até o compartilhamento (push e pull) através de um registry.
Principais pontos a reter:
- Registry como Hub Central: Um registry (como Docker Hub ou AWS ECR) é para armazenar e distribuir imagens Docker.
- Fluxo Push/Pull: O ciclo básico é
docker login->docker tag->docker pushpara enviar, edocker pullpara baixar. - Nomenclatura é Chave: A imagem deve ser etiquetada como
<registry-host>/<username>/<repository>:<tag>para ser enviada corretamente. Para o Docker Hub, o<registry-host>é opcional. - Public vs. Private: O Docker Hub é ótimo para começar e para projetos públicos. Para aplicações comerciais e implantações na nuvem, você usará um registry privado como o AWS ECR por razões de segurança e integração.
- Otimização de Camadas: Tanto o
pushquanto opullsão eficientes, pois apenas transferem as camadas que não existem no destino.
Com a capacidade de construir e distribuir imagens, agora podemos começar a pensar em como as aplicações conteinerizadas interagem entre si. Na próxima lição, iniciaremos o Módulo 3 explorando a rede Docker (networking), aprendendo como os contêineres se comunicam em redes isoladas e como expor seus serviços ao mundo exterior.