Conteinerização
medium

Conteinerização Question #019e3a4f

Question Statement
Conteinerização
#docker
#multistage builds
#image optimization
Medium

Qual é uma prática recomendada para minimizar o tamanho da imagem do contêiner?

A

Usar um DockerFile.

B

Usar builds de múltiplos estágios.

Correct
C

Criar imagens com tags diferentes.

D

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 alpine ou scratch.
  • Limpe os caches do gerenciador de pacotes na mesma camada.
  • Combine comandos RUN para reduzir camadas.
  • Evite instalar pacotes desnecessários.