0 XP

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.

3 semanas2000 XPBadge: Container Architect

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

ImagensContainersDockerfileCacheRegistryVolumesNetworksComposeMulti-stageSegurança

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.

Prática

Laboratórios do módulo

  • Stack CloudShop completo com Docker Compose

    Intermediário

    Subir Vue + API Node + PostgreSQL com healthchecks e persistência em um comando.

    Ver passo a passo
  • Reduzir a imagem de 1,2 GB para menos de 200 MB

    Avançado

    Aplicar multi-stage, base enxuta e .dockerignore medindo o resultado.

    Ver passo a passo
  • Endurecer o container: não-root, read-only e limites

    Avançado

    Rodar 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?
Boss do módulo: Container CrashLoop