Bosh sahifa Wiki Containerization

Containerization

Containerization — ilova va uning dependencylarini izolatsiyalangan, ko‘chma ish muhitida paketlash usuli. Containerlar host operatsion tizimining kernelini bo‘lishadi, lekin process, filesystem, network va resurslarni mantiqiy ajratadi.

Container virtual mashinadan yengilroq, chunki har instance alohida guest kernel yuklamaydi.

Docker containerizationning keng tarqalgan vositalaridan biri, ammo container tushunchasi faqat Docker bilan cheklanmaydi.

Image

Container image read-only qatlamlardan tashkil topgan paket.

Unda:

bo‘ladi.

Image ishlatilganda uning ustiga yoziladigan container layer qo‘shiladi.

Container

Container image’ning ishlayotgan instance’i.

Bitta image’dan ko‘p container yaratilishi mumkin.

Container:

ga ega.

Container o‘chirilganda writable layerdagi doimiy saqlanmagan ma’lumot yo‘qolishi mumkin.

Namespace

Linux namespace processlarga alohida ko‘rinish beradi.

Turlari:

Container ichidagi PID 1 hostda boshqa PIDga ega bo‘ladi.

Cgroup

Control group resurs sarfini o‘lchaydi va cheklaydi.

Cheklovlar:

Memory limitdan oshsa, container process OOM orqali o‘ldirilishi mumkin.

Filesystem layer

Image qatlamlari copy-on-write modelida ishlaydi.

Bir nechta container umumiy read-only layerlarni bo‘lishadi.

Fayl o‘zgartirilsa, container writable layerga nusxalanadi.

Bu storage’ni tejaydi, lekin ko‘p yoziladigan workload uchun alohida volume ma’qul.

Volume

Doimiy ma’lumot container layerdan tashqarida saqlanadi.

Volume:

bo‘lishi mumkin.

Database data’i volume’da saqlanadi.

Container network

Container o‘z network namespace’iga ega bo‘lishi mumkin.

Unga:

beriladi.

Bridge networkda host porti container portiga NAT qilinishi mumkin.

Port publishing

Container ichidagi service 0.0.0.0:8000da tinglaydi.

Hostda:

8080 → container 8000

mapping yaratiladi.

Container portini ochish va hostga publish qilish alohida tushuncha.

Registry

Container image registry’da saqlanadi.

Registry:

ni boshqaradi.

Tag o‘zgarishi mumkin. Digest image kontentini aniq identifikatsiya qiladi.

Dockerfile

Dockerfile image build bosqichlarini tavsiflaydi.

Buyruqlar:

  • FROM;
  • RUN;
  • COPY;
  • WORKDIR;
  • ENV;
  • USER;
  • ENTRYPOINT;
  • CMD.

Har buyruq layer yaratishi mumkin.

Build cache

O‘zgarmagan layer qayta ishlatiladi.

Dependency manifestni source code’dan oldin copy qilish cache samaradorligini oshiradi.

Secret build layerga yozilsa, keyingi qatlamda o‘chirilgan bo‘lsa ham image tarixida qolishi mumkin.

Multi-stage build

Build tool va source bir bosqichda, final runtime boshqa kichik bosqichda bo‘ladi.

Afzalliklari:

PID 1

Containerdagi asosiy process PID 1 rolini bajaradi.

U:

  • signal qabul qilish;
  • child processlarni reap qilish;
  • shutdown

ni to‘g‘ri boshqarishi kerak.

Shell wrapper signalni applicationga uzatmasa, container sekin yoki majburan yopiladi.

Immutability

Container image o‘zgarmas artifact sifatida deploy qilinadi.

Server ichida qo‘lda package o‘rnatish o‘rniga yangi image build qilinadi.

Bu repeatability va rollbackni yaxshilaydi.

Orchestration

Ko‘p container muhitida orchestrator:

ni boshqaradi.

Kubernetes mashhur misol.

Health check

Process ishlayotgan bo‘lsa ham application xizmat ko‘rsatmasligi mumkin.

Health check:

  • liveness;
  • readiness;
  • startup

holatlarini ajratishi mumkin.

Readiness false bo‘lsa traffic yuborilmaydi.

Container va VM

Jihat Container Virtual mashina
Kernel Host bilan umumiy Alohida guest kernel
Start Tez Sekinroq
Image Kichikroq Kattaroq
Isolation OS darajasida Hypervisor darajasida
Turli OS kernel Cheklangan Mumkin
Density Yuqori Kamroq

Container va VM birga ishlatilishi mumkin.

Xavfsizlik

Container host kernelini bo‘lishgani sababli kernel zaifligi muhim.

Himoya:

Privileged container hostga juda keng huquq beradi.

Supply chain

Image ichidagi dependencylar muntazam skan qilinadi.

Tagga ko‘r-ko‘rona ishonilmaydi.

SBOM package va versiyalar ro‘yxatini beradi.

Base image yangilanganda application qayta build qilinadi.

Diagnostika

Container ishlamasa:

tekshiriladi.

Container qayta-qayta restart qilsa, birinchi processning aniq exit sababini topish kerak.

Configuration va secret

Image barcha muhit uchun bir xil saqlanadi, environmentga xos configuration tashqaridan beriladi.

Manbalar:

Parol va private key image ichiga yozilmaydi. Registryga push qilingan eski layerdan secretni olib tashlash uchun image tarixini ham yangilash kerak.

Logging

Container lokal faylga cheksiz log yozsa, writable layer to‘lishi mumkin. Odatda application stdout va stderrga yozadi, runtime esa log driver orqali yig‘adi.

Log rotation, retention va central collector host darajasida boshqariladi.

Image qatlamlarini tozalash

Build vaqtida package cache va vaqtinchalik fayllar o‘sha layerning o‘zida o‘chiriladi. Keyingi layerda o‘chirish image hajmini to‘liq kamaytirmasligi mumkin.

Bog‘liq tushunchalar

Container, Image, Namespace, Cgroup, Docker, Volume, Registry, Kubernetes, PID 1, Virtualization