Sobes.tech
Middle

Ինչպես է կատարվում կեշավորումը Docker-ում?

sobes.tech AI

Պատասխան AI-ից

Docker- ում կեշավորումը տեղի է ունենում շերտերի հիման վրա՝ պատկերի կառուցման ժամանակ։ Dockerfile-ը բաղկացած է հրահանգներից, որոնցից յուրաքանչյուրը ստեղծում է նոր շերտ։ Հաջորդ կառուցումների ժամանակ, եթե հրահանգը և նրա կոնտեքստը չեն փոխվել, Docker-ը օգտագործում է առկա շերտը կեշից՝ նոր հրահանգի կատարման փոխարեն։

Կեշի չեղարկման գործոնները՝

  • Հրահանգի փոփոխություն: Յուրաքանչյուր փոփոխություն հրահանգում (օր., RUN apt-get update-ից RUN apt-get install-ին):
  • Կոնտեքստի փոփոխություն: Փոփոխություն ֆայլերում կամ დირექტորիաներում, որոնք օգտագործվում են հրահանգով (COPY, ADD): Օր., ֆայլի պարունակության փոփոխություն, որը պատկերի մեջ է պատճենվում:
  • Հրահանգների կարգը: Dockerfile-ում հրահանգների կարգի փոփոխություն:
  • --no-cache-ի օգտագործում: Կեշի անջատում՝ ամբողջ կառուցման համար։

Կեշավորման գործընթացը՝

  1. Docker-ը կարդում է Dockerfile-ը վերևից ներքև։
  2. Հրահանգի համար ստուգում է, արդյոք առկա է տեղական կեշում համապատասխանող շերտ, որը համապատասխանում է նույն նախորդ հրահանգին և կոնտեքստին։
  3. Եթե համընկնումը գտնվի, Docker-ը կրկնակի օգտագործում է այդ շերտը և անցնում հաջորդ հրահանգին։
  4. Եթե համընկնումը չլինի (կեշը չեղարկված է), Docker-ը կատարում է հրահանգը, ստեղծում նոր շերտ և ավելացնում այն կեշին։ Բոլոր հետևյալ հրահանգները, որոնք հաջորդում են չեղարկված հրահանգին, նույնպես չեն օգտագործի կեշը։

Օրինակ՝ հրահանգների կարգի ազդեցությունը՝

Նախ պատկերացրեք, որ ունեք Dockerfile, որը սկզբում պատճենում է ձեր կոդը, և հետո տեղադրում է կախվածությունները։ Եթե հաճախ փոփոխում եք կոդը, բայց հազվադեպ՝ կախվածությունները, ապա կեշավորումը կախվածությունների տեղադրման համար անօգուտ կլինի, քանի որ յուրաքանչյուր փոփոխության ժամանակ կեշը չեղարկվում է COPY քայլում։

# Dockerfile 1 (Անբարենպաստ կեշավորում՝ հաճախ փոփոխվող կոդի դեպքում)
COPY . /app
RUN pip install -r requirements.txt

Կարգի փոփոխությունը կարող է բարելավել կեշավորումը՝

# Dockerfile 2 (Լավ կեշավորում՝ հաճախ փոփոխվող կոդի դեպքում)
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
COPY . /app

Այս դեպքում, եթե միայն կոդը փոխվի (ոչ requirements.txt-ը), RUN pip install-ի կեշը կմնա պահպանված։

ADD և COPY հրահանգները օգտագործում են ֆայլերի պարունակության հեշը՝ կեշի չեղարկման համար։

docker build հրամանը ըստ նախնական կարգի օգտագործում է կեշը։ Կեշը անջատելու համար օգտագործվում է --no-cache նշանը։

# Կեշի օգտագործմամբ կառուցում (նախնական)
docker build -t myimage .

# Կեշի բացակայությամբ կառուցում
docker build --no-cache -t myimage .