Container — ilova jarayoni va uning kutubxona, konfiguratsiya hamda fayllarini izolyatsiyalangan foydalanuvchi makonida ishga tushirish usuli. Container virtual mashina kabi alohida to‘liq kernel yuklamaydi; host operatsion tizim kernelidan foydalanadi. Linux containerlari asosan namespaces, control groups va filesystem qatlamlari orqali ajratish hosil qiladi.
Izolyatsiya mexanizmlari
PID namespace containerga alohida jarayonlar ko‘rinishini beradi. Network namespace interfeys, routing table va portlarni ajratadi. Mount namespace filesystem ulanishlarini, user namespace esa foydalanuvchi va guruh identifikatorlarini boshqa ko‘rinishda xaritalaydi. Namespace mavjud obyektlarni ko‘rish chegarasini yaratadi, lekin resurs miqdorini o‘zi cheklamaydi.
Control groups — cgroups — CPU, xotira, I/O va boshqa resurslardan foydalanishni hisoblaydi va cheklaydi. Xotira limiti oshsa kernel container jarayonini to‘xtatishi mumkin. CPU limit va weight bir nechta workload orasida protsessor vaqtini taqsimlaydi.
Image va qatlamlar
Container image bajariladigan kod va filesystem tarkibini o‘zgarmas qatlamlar ko‘rinishida saqlaydi. Image manifesti arxitektura, konfiguratsiya va qatlam digestlarini ko‘rsatadi. Container ishga tushganda image ustiga yoziladigan vaqtinchalik qatlam qo‘shiladi. Container o‘chirilsa, shu qatlamdagi saqlanmagan ma’lumot yo‘qolishi mumkin.
Dockerfile yoki boshqa build ta’rifi image yaratish qadamlarini belgilaydi. Bir xil oldingi qadamlar cache orqali qayta ishlatiladi. Multi-stage build kompilyator va build vositalarini yakuniy runtime imagedan chiqarib, hajm va hujum yuzasini kamaytiradi. Registry imagelarni nom, tag va digest bo‘yicha saqlaydi. Tag o‘zgarishi mumkin, digest esa aniq mazmunga bog‘langan.
Tarmoq va saqlash
Container porti host portiga publish qilinishi mumkin. Bir virtual tarmoqdagi containerlar ichki nom orqali bog‘lanadi. Portni publish qilish xizmatni host interfeysida ochishi mumkin, shu sababli firewall va bind manzili tekshiriladi.
Doimiy ma’lumot volume yoki bind mountda saqlanadi. Volume runtime boshqaradigan joyda, bind mount esa hostdagi aniq yo‘lda bo‘ladi. Ma’lumotlar bazasi containerda ishlasa ham uning data katalogi containerning vaqtinchalik yozuv qatlamida qoldirilmaydi.
Xavfsizlik chegarasi
Container izolyatsiyasi virtual mashinadagi alohida kernel chegarasiga teng emas. Kernel zaifligi bir nechta containerga ta’sir qilishi mumkin. Jarayonni root bo‘lmagan foydalanuvchida ishlatish, capabilitiesni kamaytirish, read-only filesystem va seccomp profili xavfni cheklaydi. Maxfiy kalit image qatlamiga yozilmaydi, chunki keyingi qatlamda o‘chirilsa ham tarixda qolishi mumkin.
Image scanning ma’lum zaif kutubxonalarni topadi, ammo ilova mantiqi yoki noma’lum zaiflikni to‘liq aniqlamaydi. Image manbasi, imzosi, minimal tarkibi va muntazam qayta build qilinishi supply chain boshqaruvining bir qismidir.
Lifecycle va signal
Containerning asosiy jarayoni PID 1 sifatida ishlaydi. U tugasa container ham to‘xtaydi. PID 1 signal va zombie processlarni yig‘ish bo‘yicha odatiy jarayondan farqli mas’uliyatga ega; zarur bo‘lsa init wrapper ishlatiladi. Orchestrator to‘xtatishda avval SIGTERM, grace period tugagach SIGKILL yuborishi mumkin.
Ilova shutdown signalini qabul qilib, yangi so‘rovlarni to‘xtatadi, davom etayotgan ishni yakunlaydi va connectionlarni yopadi. Readiness probe trafik qabul qilishga tayyorlikni, liveness probe esa jarayonni qayta boshlash zarurligini bildiradi. Noto‘g‘ri liveness sozlamasi sekin ishga tushayotgan sog‘lom xizmatni qayta-qayta o‘ldirishi mumkin.
Bog‘liq tushunchalar
Container image, namespace, cgroups, registry, volume, Docker, virtual mashina