Dockerfile/Reprodução:Gemini |
1. Por que todo mundo fala em Docker?
Docker é uma plataforma que “empacota” aplicações e todas as suas dependências em containers — pequenos ambientes isolados, portáteis e prontos para rodar em qualquer lugar que tenha o Docker Engine instalado.
Pense nele como uma “caixa-preta” padronizada: você coloca seu app dentro, fecha a tampa e depois o executa no notebook do desenvolvedor, no servidor de produção ou na nuvem sem surpresas de “na minha máquina funciona”.
Quando usamos o termo Docker?
- Como tecnologia: “Executar em Docker”, “rodar um container Docker”.
- Como ferramenta (
docker
CLI):docker build
,docker run
. - Como ecossistema: Docker Hub (repositório de imagens), Docker Desktop, plugins etc.
2. Dockerfile — a “receita” do seu container
Um Dockerfile é um arquivo de texto (sem extensão obrigatória) que descreve passo a passo como construir a imagem do seu container. Ele cumpre no deploy o mesmo papel que uma receita de bolo cumpre na cozinha:
Linha comum | O que faz | Analogia |
---|---|---|
FROM python:3.12-slim |
Escolhe a “massa base” (imagem pai) | Tipo de massa do bolo |
WORKDIR /app |
Define a pasta de trabalho | Bancada onde vai cozinhar |
COPY . . |
Copia seu código / arquivos | Coloca ingredientes na mesa |
RUN pip install -r requirements.txt |
Instala dependências | Mistura e pré-assa |
CMD ["python", "main.py"] |
Comando padrão de inicialização | Instrução final “assar por 30 min” |
Por que precisamos do Dockerfile?
- Garante reprodutibilidade: qualquer equipe recompila a mesma imagem.
- Documenta o ambiente (SO, versões, libs) no próprio código-fonte.
- Permite automação de CI/CD: pipelines rodando
docker build
sempre que você faz push.
3. YAML — o “manual de instruções” em deploys complexos
YAML (YAML Ain’t Markup Language) é um formato de texto legível e hierárquico, usado para configurar ferramentas que orquestram um ou vários containers. Exemplos diários:
- docker-compose.yml: descreve múltiplos serviços (web, banco, cache).
- Kubernetes manifests (
deployment.yaml
,service.yaml
): definem pods, escalonamento, redes. - Pipelines CI/CD (GitHub Actions, GitLab CI): passos de build, teste e release.
A sintaxe é simples (indentação à esquerda, chave: valor
) e evita chaves/colchetes excessivos de JSON ou XML.
version: "3.9"
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: example
4. Dockerfile × YAML: funções complementares
Objetivo | Dockerfile | YAML (Compose / Kubernetes / CI) |
---|---|---|
Criar a imagem | ✅ | — |
Configurar quantos containers, rede, volumes | — | ✅ |
Padronizar ambiente de build | ✅ | Em conjunto (build: ) |
Escalonar, atualizar em produção | — | ✅ (K8s, Swarm) |
Resumo:
- Escreva o Dockerfile → gera a imagem do seu app.
- Descreva com YAML → como e onde a imagem vai rodar, quantas réplicas, variáveis, volumes, portas.
5. Quando usar cada um?
Cenário | Preciso de Dockerfile? | Preciso de YAML? |
---|---|---|
App único em dev ou VM simples | Sim | Opcional (pode usar docker run ) |
Vários serviços (web + banco + fila) | Sim (cada serviço) | Sim (docker-compose ) |
Ambiente cluster (Kubernetes, Swarm) | Sim | Sim (manifests do orquestrador) |
Pipeline de CI empacotando artefatos | Sim | Sim (arquivo de pipeline em YAML) |
6. Boas práticas rápidas
- Dockerfile
- Use multi-stage builds para diminuir tamanho da imagem.
- Mantenha as camadas “imutáveis” (ex.: libs estáveis) antes de copiar seu código.
- YAML
- Nomeie serviços/containers claramente (
web
,worker
). - Armazene senhas em variáveis de ambiente ou secrets, não hard-code.
- Comente (!) linhas críticas para facilitar manutenção.
- Nomeie serviços/containers claramente (
7. Conclusão
- Docker é a caixa que carrega sua aplicação com tudo que ela precisa.
- Dockerfile é a receita que define como montar essa caixa.
- YAML é o manual que diz quantas caixas usar, onde colocá-las e como conectá-las.
Dominar esses três elementos garante deploys previsíveis, portáteis e escaláveis — da sua máquina local a clusters de nuvem.
Use-os como ferramentas complementares e você evitará as dores clássicas de “ambiente quebrado”, reduzindo tempo de configuração e aumentando a confiabilidade dos seus projetos.