Demonstrações práticas de Dockerfiles multi-stage, otimização de imagens e gerenciamento de volumes.


🗺️ Isolamento de Kernel Linux com Namespaces e Cgroups

flowchart TD
    KERNEL["Kernel Linux do Host (Único)"]
    
    KERNEL --> C1["Container 1 (PID Namespace, Net Namespace, Memory Cgroup 512MB)"]
    KERNEL --> C2["Container 2 (Isolado de Arquivos, Processos e Redes)"]
    KERNEL --> C3["Container 3 (Executa com UID 1000 não-privilegiado) ⚡"]

    style KERNEL fill:#ede7f6,stroke:#512da8,stroke-width:2px
    style C1 fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
    style C2 fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
    style C3 fill:#00897b,stroke:#004d40,stroke-width:2px,color:#ffffff

📄 Exemplo 1: Gerenciamento de Volumes Persistentes no Terminal

# 1. Criar volume nomeado:
docker volume create postgres_data

# 2. Executar PostgreSQL com persistência garantida:
docker run -d \
  --name meu-postgres \
  -e POSTGRES_PASSWORD=SenhaForte123! \
  -e POSTGRES_DB=devdb \
  -v postgres_data:/var/lib/postgresql/data \
  -p 5432:5432 \
  postgres:16-alpine

# 3. Remover container sem perder os dados do banco:
docker rm -f meu-postgres
# Os dados continuam intactos dentro do volume 'postgres_data'!

📄 Exemplo 2: Limpeza e Manutenção de Disco do Docker

# Remover todos os containers parados, redes não utilizadas e imagens órfãs (dangling):
docker system prune -f

# Limpeza profunda incluindo volumes não utilizados (cuidado!):
docker system prune --volumes -f