Módulo 4
Docker e Compose
Container é a unidade de entrega moderna. Aqui você aprende a construir imagens pequenas e seguras, entender cache de layers, gerenciar dados com volumes, conectar serviços em redes e orquestrar o stack completo do CloudShop — frontend Vue, API Node e PostgreSQL — com Docker Compose, incluindo healthchecks e variáveis de ambiente.
0/8 itens concluídos
O que você vai saber fazer
- Diferenciar imagem, container e registry
- Escrever Dockerfile eficiente com multi-stage
- Aproveitar cache de layers para builds rápidos
- Persistir dados com volumes e ligar serviços por rede
- Subir o stack completo com Compose e healthchecks
Pré-requisitos
- • Módulo 1 e 3 concluídos
Tópicos
Entrega do módulo
docker-compose.yml subindo Vue + API Node + PostgreSQL, com imagem final sem root e menor que 200 MB.
Checklist
- ☐ Dockerfile multi-stage com .dockerignore
- ☐ Container roda com usuário não-root
- ☐ Volume nomeado preservando dados do PostgreSQL
- ☐ Healthcheck em API e banco, com depends_on condicionado
- ☐ Nenhum segredo dentro da imagem
Módulo bloqueado
Aprove o exame do módulo anterior para liberar este conteúdo.
Aulas
5 aulas neste módulo
- 1Imagens, containers e o modelo mental correto40 min · DockerIniciante+25 XP
- 2Dockerfile e cache de layers: builds rápidos de verdade45 min · Docker, DockerfileIntermediário+25 XP
- 3Volumes, redes e variáveis de ambiente40 min · Docker, PostgreSQLIntermediário+25 XP
- 4Docker Compose: o stack do CloudShop em um comando50 min · Docker Compose, Vue, Node, PostgreSQLIntermediário+25 XP
- 5Multi-stage e segurança de imagem45 min · Docker, Trivy, BuildKitAvançado+25 XP
Prática
Laboratórios do módulo
Stack CloudShop completo com Docker Compose
IntermediárioSubir Vue + API Node + PostgreSQL com healthchecks e persistência em um comando.
Ver passo a passoReduzir a imagem de 1,2 GB para menos de 200 MB
AvançadoAplicar multi-stage, base enxuta e .dockerignore medindo o resultado.
Ver passo a passoEndurecer o container: não-root, read-only e limites
AvançadoRodar a aplicação sem privilégios, com filesystem somente leitura e recursos limitados.
Ver passo a passo
Troubleshooting típico
Quando quebra
Sintoma: container reinicia em laço. Investigação: docker logs mostra 'ECONNREFUSED 127.0.0.1:5432'. Causa raiz: a API tenta o banco em localhost, mas dentro do container localhost é o próprio container — o host correto é o nome do serviço no Compose. Correção: DATABASE_HOST=db mais healthcheck com depends_on service_healthy.
No CloudShop
Containerizar o CloudShop inteiro e subir o ambiente de desenvolvimento com um comando.
Perguntas de entrevista
- Qual a diferença entre imagem e container?
- Como você reduziria uma imagem de 1,2 GB para menos de 200 MB?
- Por que rodar container como root é problema?