🚀 Docker não é mágica, é processo! 🚀
- #Terraform
- #Docker
- #Kubernetes
- #DevOps
- #DevSecOps
⚡ Como o Docker constrói suas imagens ⚡
🔹 Escreva o Dockerfile
🔹 O daemon baixa a base image do Docker Hub (se não existir localmente)
🔹 Executa as instruções linha por linha criando layers
🔹 Armazena a imagem final e envia para o Hub 🚀
💡 Entender esse fluxo = builds mais rápidos + imagens otimizadas!
1) Você escreve o Dockerfile
O roteiro da imagem:
FROM
, RUN
, COPY/ADD
, WORKDIR
, EXPOSE
, ENTRYPOINT/CMD
.
Dica: o que está no build context (a pasta do docker build
) é enviado ao daemon. Use .dockerignore para não mandar arquivos desnecessários.
2) Build request para o Host
Comando típico:
docker build -t seu-usuario/minha-app:1.0 .
O cliente empacota o build context e envia para o daemon iniciar a construção.
3) Checagem da base image
O daemon verifica se a imagem base (FROM ubuntu:latest
, por exemplo) já existe localmente.
- Se não existir, faz pull do Docker Hub (ou outro registry).
- Se for privada, é necessário estar autenticado (
docker login
).
4) Execução do Dockerfile linha por linha
Cada instrução gera uma layer (camada) nova:
RUN
executa comandos em um container temporário e “commita” o resultado como nova camada.COPY
/ADD
criam camadas com os arquivos copiados.- Cache: se a instrução e os arquivos de entrada não mudaram, a camada é reutilizada (build mais rápido).
5) Armazenamento da imagem no host
Ao final, o daemon monta o manifest e salva as layers no image store local.
Você vê com:
docker images
docker history seu-usuario/minha-app:1.0
6) Pedido de upload para o registry
Quando você manda:
docker push seu-usuario/minha-app:1.0
O cliente solicita ao daemon enviar a imagem (pelas tags) para o Docker Hub (ou outro registry).
7) Upload das camadas para o Docker Hub
Somente layers novas (não existentes no registry) são enviadas — isso economiza tempo e banda.
Depois, qualquer host pode fazer:
docker pull seu-usuario/minha-app:1.0
e reutilizar as mesmas layers.
💡 Boas práticas rápidas
- Use imagens base menores (ex.: alpine, distroless quando fizer sentido).
- .dockerignore sempre.
- Multi-stage builds para reduzir tamanho final.
- Pin de versões (evite
latest
) e use labels (LABEL maintainer=...
). - Crie um USER não-root e adicione HEALTHCHECK quando aplicável.
📢 Curtiu o passo a passo do GIF? Salve para referência e comente: qual dica de build Docker você mais usa no dia a dia? 👇