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:

  1. Baixar a imagem oficial nginx:alpine e executá-la em background na porta 8080.
  2. Inspecionar os logs do container rodando.
  3. Entrar interativamente no container via shell (sh).
  4. 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)

  1. Salve o arquivo como: Atividade_13_1_SeuNome.sh
  2. 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!"