Docker nima? — konteyner, virtual mashinadan farqi

~12 daq · Docker · Kirish

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