ANÚNCIO

~/questoes/devops

Como um Dockerfile multistágio reduz o tamanho final da imagem Docker?

Responda, confira o feedback e use o resultado para orientar sua revisão.
Aula de referência COMO CONFIGURAR O DOCKER PARA FRONTEND | Angular + Nginx
Para fixar

Dockerfile Multistágio: Redução de Tamanho de Imagem

Conceito central

Um Dockerfile multistágio divide a construção da aplicação em etapas, onde apenas os arquivos finais compilados são copiados para o estágio de produção. Isso deixa para trás todas as ferramentas de build, dependências e código-fonte desnecessários, resultando em uma imagem muito menor e mais eficiente.

Por que essa resposta faz sentido

A abordagem multistágio funciona porque o segundo estágio começa do zero com uma imagem base limpa (como Nginx) e copia apenas os artefatos compilados do primeiro estágio. Tudo aquilo que foi usado apenas na construção fica no primeiro estágio e não entra na imagem final.

Armadilhas comuns

  • Confundir otimização de tamanho com limpeza de código: remover comentários não reduz imagem Docker; remover ferramentas de build sim.
  • Acreditar que a instalação de dependências de produção apenas resolve o problema: isso ajuda, mas o Node.js e outras ferramentas de build ainda ocupam espaço em um estágio único.
  • Não entender que o primeiro estágio do multistágio é completamente descartado: muitos pensam que a imagem final é a soma de todos os estágios, quando na verdade copia apenas o que você especificar.

Entenda as alternativas

A

Esta é a estratégia correta do build multistágio. O primeiro estágio (geralmente Node.js) compila o Angular e gera os arquivos em dist/. O segundo estágio (Nginx) copia apenas esses arquivos compilados, deixando o Node.js, npm, node_modules e todo o código-fonte no primeiro estágio, que é descartado da imagem final.

B

Deletar node_modules e reinstalar é uma tática dentro de um estágio único, mas não é tão eficaz quanto o multistágio. O Node.js inteiro e as ferramentas de build ainda ficam na imagem final, ocupando muito espaço. O multistágio remove tudo isso completamente.

C

Remover comentários e espaços em branco praticamente não reduz o tamanho final da imagem Docker. Essa limpeza deixaria apenas alguns kilobytes, enquanto o multistágio remove centenas de megabytes ao eliminar Node.js e dependências de build.

D

Compactar em ZIP não ajuda a reduzir o tamanho da imagem final. O arquivo seria descompactado dentro do container de qualquer forma, ocupando o mesmo espaço. O benefício real do multistágio é não incluir essas coisas na imagem em primeiro lugar.

Dica prática: Para visualizar o impacto na prática, construa um Dockerfile de estágio único para Angular e compare o tamanho final com um multistágio usando `docker images`. Você verá que o multistágio resulta em imagens 5 a 10 vezes menores, facilitando downloads mais rápidos e deploys mais ágeis.

Revise pensando: Por que o segundo estágio de um Dockerfile multistágio consegue ser tão menor que a imagem inteira usada no primeiro estágio?