Image layer — container image fayl tizimidagi o‘zgarishlarni ifodalovchi, mazmuni bo‘yicha manzillanadigan o‘zgarmas qatlamdir. Har qatlam avvalgi holatga qo‘shilgan, almashtirilgan yoki o‘chirilgan fayllarni saqlaydi. Container ishga tushganda qatlamlar tartib bilan birlashtirilib, dastur ko‘radigan yagona ildiz fayl tizimi hosil qilinadi.
Qatlamli model
OCI image manifesti qatlam bloblarining digestlari va tartibini ko‘rsatadi. Registry bloblarni siqilgan holda saqlashi mumkin; runtime ularni yuklab, tekshiradi va local content store’ga joylaydi. Digest baytlar o‘zgarmaganini tasdiqlaydi, shuning uchun bir xil qatlamni bir nechta image qayta ishlata oladi.
Dockerfile’dagi RUN, COPY va ADD kabi ko‘rsatmalar odatda yangi fayl tizimi qatlamini yaratadi. Metadata o‘zgarishlari ham image konfiguratsiyasiga yoziladi, lekin har ko‘rsatma albatta katta blob degani emas.
FROM alpine:3.22
COPY app /usr/local/bin/app
RUN adduser -D appuser && chmod 0755 /usr/local/bin/app
USER appuser
Bu misolda base qatlamlar ustiga executable va permission o‘zgarishlari qo‘shiladi.
Overlay va o‘chirish
Yuqori qatlamdagi bir xil yo‘l pastdagi faylni yashiradi. Faylni keyingi qatlamda o‘chirish pastki blobdan baytlarni olib tashlamaydi; maxsus whiteout yozuvi uni yakuniy ko‘rinishda berkitadi. Shu sababli secretni bir qatlamda nusxalab, keyingi qatlamda rm qilish secretni image tarixidan yo‘qotmaydi.
Ishlayotgan container image qatlamlari ustiga yoziladigan alohida qatlam oladi. Bu qatlam container o‘chirilganda odatda yo‘qoladi. Doimiy ma’lumot volume’da saqlanadi.
Build cache
Builder ko‘rsatma, uning kirish fayllari va oldingi holat bir xil bo‘lsa mavjud natija qatlamidan foydalanishi mumkin. Kam o‘zgaradigan dependency o‘rnatishni tez-tez o‘zgaradigan source nusxasidan oldin joylashtirish cache samaradorligini oshiradi. Masalan, avval manifest, keyin paket o‘rnatish, undan so‘ng source code ko‘chirish odatiy tartibdir.
Cache qulay bo‘lsa-da, tashqi repository yangilanganini yashirishi mumkin. Build tizimi base digest va package metadata’ni nazorat qilib, rejalashtirilgan clean rebuild bajaradi.
Hajm va tarqatish
Registry va host bir xil digestli qatlamni qayta yuklamaydi. Bu ko‘plab image’lar umumiy base ishlatganda tarmoq sarfi va disk hajmini kamaytiradi. Biroq ko‘rsatilgan “virtual size” bilan real qo‘shimcha disk sarfi bir xil bo‘lmasligi mumkin, chunki bloblar umumiy ishlatiladi va siqish darajasi farq qiladi.
Keraksiz katta faylni yaratib, boshqa Dockerfile bosqichida o‘chirish image’ni kichraytirmaydi. Yaratish va tozalash bitta RUN qatlamida bajariladi yoki multi-stage build orqali artifactgina yakuniy bosqichga ko‘chiriladi.
Xavfsizlik va boshqaruv
Layer tarixi tekshiruv uchun foydali: qaysi build bosqichi fayl qo‘shganini ko‘rsatadi. Ammo u source provenance yoki imzo o‘rnini bosa olmaydi. Scanner barcha samarali qatlamlarni ko‘rib, yakuniy paket holatini aniqlaydi; SBOM ham image digestiga bog‘lanadi.
Hostdagi ishlatilmaydigan qatlamlar garbage collection bilan tozalanadi. Ishlayotgan container yoki mavjud manifest murojaat qilayotgan blob o‘chirilmasligi kerak. Registry retention siyosati ham tag yo‘qolishi bilan blob darhol yo‘qolishini anglatmasligi mumkin.
Qayta ishlab bo‘lmaslik
Qatlam immutable bo‘lgani uchun registry ichida uni joyida patch qilish mumkin emas. Bitta kutubxona yangilansa builder yangi qatlamlar va yangi image manifesti yaratadi. Eski digest eski tarkibni anglatishda davom etadi. Bu rollback va auditni soddalashtiradi, lekin zaif artifactlarni retention muddati davomida access policy bilan himoyalashni talab qiladi.
Layer sonini sun’iy ravishda bittaga kamaytirish har doim tezroq image bermaydi. Download parallelizmi, umumiy base qatlamlar va cache hitlari ham hisobga olinadi. Squash qilingan tasvir tarixiy chegaralarni yo‘qotishi hamda boshqa image’lar bilan blob almashishni kamaytirishi mumkin.
Bog‘liq tushunchalar
Container image, Overlay filesystem, Image manifest, Image digest, Build cache, Whiteout, Registry