Aprenda / Infraestrutura — Docker

FundamentosAula 7 de 1616 min0% da trilha

Deploy: do compose local a um ambiente real

A mesma imagem que roda no seu notebook é a que sobe em produção — esse é o ponto todo.

O maior ganho de containerizar não é só "organizar serviço" — é que a mesma imagem testada localmente é a que vai pra produção, sem reconstruir nada nem torcer pra "bater" com o ambiente do servidor.

1. Build e publicação da imagem

terminal
docker build -t registry.exemplo.com/minha-api:latest .
docker push registry.exemplo.com/minha-api:latest

build gera a imagem local; push envia pra um registry (Docker Hub, GitHub Container Registry, ou um privado) — de onde o servidor de produção vai baixá-la, sem precisar do código-fonte nem do processo de build rodando lá.

2. No servidor: puxar e subir

servidor de produção
docker pull registry.exemplo.com/minha-api:latest
docker compose up -d

Isso é a diferença entre deploy "clássico" (copiar código pro servidor, instalar dependência lá, torcer pra versão do Ruby/Node bater) e deploy com container: o servidor só executa uma imagem já pronta e testada — ele nunca precisa ter o ambiente de build instalado.

Variável de ambiente muda por ambiente, a imagem não

mesma imagem, .env diferente por ambiente
# staging
docker run --env-file .env.staging registry.exemplo.com/minha-api:latest

# produção
docker run --env-file .env.production registry.exemplo.com/minha-api:latest

A imagem minha-api:latest é idêntica nos dois casos — só o que muda é a configuração externa (lição 5), exatamente como deveria ser.

Health check — o orquestrador precisa saber se o container está bem

docker-compose.yml (trecho)
services:
  api:
    image: registry.exemplo.com/minha-api:latest
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 10s
      retries: 3

Sem health check, um container "rodando" pode estar travado, sem responder — o orquestrador não tem como saber e continuar mandando tráfego pra ele. Com health check, ele é reiniciado automaticamente se parar de responder.

Quiz rápido

Qual o principal ganho de a mesma imagem rodar local e em produção?
Pra que serve um healthcheck no compose/produção?