Чӣ гуна кэшгирӣ дар 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 .