M05·09Exercícios

CAPÍTULO 09

Exercícios

Quatro níveis de dificuldade — do aquecimento ao desafio com Ingress, HPA e projeto completo em Kubernetes.

Por Thiago Souza8 min de leituraAtualizado em 2026-05

Os exercícios estão em ordem crescente de dificuldade. Tente resolver antes de procurar respostas.

Nível 1 — Aquecimento

1. Linux básico. Crie um script bash que recebe um diretório como argumento e imprime quantos arquivos .go existem nele (recursivamente).

2. Hello Container. Faça uma imagem Docker que apenas imprime "Olá, mundo dos containers!" e termina. Rode ela.

3. Persistir logs. Rode um container nginx e mapeie o diretório de logs do container para uma pasta no seu host. Acesse o nginx e veja os logs aparecerem na sua máquina.

Nível 2 — Intermediário

4. Dockerfile multi-stage. Pegue uma aplicação simples em Java, Kotlin ou C# (sua escolha). Crie um Dockerfile multi-stage que:

  • Compila numa imagem com SDK
  • Roda numa imagem com apenas o runtime
  • Tem menos de 200MB no final

5. Compose com banco. Crie um docker-compose.yml com:

  • Sua aplicação Go do projeto guiado
  • Um Postgres
  • Modifique a aplicação para persistir as tarefas no banco
  • Use volume nomeado para os dados não sumirem ao derrubar

6. K8s Deployment. Crie um Deployment com 5 réplicas de uma aplicação simples, um Service do tipo NodePort. Use kubectl scale para aumentar para 10 réplicas. Depois reduza para 2.

7. ConfigMap dinâmico. Adicione um ConfigMap ao Deployment do exercício 6. Mude um valor no ConfigMap e veja se a aplicação pega a nova configuração (dica: pode precisar de rollout restart).

Nível 3 — Avançado

8. Rolling Update na prática.

  • Faça deploy da v1 da aplicação
  • Crie a v2 que retorna um JSON diferente
  • Faça o update e observe os pods sendo trocados gradualmente
  • Force uma falha (faça a v2 quebrar) e use kubectl rollout undo

9. Health checks de verdade. Crie uma aplicação que tem um endpoint /health que falha após 30 segundos. Configure liveness probe e veja o Kubernetes reiniciar o pod automaticamente.

10. Secrets corretamente. Adicione um Secret ao seu Deployment. Verifique que o valor não aparece em kubectl describe pod. Pesquise sobre porque Secrets em base64 não é criptografia.

11. Resource limits. Configure um pod com limits.memory: 64Mi. Faça uma aplicação que vaza memória de propósito. Observe o que acontece (procure por OOMKilled).

Nível 4 — Desafio

12. Sidecar pattern. Crie um Deployment com 2 containers no mesmo pod:

  • Container principal: sua aplicação
  • Container sidecar: um nginx que serve de proxy reverso

Os dois devem se comunicar via localhost.

13. Ingress. Configure um Ingress (com nginx-ingress controller) que roteia:

  • /api/* para um service
  • /admin/* para outro service
  • Tudo no mesmo host

14. HorizontalPodAutoscaler. Configure um HPA que escala seu Deployment automaticamente baseado em CPU. Use uma ferramenta de carga (hey, ab, wrk) para gerar tráfego e ver a mágica acontecer.

15. Projeto final. Construa um sistema completo:

  • Frontend (qualquer linguagem)
  • API backend
  • Banco de dados
  • Tudo dockerizado
  • Tudo rodando em Kubernetes
  • Com ConfigMap, Secret, Ingress, health checks, resource limits, 2+ réplicas dos serviços stateless
  • Documente o setup num README
O exercício 15 é o mais próximo de um projeto real. Se você conseguir fazer tudo do zero sem consultar o material, você está pronto para trabalhar com containers em produção.