Docker nima? — konteyner, virtual mashinadan farqi
Muammodan boshlaylik
Siz Node.js loyihasini yozdingiz. Kompyuteringizda hammasi ishlaydi. Hamkasbingizga berdingiz:
- U Node.js 18 da, siz 22 da — bitta kutubxona o'rnatilmayapti
- Unda MySQL 5.7, sizda 8.4 — bitta so'rov xato beradi
- U Windows da, server — Linux da — fayl yo'llari boshqacha
Serverga chiqarganda — yana yangi muammolar. Va mashhur ibora tug'iladi:
"Mening kompyuterimda ishlaydi-ku!"
Docker — ilovani uning butun muhiti bilan birga qadoqlash: kerakli OS kutubxonalari, til versiyasi, paketlar, sozlamalar. Bu "quti" istalgan kompyuterda — sizda, hamkasbingizda, serverda — aynan bir xil ishlaydi.
Konteyner — yuk konteyneri o'xshatmasi
1950-yillargacha kemalarga yuk qo'lda ortilardi: qoplar, bochkalar, qutilar — har biri o'z shaklida. Har bir portda qaytadan yuklash. Sekin, qimmat, mol buziladi.
Keyin standart konteyner paydo bo'ldi: ichida nima bo'lishidan qat'i nazar — tashqi o'lchami bir xil. Kema, poyezd, yuk mashinasi — hammasi uni bir xil ko'taradi.
Docker — dasturlar uchun shu g'oya:
Ichida: Node.js 22 + sizning kodingiz + npm paketlar + sozlamalar
Tashqarida: standart "Docker konteyneri"
→ Docker o'rnatilgan istalgan kompyuterda bir xil ishlaydi
Asosiy tushunchalar
| Tushuncha | Ma'nosi | O'xshatma |
|---|---|---|
| Image | Ilova va uning muhitining o'zgarmas shabloni | Chizma |
| Konteyner | Image dan ishga tushirilgan jonli nusxa | Chizma bo'yicha qurilgan uy |
| Dockerfile | Image ni qanday yasashni aytuvchi fayl | Qurilish yo'riqnomasi |
| Registry | Image lar ombori (Docker Hub) | Chizmalar arxivi |
Bitta image dan o'nlab konteyner ishga tushirish mumkin — xuddi bitta chizmadan ko'p uy qurish kabi.
docker run nginx
Bitta buyruq — va kompyuteringizda to'liq sozlangan veb-server ishlayapti. Nginx ni o'rnatmadingiz, sozlamadingiz.
Virtual mashinadan farqi
Muhitni ajratishning eski yo'li — virtual mashina (VirtualBox, VMware): kompyuter ichida butun boshqa kompyuter, o'z operatsion tizimi bilan.
VIRTUAL MASHINALAR KONTEYNERLAR
┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐
│ Ilova │ │ Ilova │ │ Ilova │ │ Ilova │ │ Ilova │ │ Ilova │
│ Kutub.│ │ Kutub.│ │ Kutub.│ │ Kutub.│ │ Kutub.│ │ Kutub.│
│ To'liq│ │ To'liq│ │ To'liq│ └───────┘ └───────┘ └───────┘
│ OS │ │ OS │ │ OS │ ┌───────────────────────────┐
└───────┘ └───────┘ └───────┘ │ Docker Engine │
┌───────────────────────────┐ ├───────────────────────────┤
│ Hypervisor │ │ Host OS (bitta yadro) │
├───────────────────────────┤ ├───────────────────────────┤
│ Host OS + apparat │ │ Apparat │
└───────────────────────────┘ └───────────────────────────┘
| Virtual mashina | Konteyner | |
|---|---|---|
| OS | Har birida to'liq OS | Host ning yadrosini bo'lishadi |
| Hajm | Gigabaytlar | Megabaytlar |
| Ishga tushish | Daqiqalar | Soniyalar |
| Bitta serverda | Bir necha o'nta | Yuzlab |
| Izolyatsiya | Juda kuchli | Kuchli (lekin yadro umumiy) |
Konteyner — "yengil" izolyatsiya: alohida fayl tizimi, jarayonlar, tarmoq — lekin OS yadrosi umumiy. Shuning uchun tez va arzon.
Docker nima beradi
Dasturchiga:
- Yangi loyihani boshlash —
docker compose up, uzun "o'rnatish yo'riqnomasi" emas - Bir vaqtda MySQL 5.7 va 8.4, Node 18 va 22 — to'qnashuvsiz
- Kompyuterni "iflos" qilmaslik — konteynerni o'chirdingiz, iz qolmadi
Jamoaga:
- Hamma — aynan bir xil muhitda
- Yangi dasturchi birinchi kunidanoq ishlay boshlaydi
Serverga:
- Ishlab chiqishdagi image — serverdagi image: kutilmagan farqlar yo'q
- Yangilash — yangi image; muammo bo'lsa — eskisiga bir zumda qaytish
- Ko'paytirish — bir xil konteynerdan 10 ta
Bugun deyarli barcha bulut platformalari (AWS, Google Cloud, Railway, Render, Fly.io) konteynerlar bilan ishlaydi. Docker — zamonaviy backend va DevOps ning asosiy ko'nikmasi.
Docker nima emas
- Xavfsizlik devori emas — konteyner ichidagi zaif ilova baribir zaif
- Virtual mashina o'rnini to'liq bosmaydi — boshqa OS yadrosi kerak bo'lsa (Linux serverda Windows ilova) — VM
- Backup emas — konteyner o'chirilsa, ichidagi ma'lumot yo'qoladi, agar volume ishlatilmasa (19-dars)
Nima uchun shunday?
Nima uchun konteyner g'oyasi aynan 2013-yilda Docker bilan ommalashdi, agar Linux da izolyatsiya vositalari (cgroups, namespaces) avvaldan bor edi?
Chunki vositalar bor edi, lekin ular murakkab edi: ularni ishlatish uchun Linux yadrosini chuqur bilish kerak edi. Docker ularni oddiy buyruqlar (docker run), oddiy fayl (Dockerfile) va ulashish tizimi (Docker Hub) ga o'radi. Texnologiya yangi emas edi — yangi narsa qulaylik edi. Kuchli vosita hamma uchun oddiy bo'lgandagina inqilob qiladi.
Xulosa
Eslab qoling:
- Docker — ilovani butun muhiti bilan qadoqlash; hamma joyda bir xil ishlaydi
- Image — o'zgarmas shablon; konteyner — undan ishga tushirilgan nusxa
- Dockerfile — image retsepti; registry — image lar ombori
- Konteyner VM dan yengil: umumiy yadro, megabaytlar, soniyalar
- Konteyner xavfsizlik devori ham, backup ham emas
Keyingi dars
2-dars: O'rnatish — Docker Desktop, Linux, WSL 2