Conteinerização Question #019e3a4f
Qual é uma prática recomendada para minimizar o tamanho da imagem do contêiner?
Usar um DockerFile.
Usar builds de múltiplos estágios.
Criar imagens com tags diferentes.
Adicionar um script build.sh.
Official Explanation / Community Explanations
Resumo
Os builds de múltiplos estágios são uma prática recomendada para minimizar o tamanho da imagem do contêiner, permitindo o uso de várias instruções FROM em um único Dockerfile. Cada estágio pode usar uma imagem base diferente, e você pode copiar seletivamente apenas os artefatos necessários de um estágio para outro, descartando dependências e ferramentas de build intermediárias.
Como Funciona
Em um build de múltiplos estágios, você define vários estágios de build. O primeiro estágio pode usar uma imagem completa de SDK ou compilador para compilar sua aplicação. O estágio final usa uma imagem de runtime mínima (por exemplo, alpine ou scratch). Usando a diretiva COPY --from, você copia apenas o binário compilado ou os arquivos necessários do estágio anterior para o estágio final. Isso garante que a imagem final contenha apenas o necessário para executar a aplicação, reduzindo significativamente seu tamanho.
Por que Builds de Múltiplos Estágios Estão Corretos
- Reduz o tamanho da imagem: Ao separar as dependências de build das dependências de runtime, a imagem final é enxuta e segura.
- Melhora a segurança: Menos pacotes significam uma superfície de ataque menor.
- Simplifica o Dockerfile: Um único Dockerfile pode lidar com estágios de build e runtime sem precisar de scripts externos ou múltiplos Dockerfiles.
Por que as Outras Opções Estão Incorretas
- Usar um DockerFile: Esta é uma prática genérica para construir imagens, mas não minimiza o tamanho inerentemente. Um Dockerfile mal escrito pode produzir imagens grandes.
- Criar imagens com tags diferentes: Tags são apenas rótulos para versões; elas não afetam o tamanho da imagem.
- Adicionar um script build.sh: Este é um script de build externo que não reduz diretamente o tamanho da imagem. Pode até aumentar a complexidade sem benefícios de tamanho.
Melhores Práticas para Imagens Mínimas
- Use builds de múltiplos estágios.
- Escolha imagens base mínimas como
alpineouscratch. - Limpe os caches do gerenciador de pacotes na mesma camada.
- Combine comandos
RUNpara reduzir camadas. - Evite instalar pacotes desnecessários.