Dockerfile Gen
Container Architecture & Cloud-Native Security

Gerador de Dockerfile Multi-Stage (Node, Go, Python, Rust)

Crie Dockerfiles multi-stage seguros e ultraleves para Node.js, Golang, Python, Rust e Java com execução não root e otimização de cache BuildKit.

Zero Build Telemetry
CIS Docker Compliant
Predefinições rápidas
Configuração de Aplicação e Runtime
Endurecimento de Segurança
# =========================================================================# Multi-Stage Dockerfile: Next.js Standalone (Hardened & Layer-Cached)# Generated by ToolsAA Multi-Stage Dockerfile Generator# =========================================================================# syntax=docker/dockerfile:1.6
# -------------------------------------------------------------------------# Stage 1: Dependencies Resolution# -------------------------------------------------------------------------FROM node:22-alpine AS depsWORKDIR /app
# Install libc6-compat if Alpine (required for some Node native extensions)RUN apk add --no-cache libc6-compat
# Install package manager lockfiles first to leverage layer cachingCOPY package.json package-lock.json* yarn.lock* pnpm-lock.yaml* bun.lockb* ./RUN --mount=type=cache,target=/root/.npm \    if [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm install --frozen-lockfile; \    elif [ -f yarn.lock ]; then yarn --frozen-lockfile; \    elif [ -f bun.lockb ]; then npm install -g bun && bun install --frozen-lockfile; \    else npm ci; fi
# -------------------------------------------------------------------------# Stage 2: Application Builder# -------------------------------------------------------------------------FROM node:22-alpine AS builderWORKDIR /app
COPY --from=deps /app/node_modules ./node_modulesCOPY . .
# Disable Next.js telemetry during compilationENV NEXT_TELEMETRY_DISABLED=1ENV NODE_ENV=production
RUN --mount=type=cache,target=/app/.next/cache \    if [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build; \    elif [ -f yarn.lock ]; then yarn build; \    else npm run build; fi
# -------------------------------------------------------------------------# Stage 3: Production Minimal Runner# -------------------------------------------------------------------------FROM node:22-alpine AS runnerWORKDIR /app
ENV NODE_ENV=production \    PORT=3000 \    NEXT_TELEMETRY_DISABLED=1ENV NODE_ENV=productionENV PORT=3000ENV HOSTNAME="0.0.0.0"
# Security: Create unprivileged system group and userRUN addgroup -g 10001 -S nodejs && \    adduser -u 10001 -S -G nodejs nextjs# Copy public static assets and standalone bundleCOPY --from=builder /app/public ./publicCOPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \  CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:3000/api/health || exit 1EXPOSE 3000
USER nextjsCMD ["node", "server.js"]
Tamanho Final Estimado-82%
~110 MB

Pruned compilation tools and devDependencies from runner stage.

Classificação de SegurançaGrade A+
95 / 100 CIS

UID 10001 unprivileged non-root execution with dropped capabilities.

Eficiência de Estágios de BuildBuildKit Active
3 Separated Layers

Sub-second rebuilds via lockfile pre-caching and BuildKit mounts.

Otimização Multi-Stage em Camadas

Isola dependências de compilação e caches do ambiente de produção, reduzindo a imagem final em até 92%.

Diretrizes de Segurança CIS Benchmark

Configura usuário não-root (UID 10001), descarta capabilities desnecessárias e remove ferramentas de build da produção.

Privacidade com Zero Envio ao Servidor

Todos os manifestos e arquivos de configuração são processados exclusivamente na memória do navegador.

Referência técnica e guia de arquitetura

Guia do Desenvolvedor: Gerador de Dockerfile Multi-Stage (Node, Go, Python, Rust) — Guia de referência

Crie Dockerfiles multi-stage seguros e ultraleves para Node.js, Golang, Python, Rust e Java com execução não root e otimização de cache BuildKit.

Parâmetros principais e controles

runtimestring

Ambiente de execução e linguagem da aplicação (ex.: node, golang, python, rust, java).

Padrão: node
baseImagestring

Distribuição base ou imagem mínima para a etapa final de produção (ex.: alpine, debian-slim, distroless, scratch).

Padrão: alpine
nonRootUserboolean

Aplica o princípio do menor privilégio criando um UID/GID não privilegiado (10001) e alternando a execução com a instrução USER.

Padrão: true
cacheMountsboolean

Habilita montagens de cache do BuildKit (--mount=type=cache) para gerenciadores de pacotes (npm, pip, cargo, go), acelerando compilações subsequentes.

Padrão: true
portnumber

Porta de rede principal exposta pelo container através da instrução EXPOSE.

Padrão: 3000

Dicas profissionais e melhores práticas

Copie manifestos de dependências

Copie manifestos de dependências (package.json, go.mod, Cargo.toml, requirements.txt) e execute a instalação antes de copiar o código-fonte. Isso garante que o Docker reutilize o cache de dependências sempre que apenas o código da aplicação for alterado.

Para linguagens compiladas como Go e

Para linguagens compiladas como Go e Rust, utilize 'scratch' ou 'gcr.io/distroless/static' na etapa final. Sem shells, gerenciadores de pacotes ou utilitários desnecessários, o tamanho da imagem fica abaixo de 25MB e os vetores de ataque são praticamente eliminados.

Use 'RUN --mount=type=cache

Use 'RUN --mount=type=cache,target=...' para manter os caches dos gerenciadores de pacotes no host de build sem inflar as camadas finais. Para chaves e tokens privados, prefira '--mount=type=secret' em vez de variáveis de ambiente normais.

Definição explícita de UID/GID não root

Declare sempre IDs numéricos explícitos para usuário e grupo (ex.: addgroup -g 10001 -S appgroup && adduser -u 10001 -S appuser -G appgroup). Isso assegura conformidade direta com políticas de segurança RunAsNonRoot no Kubernetes.

Problemas comuns e solução de problemas

Container falha na inicialização com erro 'Permission denied (EACCES)' ao criar arquivos de log ou temporários.

O usuário não root não possui permissão de escrita no diretório de trabalho. Crie os diretórios necessários previamente e altere o proprietário com 'RUN chown -R appuser:appgroup /app /tmp' antes de declarar 'USER appuser'.

Binário Go ou Rust falha no Alpine/Scratch com a mensagem 'exec: no such file or directory'.

O binário foi compilado com vínculo dinâmico contra a glibc, incompatível com o musl do Alpine ou ausente no Scratch. No Go, compile com 'CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w"'. No Rust, compile utilizando o target 'x86_64-unknown-linux-musl'.

Sintaxe do BuildKit (--mount=type=cache) resulta em erro de compilação no docker build.

Adicione '# syntax=docker/dockerfile:1' na primeiríssima linha do Dockerfile e certifique-se de que o BuildKit esteja habilitado via 'export DOCKER_BUILDKIT=1' ou utilize 'docker buildx build'.

Perguntas frequentes (FAQ)

Qual é a principal vantagem de compilações multi-stage sobre Dockerfiles simples?▼

As compilações multi-stage isolam as ferramentas pesadas de build (compiladores, SDKs, pacotes de desenvolvimento) do ambiente de produção. Ao transferir apenas o artefato final para uma imagem base enxuta, o tamanho da imagem é reduzido entre 80% e 95% e a superfície de ataque é drasticamente diminuída.

Quando escolher Distroless ou Scratch em vez do Alpine Linux?▼

Escolha Scratch ou Distroless para binários compilados estaticamente (Go, Rust) que exigem segurança máxima sem acesso a shells interativos. Escolha o Alpine quando você precisar de um shell para diagnóstico em runtime ou bibliotecas dinâmicas baseadas em musl, mantendo a base abaixo de 10MB.

Como os montagens de cache do BuildKit diferem do cache de camadas comum do Docker?▼

O cache tradicional de camadas do Docker invalida todas as etapas subsequentes assim que qualquer arquivo de entrada é alterado. As montagens de cache do BuildKit (--mount=type=cache) conectam um diretório persistente do host diretamente ao processo do instalador durante o comando RUN, reutilizando pacotes sem gravá-los na imagem final.

Por que é indispensável executar containers como usuário não root em produção?▼

Containers compartilham o kernel do host. Se um processo rodar como root (UID 0) e houver uma falha de isolamento de container, o invasor obtém privilégios de root no servidor anfitrião. Executar com um usuário comum neutraliza o risco de escalonamento de privilégios.

Ferramentas e utilitários relacionados

Todas as ferramentas →
Referência de Desenvolvedor Sql To KyselyDesenvolvimento

Manual técnico e gerador de tipos para converter esquemas DDL de SQL em interfaces TypeScript seguras para Kysely em PostgreSQL, MySQL e SQLite.

Abrir ferramenta→
Guia do Desenvolvedor do Gerador de Entidades MikroORM TypeScript a partir de SQL DDLDesenvolvimento

Converta instruções SQL CREATE TABLE em classes de entidade MikroORM com decoradores @Entity, @PrimaryKey, @Property, @Index e relações.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de Esquemas Mongoose e Modelos TypeScript a partir de JSONDesenvolvimento

Infira e gere esquemas MongoDB Mongoose, interfaces Document de TypeScript, subdocumentos aninhados, timestamps e exportações de modelos a partir de JSON.

Abrir ferramenta→
Guia do Desenvolvedor do Gerador de Esquemas de Validação Yup a partir de JSONDesenvolvimento

Converta amostras JSON em esquemas de validação de objetos Yup com segurança de tipos, yup.string(), yup.number(), yup.array() e regras obrigatórias.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de Esquemas de Validação Joi a partir de JSONDesenvolvimento

Converta estruturas de dados JSON em esquemas de validação Joi robustos com restrições Joi.object(), Joi.string(), Joi.number() e Joi.array().

Abrir ferramenta→
Guia do Desenvolvedor do Conversor de JSON para Esquema Apache Avro (.avsc)Desenvolvimento

Converta payloads JSON em esquemas Apache Avro (.avsc) para produção com namespaces personalizados, tipos primitivos e lógicos, campos union anuláveis e regras de compatibilidade.

Abrir ferramenta→