Dockerfile multistage build
Gera um Dockerfile multistage (builder + runtime) para apps Node.js — copia node_modules apenas do builder.
—
Por que o build em vários estágios deixa a imagem pequena
Uma imagem Docker feita sem cuidado carrega tudo que foi usado para construí-la: compilador, dependências de desenvolvimento, cache do gerenciador de pacotes, código-fonte. Isso incha a imagem, aumenta o tempo de deploy e amplia a superfície de ataque — cada ferramenta a mais lá dentro é uma ferramenta a mais na mão de quem conseguir entrar no contêiner.
O build em vários estágios corta esse problema pela raiz. Um primeiro estágio, o builder, instala tudo e compila. Um segundo estágio parte de uma imagem limpa e copia apenas o resultado, com COPY --from=builder. Tudo que ficou no primeiro estágio é descartado e não aparece na imagem final. Informe a versão do Node e a página gera o Dockerfile com os dois estágios já encadeados.
A ordem das instruções no arquivo gerado não é casual. O package.json é copiado e as dependências instaladas antes do restante do código, porque cada instrução vira uma camada com cache próprio: mudar uma linha do código-fonte não invalida a camada de npm ci, e o build seguinte aproveita o que já estava pronto. Inverter essas duas linhas faz a instalação inteira rodar de novo a cada alteração.
Perguntas frequentes
Quantos estágios posso ter?
Por que npm ci e não npm install?
A imagem final precisa ser a mesma do builder?
Ferramentas Relacionadas
Gerador de Dockerfile
Monte um Dockerfile a partir de templates comuns: Node, Python, Go, Static Nginx, com multi-stage opcional, healthcheck e usuário não-root. Tudo no navegador.
Docker Run → Compose
Converta um comando docker run para o equivalente docker-compose.yml automaticamente. Mapeia portas, volumes, variáveis de ambiente, redes e restart policies.
docker-compose PostgreSQL
Gere um docker-compose pronto para PostgreSQL, com usuário, senha, banco e volume persistente configurados. Suba seu banco local com um docker compose up.
docker-compose MongoDB
Gera um docker-compose pronto para MongoDB, com usuário e senha de root, a porta 27017 publicada e volume persistente. O nome do banco você cria depois de subir.
docker-compose Elasticsearch
Gere um docker-compose pronto para Elasticsearch em modo single-node, com memória e volume configurados. Suba sua engine de busca local com um único comando.
Gerador de tasks.json VS Code
Monta tasks.json para o VS Code com label, type, command, group e problemMatcher. Inclui shell padrão configurável.