Sobes.tech
Middle+

Como é que o Dockerfile entende que é necessário limpar o cache após executar o comando 'yum update'?

sobes.tech IA

Resposta da IA

O Docker armazena em cache as camadas da imagem com base no conteúdo dos comandos no Dockerfile e no seu contexto. Quando executa o comando yum update, o Docker observa a própria linha de comando e o contexto dos ficheiros que influenciam a sua execução.

Se o comando yum update altera o estado do sistema (por exemplo, atualizando pacotes), mas o comando no Dockerfile não muda, o Docker, por padrão, usa o cache da camada anterior, pois não detecta alterações na instrução.

Para invalidar o cache após yum update, geralmente faz-se o seguinte:

  • Combinar comandos que alteram o estado numa única instrução RUN, para um controlo mais preciso do cache.
  • Adicionar comandos para limpar o cache do gestor de pacotes (por exemplo, yum clean all), para reduzir o tamanho da camada.
  • Se for necessário forçar a invalidação do cache, pode-se modificar o comando (por exemplo, adicionando um argumento com a data atual ou uma variável), para que o Docker o considere novo e reconstrua a camada.

Exemplo:

RUN yum update -y && yum clean all

Para forçar a invalidação do cache:

ARG CACHE_DATE=2024-06-01
RUN yum update -y && yum clean all

Alterar o valor de CACHE_DATE fará com que o Docker reconstrua essa camada, pois o comando agora é diferente.

Assim, o Docker entende que deve invalidar o cache quando o texto do comando ou o contexto mudam, e não por alterações internas no estado do sistema.