Hoe begrijpt Dockerfile dat het cache moet worden geleegd na het uitvoeren van de opdracht 'yum update'?
sobes.tech AI
Antwoord van AI
Docker cacht de lagen van een afbeelding op basis van de inhoud van de commando's in de Dockerfile en hun context. Wanneer het commando yum update wordt uitgevoerd, kijkt Docker naar de regel van het commando zelf en de context van de bestanden die van invloed zijn op de uitvoering.
Als het commando yum update de systeemstatus wijzigt (bijvoorbeeld door pakketten bij te werken), maar het commando in de Dockerfile niet verandert, gebruikt Docker standaard de cache van de vorige laag, omdat het geen wijzigingen in de instructie ziet.
Om de cache te wissen na yum update, wordt meestal het volgende gedaan:
- Combineren van de commando's die de status wijzigen in één RUN-instructie, voor meer controle over de cache.
- Toevoegen van commando's om de cache van de pakketbeheerder op te schonen (bijvoorbeeld
yum clean all), om de laaggrootte te verminderen. - Als je de cache geforceerd wilt wissen, kun je het commando aanpassen (bijvoorbeeld door een argument met de huidige datum of een variabele toe te voegen), zodat Docker het als nieuw beschouwt en de laag opnieuw bouwt.
Voorbeeld:
RUN yum update -y && yum clean all
Als je de cache geforceerd wilt wissen:
ARG CACHE_DATE=2024-06-01
RUN yum update -y && yum clean all
Het wijzigen van de waarde van CACHE_DATE zorgt ervoor dat Docker deze laag opnieuw bouwt, omdat het commando nu anders is.
Op deze manier begrijpt Docker dat het de cache moet wissen wanneer de tekst van het commando of de context verandert, en niet door interne veranderingen in de systeemstatus.