~/questoes/devops
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.
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.
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.
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.
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.
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.