Writing Skills
writing-skills
效率与协作技能,来自 obra/superpowers,查看原文获取完整用途和操作说明。
docker-development【部署与运维】Skill e plugin para desenvolvimento Docker e container no Claude Code para otimização de Dockerfile, orquestração docker-compose, builds multi-stage e hardening de segurança de container. Use quando: o usuário quiser otimizar um Dockerfile, criar ou melhorar configurações docker-compose, implementar builds multi-stage, auditar segurança de container,…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
name: "docker-development" description: "Skill e plugin para desenvolvimento Docker e container no Claude Code para otimização de Dockerfile, orquestração docker-compose, builds multi-stage e hardening de segurança de container. Use quando: o usuário quiser otimizar um Dockerfile, criar ou melhorar configurações docker-compose, implementar builds multi-stage, auditar segurança de container, reduzir tamanho de imagem ou seguir melhores práticas de container." license: MIT metadata: version: 1.0.0 author: Ric Neves - Flowgrammers category: engineering updated: 2026-03-16 agents:
Imagens menores. Builds mais rápidos. Containers seguros. Sem suposições.
Workflow Docker opinativo que transforma Dockerfiles inchados em containers de nível produção. Cobre otimização, builds multi-stage, orquestração compose e hardening de segurança.
Não é um tutorial Docker — é um conjunto de decisões concretas sobre como construir containers que não desperdiçam tempo, espaço ou superfície de ataque.
| Comando | O que faz |
|---|---|
/docker:optimize | Analisa e otimiza um Dockerfile para tamanho, velocidade e cache de camada |
/docker:compose | Gera ou melhora docker-compose.yml com melhores práticas |
/docker:security | Audita um Dockerfile ou container em execução para problemas de segurança |
Reconheça estes padrões do usuário:
Se o usuário tem um Dockerfile ou quer containerizar algo → esta skill se aplica.
/docker:optimize — Otimização de DockerfileAnalisar o estado atual
Aplicar lista de verificação de otimização
IMAGEM BASE
├── Use tags específicas, nunca :latest em produção
├── Prefira variantes slim/alpine (debian-slim > ubuntu > debian)
├── Fixe digest para reprodutibilidade em CI: image@sha256:...
└── Combine base com necessidades de runtime (não use python:3.12 para um binário compilado)
OTIMIZAÇÃO DE CAMADA
├── Combine comandos RUN relacionados com && \
├── Ordene camadas: menos mudáveis primeiro (deps antes do código fonte)
├── Limpe cache do gerenciador de pacotes na mesma camada RUN
├── Use .dockerignore para excluir arquivos desnecessários
└── Separe deps de build das deps de runtime
CACHE DE BUILD
├── COPY arquivos de dependência antes do código fonte (package.json, requirements.txt, go.mod)
├── Instale deps em uma camada separada do COPY de código
├── Use mounts de cache BuildKit: --mount=type=cache,target=/root/.cache
└── Evite COPY . . antes da instalação de dependências
BUILDS MULTI-STAGE
├── Estágio 1: build (SDK completo, ferramentas de build, deps de dev)
├── Estágio 2: runtime (base mínima, apenas artefatos de produção)
├── COPY --from=builder apenas o necessário
└── A imagem final não deve ter ferramentas de build, código fonte ou deps de dev
Gerar Dockerfile otimizado
Validar
python3 scripts/dockerfile_analyzer.py Dockerfile
/docker:compose — Configuração Docker ComposeIdentificar serviços
Aplicar melhores práticas de compose
SERVIÇOS
├── Use depends_on com condition: service_healthy
├── Adicione healthchecks para cada serviço
├── Defina limites de recurso (mem_limit, cpus)
├── Use named volumes para dados persistentes
└── Fixe versões de imagem
REDE
├── Crie redes explícitas (não dependa do padrão)
├── Separe redes frontend e backend
├── Exponha apenas portas que precisam de acesso externo
└── Use internal: true para redes somente de backend
AMBIENTE
├── Use env_file para secrets, não variáveis de ambiente inline
├── Nunca faça commit de arquivos .env (adicione ao .gitignore)
├── Use substituição de variável: ${VAR:-default}
└── Documente todas as variáveis de ambiente necessárias
DESENVOLVIMENTO vs PRODUÇÃO
├── Use profiles ou arquivos de override do compose
├── Dev: bind mounts para hot reload, portas de debug expostas
├── Prod: named volumes, sem portas de debug, restart: unless-stopped
└── docker-compose.override.yml para config somente de dev
Gerar arquivo compose
/docker:security — Auditoria de Segurança de ContainerAuditoria de Dockerfile
| Verificação | Gravidade | Correção |
|---|---|---|
| Executando como root | Crítica | Adicione USER nonroot após criar usuário |
| Usando tag :latest | Alta | Fixe para versão específica |
| Secrets em ENV/ARG | Crítica | Use secrets BuildKit: --mount=type=secret |
| COPY com glob amplo | Média | Use caminhos específicos, adicione .dockerignore |
| EXPOSE desnecessário | Baixa | Exponha apenas portas que o app usa |
| Sem HEALTHCHECK | Média | Adicione HEALTHCHECK com intervalo apropriado |
| Instruções privilegiadas | Alta | Evite --privileged, descarte capabilities |
| Cache do gerenciador de pacotes retido | Baixa | Limpe na mesma camada RUN |
Verificações de segurança em runtime
| Verificação | Gravidade | Correção |
|---|---|---|
| Container executando como root | Crítica | Defina usuário no Dockerfile ou compose |
| Sistema de arquivos raiz gravável | Média | Use read_only: true no compose |
| Todas as capabilities retidas | Alta | Descarte todas, adicione apenas as necessárias: cap_drop: [ALL] |
| Sem limites de recurso | Média | Defina mem_limit e cpus |
| Modo de rede host | Alta | Use rede bridge ou personalizada |
| Mounts sensíveis | Crítica | Nunca monte /etc, /var/run/docker.sock em prod |
| Sem driver de log configurado | Baixa | Defina logging: com limites de tamanho |
Gerar relatório de segurança
SECURITY AUDIT — [nome do Dockerfile/Imagem]
Data: [timestamp]
CRÍTICO: [count]
ALTO: [count]
MÉDIO: [count]
BAIXO: [count]
[Achados detalhados com recomendações de correção]
scripts/dockerfile_analyzer.pyUtilitário CLI para análise estática de Dockerfiles.
Funcionalidades:
Uso:
# Analisar um Dockerfile
python3 scripts/dockerfile_analyzer.py Dockerfile
# Saída JSON
python3 scripts/dockerfile_analyzer.py Dockerfile --output json
# Analisar com foco em segurança
python3 scripts/dockerfile_analyzer.py Dockerfile --security
# Verificar um diretório específico
python3 scripts/dockerfile_analyzer.py path/to/Dockerfile
scripts/compose_validator.pyUtilitário CLI para validar arquivos docker-compose.
Funcionalidades:
Uso:
# Validar um arquivo compose
python3 scripts/compose_validator.py docker-compose.yml
# Saída JSON
python3 scripts/compose_validator.py docker-compose.yml --output json
# Modo estrito (falha em avisos)
python3 scripts/compose_validator.py docker-compose.yml --strict
# Estágio de build
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o /app/server ./cmd/server
# Estágio de runtime
FROM gcr.io/distroless/static-debian12
COPY --from=builder /app/server /server
USER nonroot:nonroot
ENTRYPOINT ["/server"]
# Estágio de dependências
FROM node:20-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --production=false
# Estágio de build
FROM deps AS builder
COPY . .
RUN npm run build
# Estágio de runtime
FROM node:20-alpine
WORKDIR /app
RUN addgroup -g 1001 -S appgroup && adduser -S appuser -u 1001
COPY --from=builder /app/dist ./dist
COPY --from=deps /app/node_modules ./node_modules
COPY package.json ./
USER appuser
EXPOSE 3000
CMD ["node", "dist/index.js"]
# Estágio de build
FROM python:3.12-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt
# Estágio de runtime
FROM python:3.12-slim
WORKDIR /app
RUN groupadd -r appgroup && useradd -r -g appgroup appuser
COPY --from=builder /install /usr/local
COPY . .
USER appuser
EXPOSE 8000
CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
É um binário compilado (Go, Rust, C)?
├── Sim → distroless/static ou scratch
└── Não
├── Precisa de shell para depuração?
│ ├── Sim → variante alpine (ex.: node:20-alpine)
│ └── Não → variante distroless
├── Precisa de glibc (não musl)?
│ ├── Sim → variante slim (ex.: python:3.12-slim)
│ └── Não → variante alpine
└── Precisa de pacotes específicos do SO?
├── Muitos → debian-slim
└── Poucos → alpine + apk add
Sinalize estes sem ser solicitado:
.git, node_modules, __pycache__, .env.rm -rf /var/lib/apt/lists/* no mesmo RUN.git clone https://github.com/alirezarezvani/claude-skills.git
cp -r claude-skills/engineering/docker-development ~/.claude/skills/