Gerador de Dockerfile

Gere um Dockerfile pronto para produção para Node.js, Python, Go, Java, .NET, Rust ou site estático: builds multiestágio, usuário não root e um .dockerignore correspondente.

Dockerfile
.dockerignore

Em produção, fixe versões exatas ou digests das imagens e reconstrua com frequência para receber correções de segurança.

Ferramentas Relacionadas

Ver Todas

O que é Gerador de Dockerfile?

Crie um Dockerfile que segue as boas práticas atuais para Node.js, Python, Go, Java (Maven), .NET (ASP.NET Core), Rust ou um site estático servido pelo Nginx. As opções incluem builds multiestágio para imagens menores, execução com usuário não root, versão do runtime, porta e comando de inicialização, e a ferramenta também gera um .dockerignore correspondente.

Como usar Gerador de Dockerfile

  1. Escolha a Linguagem / stack.
  2. Defina a Versão do runtime (tag da imagem), a Porta e o nome do arquivo inicial, módulo, JAR ou binário.
  3. Mantenha marcados Build multiestágio e Executar com usuário não root, a menos que tenha um motivo para não fazer isso.
  4. Baixe o Dockerfile e o .dockerignore para a raiz do projeto e execute docker build -t myapp ..

Exemplo

Entrada
Node.js 22, port 3000, start file dist/index.js, multi-stage, non-root, npm run build
Saída
# syntax=docker/dockerfile:1

# ---- dependencies (production only) ----
FROM node:22-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev

# ---- build ----
FROM node:22-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build

# ---- runtime ----
FROM node:22-alpine
ENV NODE_ENV=production
WORKDIR /app
COPY --from=deps --chown=node:node /app/node_modules ./node_modules
COPY --from=build --chown=node:node /app/dist ./dist
COPY --chown=node:node package.json ./
# The official Node images ship an unprivileged "node" user
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]

Quando usar Gerador de Dockerfile

Use-o para colocar em contêiner rapidamente um serviço web ou API típico, com padrões sensatos. Revise o arquivo gerado para o seu projeto: comandos de build, pastas de saída e pontos de entrada variam, e dependências nativas podem exigir pacotes de sistema extras. Fixe versões exatas ou digests das imagens para builds de produção reproduzíveis.

Como funciona Gerador de Dockerfile

Cada stack tem um modelo escrito para as suas imagens oficiais. Os builds multiestágio instalam e compilam em uma imagem SDK completa e copiam só o resultado para um runtime enxuto: o Node instala as dependências de produção com npm ci --omit=dev em um estágio separado; o Python monta um virtualenv e o copia para python:<ver>-slim; o Go compila um binário estático (CGO_ENABLED=0, -trimpath -ldflags="-s -w") em distroless/static:nonroot; o Java copia o JAR para uma imagem Temurin só com JRE; o .NET publica na imagem de runtime aspnet e usa o usuário embutido $APP_UID; o Rust copia o binário de release para debian:bookworm-slim. O modo não root usa o usuário sem privilégios da própria imagem (node, nonroot, app) ou cria um com UID 10001. Os manifestos de dependências são copiados antes do código-fonte para que o cache de camadas do Docker pule a reinstalação quando só o código muda.

Casos de Uso Comuns

  • Colocar em contêiner uma API Node.js ou Python para implantação
  • Reduzir a imagem de um serviço Go com um runtime distroless
  • Servir um build React/Vue/Astro com Nginx sem root
  • Ensinar ou revisar boas práticas de Dockerfile

Nota de Segurança

Nunca use COPY para colocar arquivos .env ou credenciais em uma imagem; passe os segredos em tempo de execução ou com secret mounts do BuildKit.

Perguntas Frequentes

Por que usar um build multiestágio?

Compiladores, dependências de desenvolvimento e arquivos-fonte ficam no estágio de build, então a imagem final é menor, inicia mais rápido e tem menos pacotes que poderiam conter vulnerabilidades.

Por que executar com um usuário não root?

Se a aplicação for comprometida, o invasor não ganha root dentro do contêiner, o que limita o estrago e bloqueia algumas técnicas de fuga de contêiner.

O que o .dockerignore faz?

Ele exclui do contexto de build arquivos como node_modules, .git e .env, deixando os builds mais rápidos e mantendo segredos fora da imagem.

Explore mais categorias