Docker Development
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.
Slash Comandos
| 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 |
Quando Esta Skill É Ativada
Reconheça estes padrões do usuário:
- "Otimize este Dockerfile"
- "Meu build Docker está lento"
- "Crie um docker-compose para este projeto"
- "Este Dockerfile é seguro?"
- "Reduza o tamanho da minha imagem Docker"
- "Configure builds multi-stage"
- "Melhores práticas Docker para [linguagem/framework]"
- Qualquer solicitação envolvendo: Dockerfile, docker-compose, container, tamanho de imagem, cache de build, segurança Docker
Se o usuário tem um Dockerfile ou quer containerizar algo → esta skill se aplica.
Workflow
/docker:optimize — Otimização de Dockerfile
Analisar o estado atual
- Leia o Dockerfile
- Identifique a imagem base e seu tamanho
- Conte camadas (cada RUN/COPY/ADD = 1 camada)
- Verifique anti-padrões comuns
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
- Aplique todas as otimizações relevantes
- Adicione comentários inline explicando cada decisão
- Reporte a redução estimada de tamanho
Validar
python3 scripts/dockerfile_analyzer.py Dockerfile
/docker:compose — Configuração Docker Compose
Identificar serviços
- Aplicação (web, API, worker)
- Banco de dados (postgres, mysql, redis, mongo)
- Cache (redis, memcached)
- Fila (rabbitmq, kafka)
- Proxy reverso (nginx, traefik, caddy)
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
- Produza docker-compose.yml com healthchecks, redes, volumes
- Gere .env.example com todas as variáveis necessárias documentadas
- Adicione anotações de perfil dev/prod
/docker:security — Auditoria de Segurança de Container
Auditoria 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]
Ferramentas
scripts/dockerfile_analyzer.py
Utilitário CLI para análise estática de Dockerfiles.
Funcionalidades:
- Contagem de camadas e sugestões de otimização
- Análise de imagem base com estimativas de tamanho
- Detecção de anti-padrões (15+ regras)
- Sinalização de problemas de segurança
- Detecção e validação de build multi-stage
- Saída JSON e texto
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.py
Utilitário CLI para validar arquivos docker-compose.
Funcionalidades:
- Validação de dependência de serviço
- Detecção de presença de healthcheck
- Análise de configuração de rede
- Validação de mount de volume
- Auditoria de variável de ambiente
- Detecção de conflito de porta
- Pontuação de melhores práticas
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
Padrões de Build Multi-Stage
Padrão 1: Linguagem Compilada (Go, Rust, C++)
# 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"]
Padrão 2: Node.js / TypeScript
# 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"]
Padrão 3: Python
# 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"]
Árvore de Decisão de Imagem Base
É 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
Gatilhos Proativos
Sinalize estes sem ser solicitado:
- Dockerfile usa :latest → Sugira fixar para uma tag de versão específica.
- Sem .dockerignore → Crie um. No mínimo:
.git, node_modules, __pycache__, .env.
- COPY . . antes da instalação de dependências → Quebra o cache. Reordene para instalar deps primeiro.
- Executando como root → Adicione instrução USER. Sem exceções para produção.
- Secrets em ENV ou ARG → Use mounts de secret BuildKit. Nunca bake secrets em camadas.
- Imagem acima de 1GB → Build multi-stage obrigatório. Não há razão para uma imagem de produção tão grande.
- Sem healthcheck → Adicione um. Orquestradores (Compose, K8s) precisam dele para gerenciamento adequado do ciclo de vida.
- apt-get sem limpeza na mesma camada →
rm -rf /var/lib/apt/lists/* no mesmo RUN.
Instalação
One-liner (qualquer ferramenta)
git clone https://github.com/alirezarezvani/claude-skills.git
cp -r claude-skills/engineering/docker-development ~/.claude/skills/
Skills Relacionadas
- senior-devops — Escopo DevOps mais amplo (CI/CD, IaC, monitoramento). Complementar — use docker-development para trabalho específico de container, senior-devops para pipeline e infraestrutura.
- senior-security — Segurança de aplicação. Complementar — docker-development cobre segurança de container, senior-security cobre ameaças em nível de aplicação.
- autoresearch-agent — Pode otimizar tempos de build Docker ou tamanhos de imagem como experimentos mensuráveis.
- ci-cd-pipeline-builder — Construção de pipeline. Complementar — docker-development constrói os containers, ci-cd-pipeline-builder os implanta.
1---2name: docker-development3description: 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.4license: MIT5---67# Docker Development89> Imagens menores. Builds mais rápidos. Containers seguros. Sem suposições.1011Workflow 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.1213Nã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.1415---1617## Slash Comandos1819| Comando | O que faz |20|---------|-------------|21| `/docker:optimize` | Analisa e otimiza um Dockerfile para tamanho, velocidade e cache de camada |22| `/docker:compose` | Gera ou melhora docker-compose.yml com melhores práticas |23| `/docker:security` | Audita um Dockerfile ou container em execução para problemas de segurança |2425---2627## Quando Esta Skill É Ativada2829Reconheça estes padrões do usuário:3031- "Otimize este Dockerfile"32- "Meu build Docker está lento"33- "Crie um docker-compose para este projeto"34- "Este Dockerfile é seguro?"35- "Reduza o tamanho da minha imagem Docker"36- "Configure builds multi-stage"37- "Melhores práticas Docker para [linguagem/framework]"38- Qualquer solicitação envolvendo: Dockerfile, docker-compose, container, tamanho de imagem, cache de build, segurança Docker3940Se o usuário tem um Dockerfile ou quer containerizar algo → esta skill se aplica.4142---4344## Workflow4546### `/docker:optimize` — Otimização de Dockerfile47481. **Analisar o estado atual**49 - Leia o Dockerfile50 - Identifique a imagem base e seu tamanho51 - Conte camadas (cada RUN/COPY/ADD = 1 camada)52 - Verifique anti-padrões comuns53542. **Aplicar lista de verificação de otimização**5556 ```57 IMAGEM BASE58 ├── Use tags específicas, nunca :latest em produção59 ├── Prefira variantes slim/alpine (debian-slim > ubuntu > debian)60 ├── Fixe digest para reprodutibilidade em CI: image@sha256:...61 └── Combine base com necessidades de runtime (não use python:3.12 para um binário compilado)6263 OTIMIZAÇÃO DE CAMADA64 ├── Combine comandos RUN relacionados com && \65 ├── Ordene camadas: menos mudáveis primeiro (deps antes do código fonte)66 ├── Limpe cache do gerenciador de pacotes na mesma camada RUN67 ├── Use .dockerignore para excluir arquivos desnecessários68 └── Separe deps de build das deps de runtime6970 CACHE DE BUILD71 ├── COPY arquivos de dependência antes do código fonte (package.json, requirements.txt, go.mod)72 ├── Instale deps em uma camada separada do COPY de código73 ├── Use mounts de cache BuildKit: --mount=type=cache,target=/root/.cache74 └── Evite COPY . . antes da instalação de dependências7576 BUILDS MULTI-STAGE77 ├── Estágio 1: build (SDK completo, ferramentas de build, deps de dev)78 ├── Estágio 2: runtime (base mínima, apenas artefatos de produção)79 ├── COPY --from=builder apenas o necessário80 └── A imagem final não deve ter ferramentas de build, código fonte ou deps de dev81 ```82833. **Gerar Dockerfile otimizado**84 - Aplique todas as otimizações relevantes85 - Adicione comentários inline explicando cada decisão86 - Reporte a redução estimada de tamanho87884. **Validar**89 ```bash90 python3 scripts/dockerfile_analyzer.py Dockerfile91 ```9293### `/docker:compose` — Configuração Docker Compose94951. **Identificar serviços**96 - Aplicação (web, API, worker)97 - Banco de dados (postgres, mysql, redis, mongo)98 - Cache (redis, memcached)99 - Fila (rabbitmq, kafka)100 - Proxy reverso (nginx, traefik, caddy)1011022. **Aplicar melhores práticas de compose**103104 ```105 SERVIÇOS106 ├── Use depends_on com condition: service_healthy107 ├── Adicione healthchecks para cada serviço108 ├── Defina limites de recurso (mem_limit, cpus)109 ├── Use named volumes para dados persistentes110 └── Fixe versões de imagem111112 REDE113 ├── Crie redes explícitas (não dependa do padrão)114 ├── Separe redes frontend e backend115 ├── Exponha apenas portas que precisam de acesso externo116 └── Use internal: true para redes somente de backend117118 AMBIENTE119 ├── Use env_file para secrets, não variáveis de ambiente inline120 ├── Nunca faça commit de arquivos .env (adicione ao .gitignore)121 ├── Use substituição de variável: ${VAR:-default}122 └── Documente todas as variáveis de ambiente necessárias123124 DESENVOLVIMENTO vs PRODUÇÃO125 ├── Use profiles ou arquivos de override do compose126 ├── Dev: bind mounts para hot reload, portas de debug expostas127 ├── Prod: named volumes, sem portas de debug, restart: unless-stopped128 └── docker-compose.override.yml para config somente de dev129 ```1301313. **Gerar arquivo compose**132 - Produza docker-compose.yml com healthchecks, redes, volumes133 - Gere .env.example com todas as variáveis necessárias documentadas134 - Adicione anotações de perfil dev/prod135136### `/docker:security` — Auditoria de Segurança de Container1371381. **Auditoria de Dockerfile**139140 | Verificação | Gravidade | Correção |141 |-------|----------|-----|142 | Executando como root | Crítica | Adicione `USER nonroot` após criar usuário |143 | Usando tag :latest | Alta | Fixe para versão específica |144 | Secrets em ENV/ARG | Crítica | Use secrets BuildKit: `--mount=type=secret` |145 | COPY com glob amplo | Média | Use caminhos específicos, adicione .dockerignore |146 | EXPOSE desnecessário | Baixa | Exponha apenas portas que o app usa |147 | Sem HEALTHCHECK | Média | Adicione HEALTHCHECK com intervalo apropriado |148 | Instruções privilegiadas | Alta | Evite `--privileged`, descarte capabilities |149 | Cache do gerenciador de pacotes retido | Baixa | Limpe na mesma camada RUN |1501512. **Verificações de segurança em runtime**152153 | Verificação | Gravidade | Correção |154 |-------|----------|-----|155 | Container executando como root | Crítica | Defina usuário no Dockerfile ou compose |156 | Sistema de arquivos raiz gravável | Média | Use `read_only: true` no compose |157 | Todas as capabilities retidas | Alta | Descarte todas, adicione apenas as necessárias: `cap_drop: [ALL]` |158 | Sem limites de recurso | Média | Defina `mem_limit` e `cpus` |159 | Modo de rede host | Alta | Use rede bridge ou personalizada |160 | Mounts sensíveis | Crítica | Nunca monte /etc, /var/run/docker.sock em prod |161 | Sem driver de log configurado | Baixa | Defina `logging:` com limites de tamanho |1621633. **Gerar relatório de segurança**164 ```165 SECURITY AUDIT — [nome do Dockerfile/Imagem]166 Data: [timestamp]167168 CRÍTICO: [count]169 ALTO: [count]170 MÉDIO: [count]171 BAIXO: [count]172173 [Achados detalhados com recomendações de correção]174 ```175176---177178## Ferramentas179180### `scripts/dockerfile_analyzer.py`181182Utilitário CLI para análise estática de Dockerfiles.183184**Funcionalidades:**185- Contagem de camadas e sugestões de otimização186- Análise de imagem base com estimativas de tamanho187- Detecção de anti-padrões (15+ regras)188- Sinalização de problemas de segurança189- Detecção e validação de build multi-stage190- Saída JSON e texto191192**Uso:**193```bash194# Analisar um Dockerfile195python3 scripts/dockerfile_analyzer.py Dockerfile196197# Saída JSON198python3 scripts/dockerfile_analyzer.py Dockerfile --output json199200# Analisar com foco em segurança201python3 scripts/dockerfile_analyzer.py Dockerfile --security202203# Verificar um diretório específico204python3 scripts/dockerfile_analyzer.py path/to/Dockerfile205```206207### `scripts/compose_validator.py`208209Utilitário CLI para validar arquivos docker-compose.210211**Funcionalidades:**212- Validação de dependência de serviço213- Detecção de presença de healthcheck214- Análise de configuração de rede215- Validação de mount de volume216- Auditoria de variável de ambiente217- Detecção de conflito de porta218- Pontuação de melhores práticas219220**Uso:**221```bash222# Validar um arquivo compose223python3 scripts/compose_validator.py docker-compose.yml224225# Saída JSON226python3 scripts/compose_validator.py docker-compose.yml --output json227228# Modo estrito (falha em avisos)229python3 scripts/compose_validator.py docker-compose.yml --strict230```231232---233234## Padrões de Build Multi-Stage235236### Padrão 1: Linguagem Compilada (Go, Rust, C++)237238```dockerfile239# Estágio de build240FROM golang:1.22-alpine AS builder241WORKDIR /app242COPY go.mod go.sum ./243RUN go mod download244COPY . .245RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o /app/server ./cmd/server246247# Estágio de runtime248FROM gcr.io/distroless/static-debian12249COPY --from=builder /app/server /server250USER nonroot:nonroot251ENTRYPOINT ["/server"]252```253254### Padrão 2: Node.js / TypeScript255256```dockerfile257# Estágio de dependências258FROM node:20-alpine AS deps259WORKDIR /app260COPY package.json package-lock.json ./261RUN npm ci --production=false262263# Estágio de build264FROM deps AS builder265COPY . .266RUN npm run build267268# Estágio de runtime269FROM node:20-alpine270WORKDIR /app271RUN addgroup -g 1001 -S appgroup && adduser -S appuser -u 1001272COPY --from=builder /app/dist ./dist273COPY --from=deps /app/node_modules ./node_modules274COPY package.json ./275USER appuser276EXPOSE 3000277CMD ["node", "dist/index.js"]278```279280### Padrão 3: Python281282```dockerfile283# Estágio de build284FROM python:3.12-slim AS builder285WORKDIR /app286COPY requirements.txt .287RUN pip install --no-cache-dir --prefix=/install -r requirements.txt288289# Estágio de runtime290FROM python:3.12-slim291WORKDIR /app292RUN groupadd -r appgroup && useradd -r -g appgroup appuser293COPY --from=builder /install /usr/local294COPY . .295USER appuser296EXPOSE 8000297CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]298```299300---301302## Árvore de Decisão de Imagem Base303304```305É um binário compilado (Go, Rust, C)?306├── Sim → distroless/static ou scratch307└── Não308 ├── Precisa de shell para depuração?309 │ ├── Sim → variante alpine (ex.: node:20-alpine)310 │ └── Não → variante distroless311 ├── Precisa de glibc (não musl)?312 │ ├── Sim → variante slim (ex.: python:3.12-slim)313 │ └── Não → variante alpine314 └── Precisa de pacotes específicos do SO?315 ├── Muitos → debian-slim316 └── Poucos → alpine + apk add317```318319---320321## Gatilhos Proativos322323Sinalize estes sem ser solicitado:324325- **Dockerfile usa :latest** → Sugira fixar para uma tag de versão específica.326- **Sem .dockerignore** → Crie um. No mínimo: `.git`, `node_modules`, `__pycache__`, `.env`.327- **COPY . . antes da instalação de dependências** → Quebra o cache. Reordene para instalar deps primeiro.328- **Executando como root** → Adicione instrução USER. Sem exceções para produção.329- **Secrets em ENV ou ARG** → Use mounts de secret BuildKit. Nunca bake secrets em camadas.330- **Imagem acima de 1GB** → Build multi-stage obrigatório. Não há razão para uma imagem de produção tão grande.331- **Sem healthcheck** → Adicione um. Orquestradores (Compose, K8s) precisam dele para gerenciamento adequado do ciclo de vida.332- **apt-get sem limpeza na mesma camada** → `rm -rf /var/lib/apt/lists/*` no mesmo RUN.333334---335336## Instalação337338### One-liner (qualquer ferramenta)339```bash340git clone https://github.com/alirezarezvani/claude-skills.git341cp -r claude-skills/engineering/docker-development ~/.claude/skills/342```343344---345346## Skills Relacionadas347348- **senior-devops** — Escopo DevOps mais amplo (CI/CD, IaC, monitoramento). Complementar — use docker-development para trabalho específico de container, senior-devops para pipeline e infraestrutura.349- **senior-security** — Segurança de aplicação. Complementar — docker-development cobre segurança de container, senior-security cobre ameaças em nível de aplicação.350- **autoresearch-agent** — Pode otimizar tempos de build Docker ou tamanhos de imagem como experimentos mensuráveis.351- **ci-cd-pipeline-builder** — Construção de pipeline. Complementar — docker-development constrói os containers, ci-cd-pipeline-builder os implanta.