🧩 Exercícios: Docker e Gerenciamento de Imagens
Extra Guia de Ferramentas • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 13.1 — Comandos Essenciais da CLI do Docker
Contexto: Executar as operações de ciclo de vida de containers no terminal.
Requisitos:
- Baixar a imagem oficial
nginx:alpinee executá-la em background na porta 8080. - Inspecionar os logs do container rodando.
- Entrar interativamente no container via shell (
sh). - Parar e remover o container com limpeza de recursos.
Resultado Esperado
# 1. Executar container
docker run -d --name meu-web -p 8080:80 nginx:alpine
# 2. Inspecionar logs
docker logs -f meu-web
# 3. Executar shell interativo
docker exec -it meu-web sh
# 4. Parar e remover
docker rm -f meu-web
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_1_SeuNome.sh - Envie na tarefa:
Atividade Cap 13 - Docker Essencial
🔑 Gabarito de Código & Solução Comentada
docker run -d --name meu-web -p 8080:80 nginx:alpine
docker logs -f meu-web
docker exec -it meu-web sh
docker rm -f meu-web
Comentário: A flag -d roda o processo em modo desacoplado (detached); -p 8080:80 mapeia a porta do hospedeiro para a porta do container.
🎯 Nível 2: Prática
Problema 13.2 — Dockerfile Otimizado com Cache de Camadas em Python
Escreva um Dockerfile para uma aplicação FastAPI organizando a ordem das instruções COPY e RUN pip install para maximizar o reuso de cache em cada alteração de código.
🔑 Gabarito de Código & Solução Comentada
FROM python:3.12-slim-bookworm
WORKDIR /app
# 1. Copia apenas os arquivos de dependência primeiro
COPY requirements.txt .
# 2. Instala pacotes (camada mantida em cache enquanto requirements.txt não mudar)
RUN pip install --no-cache-dir -r requirements.txt
# 3. Cria usuário não-root por segurança
RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
USER appuser
# 4. Copia o código-fonte por último
COPY src/ ./src/
EXPOSE 8000
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"]
🎯 Nível 3: Integração
Problema 13.3 — Dockerfile Multi-Stage para Binário Go / Rust com Imagem Scratch
Crie um Dockerfile multi-stage compilando um servidor em Go e gerando uma imagem final baseada em scratch com tamanho inferior a 20MB.
🔑 Gabarito de Código & Solução Comentada
# Estágio 1: Builder
FROM golang:1.22-alpine AS builder
WORKDIR /build
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o /servidor .
# Estágio 2: Imagem Mínima de Produção
FROM scratch
WORKDIR /
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /servidor /servidor
EXPOSE 8080
ENTRYPOINT ["/servidor"]
🎯 Nível 4: Desafio
Problema 13.4 — Análise de Vulnerabilidades de Imagem com Trivy / Docker Scout
Escreva um script de automação que construa uma imagem Docker e a inspecione com o scanner de segurança trivy, falhando o pipeline caso sejam encontradas vulnerabilidades de severidade HIGH ou CRITICAL.
🔑 Gabarito de Código & Solução Comentada
#!/usr/bin/env bash
set -euo pipefail
IMAGE_NAME="empresa/api-producao:latest"
echo "Construindo imagem Docker..."
docker build -t "$IMAGE_NAME" .
echo "Inspecionando vulnerabilidades com Trivy..."
trivy image --severity HIGH,CRITICAL --exit-code 1 --no-progress "$IMAGE_NAME"
echo "✅ Imagem aprovada pelo Security Gate do Trivy!"