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.