Sobes.tech
Middle+

Dockerfile 'yum update' əməliyyatından sonra keşi silməli olduğunu necə başa düşür?

sobes.tech Süni İntellekt

AI-dan cavab

Dockerfile yum update əmri sonrası önbelleyi sıfırlamağı anlamır. Docker önbelleği, Dockerfile içindəki əmrlərin məzmununa əsaslanır.

RUN yum update əmri icra edilərkən, Docker bu əmrin nəticəsini önbelleğe alır. Əgər RUN yum update sətrinin məzmunu dəyişməzsə, Docker önbellekteki qatmanı istifadə edir.

yum update əmrinın imaj qurarkən icra olunmasını təmin etmək üçün, bu əmrə hər dəfə və ya yeniləməyə ehtiyac olduqda dəyişəcək bir şey əlavə etmək lazımdır. Ümumiyyətlə, zaman damğası və ya təsadüfi ədəd əlavə etmək üsulu geniş yayılmışdır, lakin bu hər zaman ən yaxşı yanaşma deyil. Daha düzgün yanaşma çox mərhələli qurma və ya paket meneceri ilə asılılıqları daha açıq idarə etməkdir.

Lakin, müəyyən bir əmrin önbelleğini məcburən sıfırlamağın ən effektiv yolu, onun məzmununu dəyişdirməkdir. Docker hər əmri önbellekləmə üçün atomik bir vahid kimi qəbul edir.

Belə bir "anti-cache" texnikasının nümunəsi (istehsalat üçün tövsiyə edilmir, amma prinsipi göstərir):

RUN yum update -y && echo $(date +%s) > /tmp/update_timestamp

Bu metod Docker-ın hər quruluşda bu qatmanı yenidən işləməsinə səbəb olur, çünki /tmp/update_timestamp faylındakı zaman damğası dəyişəcək, bu da RUN əmrin çıxışını və nəticədə qatmanın hashini dəyişdirir.

Pakətlərin aktual qalmasını təmin etmək üçün daha düzgün yanaşmalar:

  • Çox mərhələli qurma: Asılılıqları ara mərhələdə yeniləmək və yalnız lazım olan artefaktları son imaja köçürmək.
  • Pakət versiyalarını açıq şəkildə göstərmək: Versiyaları Dockerfile və ya asılılıq faylında sabitləşdirmək və lazım olduqda bu faylı yeniləmək.

Docker-ın bir əmrin önbelleğini necə sıfırladığı prosesi aşağıdakı kimidir:

  1. Docker, Dockerfile-dəki əmrin hashini hesablayır ( arqumentlər daxil olmaqla).
  2. Docker, yerli önbellekdə bu hash ilə uyğun gələn qatmanı axtarır.
  3. Əgər taparsa, həmin qatmanı istifadə edir (Cache Hit).
  4. Əks halda, əmri icra edir, yeni qatmanı yaradır və önbelleyə əlavə edir (Cache Miss).
  5. Cache Miss halında, Docker həmçinin bütün növbəti əmrlər üçün önbelleyi ləğv edir, onların icrasını təmin etmək üçün.

Beləliklə, yum update özü önbelleyi sıfırlamır. Bu, yalnız RUN yum update əmri dəyişəndə və ya əvvəlki əmrlə önbellek silindiyində baş verir.