ANÚNCIO

~/questoes/devops

Por que Docker reutiliza camadas em cache durante o build?

Responda, confira o feedback e use o resultado para orientar sua revisão.
Aula de referência APRENDA DOCKER DO ZERO | TUTORIAL COMPLETO COM DEPLOY
Para fixar

Por que Docker reutiliza camadas em cache durante o build

Conceito central

Docker organiza imagens em camadas, onde cada instrução do Dockerfile cria uma nova camada. Quando você faz um novo build, Docker verifica se as camadas anteriores já existem no cache e as reutiliza, evitando reprocessar trabalho que já foi feito.

Por que essa resposta faz sentido

Docker reutiliza camadas em cache para acelerar builds subsequentes. Se você executar o build novamente e nenhuma instrução mudou, Docker não precisa refazer aquela camada, economizando tempo de processamento significativamente.

Armadilhas comuns

  • Confundir cache de build com otimização de tamanho de imagem. Cache acelera builds, mas não reduz o tamanho final da imagem.
  • Achar que alterar uma linha do Dockerfile invalida todo o cache. Apenas as camadas afetadas pela mudança perdem o cache; as anteriores podem ser reutilizadas.
  • Pensar que cache é apenas para segurança ou isolamento de containers. Na verdade, é fundamentalmente um mecanismo de performance no processo de construção.

Entenda as alternativas

A

Esta é a razão principal. Cada instrução no Dockerfile cria uma camada, e Docker verifica o cache antes de processar. Se a instrução e seus inputs não mudaram, a camada em cache é reutilizada, tornando builds subsequentes muito mais rápidos.

B

O cache não é um mecanismo de segurança ou verificação de integridade. Docker usa assinaturas criptográficas para garantir que as camadas em cache não foram alteradas, mas essa não é a razão principal para reutilizar o cache.

C

Múltiplos containers já conseguem rodar a mesma imagem simultaneamente sem precisar do cache. O cache de camadas está relacionado ao processo de build, não à execução de containers.

D

O cache não remove instruções do Dockerfile. Ele apenas armazena o resultado de cada instrução já processada. Se você quer reduzir tamanho, precisa otimizar as instruções manualmente, não através do cache.

Dica prática: Organize suas instruções no Dockerfile da mais estável para a mais frequentemente alterada. Coloque COPY ou RUN de dependências antes de COPY do código-fonte. Assim, quando você modifica seu código, as camadas de dependências continuam em cache e o build fica muito mais rápido.

Revise pensando: Se você modificar apenas uma linha do seu código-fonte em um Dockerfile, qual parte do build será refeita e qual parte vem do cache?