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.
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.
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.
- repository;
- tag;
- digest;
- authentication;
- access control;
- vulnerability scanning;
- retention
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:
- scheduling;
- restart;
- service discovery;
- load balancing;
- secret;
- config;
- health check;
- rollout;
- scaling
ni boshqaradi.
Kubernetes mashhur misol.
Health check
Process ishlayotgan bo‘lsa ham application xizmat ko‘rsatmasligi mumkin.
- 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:
- root bo‘lmagan user;
- minimal image;
- capability drop;
- read-only filesystem;
- seccomp;
- AppArmor yoki SELinux;
- image signature;
- secret management;
- network policy;
- patch.
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:
- image;
- entrypoint;
- environment;
- log;
- exit code;
- volume permission;
- port;
- network;
- DNS;
- cgroup limit;
- OOM;
- health check
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:
- environment variable;
- mounted config file;
- orchestrator ConfigMap;
- secret store;
- command-line argument.
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