Docker

Docker nima? Konteynerlar

Tasavvur qiling: siz ilovangizni yozdingiz, o'z kompyuteringizda mukammal ishlaydi. Ammo uni hamkasbingizga yoki serverga jo'natsangiz โ€” ishlamaydi. Docker aynan shu muammoni hal qiladi: u ilovani barcha kerakli narsalari bilan birga konteyner ichiga o'raydi, shunda u har qanday joyda bir xil ishlaydi. Ushbu darsda Docker nima ekanini, konteyner va virtual mashina farqini hamda asosiy tushunchalarni chuqur o'rganamiz.

Docker โ€” bu JavaScript kutubxonasi emas, balki alohida vosita (dastur). Shu sababli bu bobdagi barcha misollar statik โ€” ular sahifada ishga tushmaydi. Ularni tushunib o'qing va o'z kompyuteringizdagi terminalda sinab ko'ring.

Muammo: 'mening kompyuterimda ishlaydi'

Dasturchilar orasida mashhur ibora bor: 'It works on my machine' โ€” ya'ni 'mening kompyuterimda ishlaydi'. Bu shunchaki hazil emas, balki real muammo. Nega bir xil kod bir joyda ishlab, boshqa joyda ishlamaydi?

Har bir kompyuter โ€” bu o'ziga xos, boshqacha sozlangan muhit. Ilovani yangi joyga ko'chirganda, uni yana qo'lda sozlash kerak bo'ladi. Bu vaqt oladi va xatolarga to'la.

Yechim: konteyner

Konteyner (container) โ€” bu ilova va uning ishlashi uchun zarur bo'lgan hamma narsa (kod, kutubxonalar, ishga tushirish muhiti, sozlamalar) birga o'ralgan yengil, izolyatsiyalangan paket. Konteyner o'z ichida to'liq muhitni olib yuradi.

Yuk tashish konteynerini tasavvur qiling: ichida nima borligidan qat'i nazar, u standart o'lchamda va har qanday kema, poyezd yoki yuk mashinasiga mos keladi. Docker konteyneri ham xuddi shunday โ€” ichidagi ilovadan qat'i nazar, u Docker o'rnatilgan har qanday kompyuterda bir xil ishlaydi.

Konteynerning asosiy g'oyasi: 'bir marta o'ra, hamma joyda ishga tushir'. Ilovani konteynerga o'raganingizdan so'ng, u sizning noutbukingizda ham, hamkasbingiznikida ham, bulutli serverda ham aynan bir xil xatti-harakat qiladi.

Virtual mashina va konteyner farqi

Ko'pchilik virtual mashina (VM) haqida eshitgan. VM ham izolyatsiyalangan muhit yaratadi, ammo u butunlay boshqa yondashuv. Farqni tushunish muhim.

Virtual mashina โ€” bu haqiqiy kompyuter ichida ishlaydigan to'liq boshqa kompyuter. Uning o'z operatsion tizimi (mehmon OS), o'z virtual xotirasi va disklari bor. Bir VM bir necha gigabayt joy egallaydi va yuklanishi bir necha daqiqa vaqt oladi.

Konteyner esa asosiy operatsion tizimning o'zagini (kernel) baham ko'radi. U alohida OS ko'tarib yurmaydi โ€” faqat ilova va uning bog'liqliklarini o'raydi. Shu sababli konteyner o'nlab megabaytdan iborat bo'lishi va soniyalarda ishga tushishi mumkin.

Konteyner VM'ni butunlay almashtirmaydi โ€” ular turli maqsadlar uchun. Amalda ko'pincha konteynerlar VM ichida ishlaydi (masalan, bulutli serverda). Ammo dasturchilar uchun kundalik ishda konteyner ancha yengil va qulay.

Image (obraz) va container (konteyner) farqi

Docker'da eng chalkash, ammo eng muhim tushunchalar โ€” image va container. Ular bir-biriga bog'liq, lekin bir xil narsa emas.

Image (obraz) โ€” bu shablon, ya'ni 'qolip'. U ilovaning muzlatilgan holati: kod, kutubxonalar va sozlamalarning o'zgarmas nusxasi. Image'ni disk fayl (masalan, dastur o'rnatuvchisi) deb tasavvur qiling โ€” u shunchaki turadi va o'zi ishlamaydi.

Container (konteyner) โ€” bu image'dan ishga tushirilgan tirik nusxa. Image'ni ishga tushirganingizda undan konteyner tug'iladi. Bitta image'dan bir nechta konteyner yaratish mumkin โ€” xuddi bitta o'rnatuvchi fayldan dasturni bir necha marta o'rnatgandek.

Osongina eslash uchun: image โ€” bu klass (class), container โ€” bu shu klassdan yaratilgan obyekt (instance). JavaScript'dagi class va new bilan yaratilgan obyektga o'xshaydi.

Docker Hub โ€” image'lar ombori

Docker Hub โ€” bu tayyor image'lar saqlanadigan ulkan onlayn ombor (registry). Bu xuddi npm (JavaScript kutubxonalari uchun) yoki App Store (ilovalar uchun) kabi. U yerda minglab tayyor image'lar bor.

Bu image'larni docker pull buyrug'i bilan yuklab olib, darhol ishlatishingiz mumkin. Ya'ni PostgreSQL ma'lumotlar bazasini o'rnatish uchun uni qo'lda sozlashingiz shart emas โ€” Docker Hub'dan tayyor image'ni olib, bitta buyruq bilan ishga tushirasiz.

Docker Hub manzili โ€” hub.docker.com. U yerdan image nomlarini qidirib topishingiz mumkin. Ko'pchilik image'lar bepul va ochiq.

Nega Docker foydali?

Endi Docker qanday amaliy foyda berishini umumlashtiraylik:

Ayniqsa veb-dasturlashda Docker keng qo'llaniladi: backend, ma'lumotlar bazasi, kesh va boshqa xizmatlar โ€” hammasi alohida konteynerlarda ishga tushiriladi va bir-biri bilan bog'lanadi.

Xulosa