Ինչպես է կատարվում կեշավորումը Docker-ում?
sobes.tech AI
Պատասխան AI-ից
Docker- ում կեշավորումը տեղի է ունենում շերտերի հիման վրա՝ պատկերի կառուցման ժամանակ։ Dockerfile-ը բաղկացած է հրահանգներից, որոնցից յուրաքանչյուրը ստեղծում է նոր շերտ։ Հաջորդ կառուցումների ժամանակ, եթե հրահանգը և նրա կոնտեքստը չեն փոխվել, Docker-ը օգտագործում է առկա շերտը կեշից՝ նոր հրահանգի կատարման փոխարեն։
Կեշի չեղարկման գործոնները՝
- Հրահանգի փոփոխություն: Յուրաքանչյուր փոփոխություն հրահանգում (օր.,
RUN apt-get update-իցRUN apt-get install-ին): - Կոնտեքստի փոփոխություն: Փոփոխություն ֆայլերում կամ დირექტորիաներում, որոնք օգտագործվում են հրահանգով (
COPY,ADD): Օր., ֆայլի պարունակության փոփոխություն, որը պատկերի մեջ է պատճենվում: - Հրահանգների կարգը: Dockerfile-ում հրահանգների կարգի փոփոխություն:
--no-cache-ի օգտագործում: Կեշի անջատում՝ ամբողջ կառուցման համար։
Կեշավորման գործընթացը՝
- Docker-ը կարդում է Dockerfile-ը վերևից ներքև։
- Հրահանգի համար ստուգում է, արդյոք առկա է տեղական կեշում համապատասխանող շերտ, որը համապատասխանում է նույն նախորդ հրահանգին և կոնտեքստին։
- Եթե համընկնումը գտնվի, Docker-ը կրկնակի օգտագործում է այդ շերտը և անցնում հաջորդ հրահանգին։
- Եթե համընկնումը չլինի (կեշը չեղարկված է), 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 .