Dockerfile чӣ гуна мефаҳмад, ки пас аз иҷрои фармони 'yum update' бояд кешро тоза кунад?
sobes.tech AI
Ҷавоб аз AI
Dockerfile намефаҳмад, ки лозим аст, ки кеш пас аз иҷрои фармони yum update тоза карда шавад. Кешгирии Docker асос ёфтааст ба мундариҷаи фармонҳо дар Dockerfile.
Ҳангоми иҷрои фармони RUN yum update, Docker натиҷаи иҷрои ин фармонро кеш мекунад. Агар мундариҷаи сатр RUN yum update тағйир наёбад, Docker қабати кешшуда истифода мекунад.
Барои таъмини иҷрои фармони yum update ҳангоми сохтани тасвир, лозим аст, ки ба ин фармон чизе илова кунед, ки дар ҳар сохт ва ё дар вақти эҳтиёҷ ба навсозӣ тағйир ёбад. Яке аз роҳҳои маъмул илова кардани тамғаи вақт ё рақами тасодуфӣ аст, ҳарчанд ин ҳамеша беҳтарин роҳ нест. Беҳтар ин аст, ки истифодаи бисёрмарҳилавии сохт ва ё идоракунии вобастагиро бо истифода аз мудири бастаҳо ба таври равшантар анҷом диҳед.
Бо вуҷуди ин, самараноктарин роҳ барои маҷбурӣ тоза кардани кеш барои дастур муайян тағйир додани мазмунаш аст. Docker ҳар як дастурро ҳамчун воҳиди атомӣ барои кешгирӣ баррасӣ мекунад.
Масалан, истифодаи потенсиалии чунин техникаи "антикеш" (на тавсия мешавад барои истеҳсолӣ, аммо принсипро нишон медиҳад):
RUN yum update -y && echo $(date +%s) > /tmp/update_timestamp
Ин усул ба Docker имкон медиҳад, ки қабатро дар ҳар сохт такрор кунад, зеро тамғаи вақт дар файл /tmp/update_timestamp тағйир меёбад, ки баромади фармони RUN ва дар натиҷа, хеши қабатро тағйир медиҳад.
Роҳҳои беҳтар барои таъмин кардани актуалиятии бастаҳо:
- Бисёрмарҳилавии сохт: Навсозии вобастагиҳо дар як марҳилаи миёна ва сипас нусхабардории танҳо артефактҳои зарурӣ ба тасвири ниҳоӣ.
- Илмӣ нишон додани версияҳои бастаҳо: Фикс кардани версияҳои бастаҳо дар Dockerfile ё дар файли рӯйхати вобастагиҳо ва навсозии ин файл дар вақти зарурӣ.
Раванди, ки дар он Docker кешро барои дастур тоза мекунад, чунин аст:
- Docker дастурро дар Dockerfile (аз ҷумла аргументҳо) хеш мекунад.
- Docker қабати мувофиқро дар кеши маҳаллӣ ҷустуҷӯ мекунад.
- Агар қабат ёбад, истифода мешавад (Кеш Ҳит).
- Агар қабат ёбад, дастур иҷро мешавад, қабати нав сохта мешавад ва ин қабат ба кеш илова мешавад (Кеш Мис).
- Дар ҳолати Кеш Мис, Docker инчунин кешро барои ҳамаи дастурҳои баъдӣ дар Dockerfile тоза мекунад, то онҳоро иҷро кунад.
Аз ин рӯ, yum update худ ба худ кешро тоза намекунад. Ин танҳо вақте рӯй медиҳад, ки худи дастури RUN yum update тағйир ёбад ё кеши қаблӣ тоза карда шавад.