Dockerni tushunish

Men veb-loyihalarni ishlab chiqish/etkazib berish jarayonini tuzish uchun bir necha oydan beri Docker-dan foydalanmoqdaman. Men Habraxabr o'quvchilariga docker haqidagi kirish maqolasining tarjimasini taklif qilaman - "Dockerni tushunish".

Docker nima?

Docker - bu ilovalarni ishlab chiqish, yetkazib berish va ishlatish uchun ochiq platforma. Docker ilovalaringizni tezroq yetkazib berish uchun mo'ljallangan. Docker yordamida siz ilovangizni infratuzilmangizdan ajratib olishingiz va infratuzilmani boshqariladigan ilova sifatida ko'rishingiz mumkin. Docker sizga kodingizni tezroq jo‘natish, tezroq sinovdan o‘tkazish, ilovalarni tezroq jo‘natish va kod yozish va ishga tushirish o‘rtasidagi vaqtni qisqartirishda yordam beradi. Docker buni ilovalaringizni boshqarish va yetkazib berishda yordam beradigan jarayonlar va yordamchi dasturlardan foydalangan holda engil konteyner virtualizatsiya platformasi orqali amalga oshiradi.

Asosan, docker sizga konteynerda xavfsiz tarzda ajratilgan deyarli har qanday dasturni ishga tushirishga imkon beradi. Xavfsiz izolyatsiya bir vaqtning o'zida bir xil xostda bir nechta konteynerlarni ishlatishga imkon beradi. Hipervisorning qo'shimcha yukisiz ishlaydigan konteynerning engil tabiati sizning uskunangizdan ko'proq foydalanish imkonini beradi.

Konteyner virtualizatsiya platformasi va vositalari quyidagi hollarda foydali bo'lishi mumkin:

  • ilovangizni (va siz foydalanadigan komponentlarni) docker konteynerlariga qadoqlash;
  • ushbu konteynerlarni ishlab chiqish va sinovdan o'tkazish uchun jamoalaringizga tarqatish va yetkazib berish;
  • ushbu konteynerlarni ishlab chiqarish maydonchalaringizga, ham ma'lumotlar markazlarida, ham bulutlarda joylashtirish.

Dockerdan nima uchun foydalanishim mumkin?

Ilovalaringizni tezda nashr eting

Docker rivojlanish tsiklini tashkil qilish uchun juda yaxshi. Docker ishlab chiquvchilarga ilovalar va xizmatlar bilan mahalliy konteynerlarni ishga tushirish imkonini beradi. Bu keyinchalik uzluksiz integratsiya va tarqatish ish jarayoni bilan integratsiya qilish imkonini beradi.

Misol uchun, ishlab chiquvchilaringiz mahalliy kod yozadilar va o'zlarining ishlab chiqish stekini (Docker tasvirlari to'plami) hamkasblari bilan baham ko'radilar. Ular tayyor bo'lgach, ular kod va konteynerlarni sinov joyiga surib, kerakli testlarni o'tkazadilar. Sinov maydonidan ular kod va tasvirlarni ishlab chiqarishga yuborishlari mumkin.

O'rnatish va ochish osonroq

Docker konteyneriga asoslangan platforma foydali yukingizni portlashni osonlashtiradi. Docker konteynerlari mahalliy kompyuteringizda, haqiqiy yoki virtual mashinada ma'lumotlar markazida yoki bulutda ishlashi mumkin.

Dockerning portativligi va engilligi sizning ish yukingizni dinamik ravishda boshqarishni osonlashtiradi. Ilova yoki xizmatlarni o'rnatish yoki o'chirish uchun docker dan foydalanishingiz mumkin. Docker tezligi buni real vaqtda amalga oshirishga imkon beradi.

Yuqori yuklar va ko'proq foydali yuklar

Docker engil va tezdir. U gipervisorga asoslangan virtual mashinalarga chidamli, tejamkor alternativani taqdim etadi. Bu, ayniqsa, yuqori yuklangan muhitlarda, masalan, o'z bulutingizni yoki xizmat sifatida platformani yaratishda foydalidir. Ammo sizda mavjud resurslardan ko'proq foydalanmoqchi bo'lsangiz, u kichik va o'rta ilovalar uchun ham foydalidir.

Dockerning asosiy komponentlari

Docker ikkita asosiy komponentdan iborat:

  • Docker: ochiq manbali virtualizatsiya platformasi;
  • Docker Hub: Docker konteynerlarini tarqatish va boshqarish uchun xizmat sifatidagi platformamiz.

Eslatma! Docker Apache 2.0 litsenziyasi ostida tarqatiladi.

Docker arxitekturasi

Docker mijoz-server arxitekturasidan foydalanadi. Docker mijozi sizning konteynerlaringizni yaratish, ishga tushirish va tarqatish yukini o'z zimmasiga olgan Docker demoni bilan bog'lanadi. Mijoz ham, server ham bir xil tizimda ishlashi mumkin, siz mijozni masofaviy docker demoniga ulashingiz mumkin. Mijoz va server rozetka yoki RESTful API orqali muloqot qiladi.

Dockerni tushunish

Docker demoni

Diagrammada ko'rsatilganidek, demon xost mashinasida ishlaydi. Foydalanuvchi server bilan bevosita muloqot qilmaydi, lekin buning uchun mijozdan foydalanadi.

Docker mijozi

Docker mijozi, docker dasturi, Docker uchun asosiy interfeysdir. U foydalanuvchidan buyruqlar oladi va docker demoni bilan o'zaro ishlaydi.

Docker ichida

Docker nimadan iboratligini tushunish uchun siz uchta komponent haqida bilishingiz kerak:

  • tasvirlar
  • ro'yxatga olish kitobi
  • konteynırlar

Rasmlar

Docker tasviri faqat o'qish uchun mo'ljallangan shablondir. Misol uchun, rasmda Apache bilan Ubuntu operatsion tizimi va undagi dastur bo'lishi mumkin. Tasvirlar konteyner yaratish uchun ishlatiladi. Docker yangi tasvirlarni yaratishni, mavjudlarini yangilashni osonlashtiradi yoki siz boshqa odamlar tomonidan yaratilgan rasmlarni yuklab olishingiz mumkin. Tasvirlar docker qurilishining tarkibiy qismlaridir.

Ro'yxatga olish

Docker registrida tasvirlar saqlanadi. Rasmlarni yuklab olishingiz yoki yuklashingiz mumkin bo'lgan davlat va xususiy registrlar mavjud. Ommaviy Docker registri Docker markazi. U erda saqlanadigan rasmlarning katta to'plami mavjud. Ma'lumki, tasvirlarni siz yaratishingiz mumkin yoki siz boshqalar tomonidan yaratilgan tasvirlardan foydalanishingiz mumkin. Registrlar tarqatish komponenti hisoblanadi.

Konteynerlar

Konteynerlar kataloglarga o'xshaydi. Konteynerlar ilovani ishga tushirish uchun kerak bo'lgan hamma narsani o'z ichiga oladi. Har bir konteyner rasmdan yaratilgan. Konteynerlarni yaratish, ishga tushirish, to'xtatish, ko'chirish yoki o'chirish mumkin. Har bir konteyner izolyatsiya qilingan va dastur uchun xavfsiz platformani ta'minlaydi. Konteynerlar ishning tarkibiy qismidir.

Xo'sh, Docker qanday ishlaydi?

Hozircha biz buni bilamiz:

  • biz ilovalarimiz joylashgan tasvirlarni yaratishimiz mumkin;
  • ilovalarni ishga tushirish uchun tasvirlardan konteynerlar yaratishimiz mumkin;
  • Biz tasvirlarni Docker Hub yoki boshqa tasvir registrlari orqali tarqatishimiz mumkin.

Keling, ushbu komponentlar bir-biriga qanday mos kelishini ko'rib chiqaylik.

Tasvir qanday ishlaydi?

Biz allaqachon bilamizki, rasm faqat o'qish uchun mo'ljallangan shablon bo'lib, undan konteyner yaratiladi. Har bir tasvir darajalar to'plamidan iborat. Docker foydalanadi ittifoq fayl tizimi bu darajalarni bitta tasvirga birlashtirish. Union fayl tizimi turli fayl tizimlari (turli filiallar)dagi fayllar va kataloglarni shaffof tarzda bir-biriga yopishib, izchil fayl tizimini yaratish imkonini beradi.

Dockerning engil bo'lishining sabablaridan biri bu kabi qatlamlardan foydalanishidir. Tasvirni o'zgartirganda, masalan, ilovani yangilashda yangi qatlam yaratiladi. Shunday qilib, butun tasvirni almashtirmasdan yoki uni qayta tiklamasdan, xuddi virtual mashina bilan bog'liq bo'lishi mumkin, faqat qatlam qo'shiladi yoki yangilanadi. Va siz butun yangi tasvirni tarqatishingiz shart emas, faqat yangilanish tarqatiladi, bu esa tasvirlarni tarqatishni oson va tezroq qiladi.

Har bir tasvirning markazida asosiy tasvir mavjud. Masalan, ubuntu, Ubuntu-ning asosiy tasviri yoki Fedora, Fedora tarqatilishining asosiy tasviri. Yangi tasvirlarni yaratish uchun asos sifatida tasvirlardan ham foydalanishingiz mumkin. Misol uchun, agar sizda apache tasviri bo'lsa, uni veb-ilovalaringiz uchun asosiy tasvir sifatida ishlatishingiz mumkin.

Eslatma! Docker odatda rasmlarni Docker Hub registridan oladi.

Ushbu asosiy tasvirlardan Docker tasvirlari yaratilishi mumkin; biz ushbu tasvirlarni yaratish uchun qadamlarni ko'rsatmalar deb ataymiz. Har bir ko'rsatma yangi tasvir yoki darajani yaratadi. Ko'rsatmalar quyidagicha bo'ladi:

  • ishga tushirish buyrug'i
  • fayl yoki katalog qo'shish
  • muhit o'zgaruvchisini yaratish
  • ushbu rasmning konteyneri ishga tushirilganda nima qilish kerakligi haqida ko'rsatmalar

Ushbu ko'rsatmalar faylda saqlanadi Dockerfile. Docker buni o'qiydi Dockerfile, tasvirni yaratganingizda, ushbu ko'rsatmalarni bajaradi va yakuniy tasvirni qaytaradi.

Docker registrlari qanday ishlaydi?

Ro'yxatga olish kitobi docker tasvirlari uchun ombordir. Tasvir yaratilgandan so'ng, uni umumiy Docker Hub reestriga yoki shaxsiy reestringizga nashr qilishingiz mumkin.

Docker mijozi yordamida siz allaqachon chop etilgan rasmlarni qidirishingiz va konteynerlar yaratish uchun ularni docker-mashinangizga yuklab olishingiz mumkin.

Docker Hub umumiy va shaxsiy tasvirlar omborini taqdim etadi. Ommaviy omborlardan rasmlarni qidirish va yuklab olish hamma uchun mavjud. Shaxsiy omborlar tarkibi qidiruv natijalariga kiritilmagan. Va faqat siz va sizning foydalanuvchilaringiz ushbu rasmlarni qabul qilishingiz va ulardan konteyner yaratishingiz mumkin.

Konteyner qanday ishlaydi?

Konteyner operatsion tizim, foydalanuvchi fayllari va metama'lumotlardan iborat. Ma'lumki, har bir konteyner tasvirdan yaratilgan. Ushbu rasm dockerga konteynerda nima borligini, qaysi jarayonni boshlash kerakligini, konteyner qachon ishga tushirilishini va boshqa konfiguratsiya ma'lumotlarini aytadi. Docker tasviri faqat o'qish uchun mo'ljallangan. Docker konteynerni ishga tushirganda, u rasmning tepasida o'qish/yozish qatlamini yaratadi (yuqorida aytib o'tilganidek, birlashma fayl tizimidan foydalangan holda), unda dastur ishga tushirilishi mumkin.

Konteyner ishga tushganda nima bo'ladi?

Yoki dastur yordamida docker, yoki RESTful API yordamida docker mijozi docker demoniga konteynerni ishga tushirishni aytadi.

$ sudo docker run -i -t ubuntu /bin/bash

Keling, ushbu buyruqni ko'rib chiqaylik. Buyruq yordamida mijoz ishga tushiriladi docker, variant bilan run, unda yangi konteyner ishga tushirilishi aytiladi. Konteynerni ishga tushirish uchun minimal talablar quyidagi atributlardir:

  • konteyner yaratish uchun qaysi rasmdan foydalanish kerak. Bizning holatda ubuntu
  • konteyner ishga tushirilganda ishlatmoqchi bo'lgan buyruq. Bizning holatda /bin/bash

Ushbu buyruqni bajarganimizda kaput ostida nima sodir bo'ladi?

Docker, tartibda quyidagilarni bajaradi:

  • ubuntu tasvirini yuklaydi: docker tasvir mavjudligini tekshiradi ubuntu mahalliy mashinada va agar u yo'q bo'lsa, uni yuklab oling Docker markazi. Agar rasm mavjud bo'lsa, uni konteyner yaratish uchun ishlatadi;
  • konteyner yaratadi: tasvir qabul qilinganda, docker undan konteyner yaratish uchun foydalanadi;
  • fayl tizimini ishga tushiradi va faqat o'qish darajasini o'rnatadi: konteyner fayl tizimida yaratiladi va tasvir faqat o'qish darajasiga qo'shiladi;
  • tarmoq/ko'prikni ishga tushiradi: dockerga xost-mashina bilan aloqa qilish imkonini beruvchi tarmoq interfeysini yaratadi;
  • IP manzilni sozlash: manzilni topadi va o'rnatadi;
  • Belgilangan jarayonni boshlaydi: ilovangizni ishga tushiradi;
  • Ilovangiz natijalarini qayta ishlaydi va ishlab chiqaradi: ilovangiz qanday ishlashini kuzatishingiz uchun ilovangizning standart kiritish, chiqish va xato oqimini ulaydi va qayd qiladi.

Endi sizda ishlaydigan konteyner bor. Siz konteyneringizni boshqarishingiz, ilovangiz bilan ishlashingiz mumkin. Ilovani to'xtatishga qaror qilganingizda, konteynerni o'chiring.

Foydalanilgan texnologiyalar

Docker Go-da yozilgan va yuqoridagi funksiyalarni amalga oshirish uchun Linux yadrosining ba'zi xususiyatlaridan foydalanadi.

Nom maydonlari

Docker texnologiyadan foydalanadi namespaces biz konteynerlar deb ataydigan izolyatsiyalangan ish joylarini tashkil qilish. Biz konteynerni ishga tushirganimizda, docker ushbu konteyner uchun nom bo'shliqlari to'plamini yaratadi.

Bu izolyatsiyalangan qatlamni yaratadi, konteynerning har bir tomoni o'z nom maydonida ishlaydi va tashqi tizimga kirish imkoniga ega emas.

Docker foydalanadigan ba'zi nomlar ro'yxati:

  • pid: jarayonni izolyatsiya qilish;
  • to'r: tarmoq interfeyslarini boshqarish uchun;
  • ipc: IPC resurslarini boshqarish uchun. (ICP: InterProccess Communication);
  • mnt: o'rnatish nuqtalarini boshqarish;
  • UTC: yadroni izolyatsiya qilish va versiya ishlab chiqarishni boshqarish (UTC: Unix timesharing tizimi).

Nazorat guruhlari

Docker ham texnologiyadan foydalanadi cgroups yoki nazorat guruhlari. Ilovani alohida ishga tushirishning kaliti dasturni faqat siz taqdim qilmoqchi bo'lgan resurslar bilan ta'minlashdir. Bu konteynerlarning yaxshi qo'shni bo'lishini ta'minlaydi. Boshqaruv guruhlari sizga mavjud apparat resurslarini almashish imkonini beradi va agar kerak bo'lsa, cheklovlar va cheklovlarni o'rnatadi. Masalan, konteyner uchun mumkin bo'lgan xotira hajmini cheklang.

Union fayl tizimi

Union File System yoki UnionFS - bu qatlamlar yaratish orqali ishlaydigan fayl tizimi bo'lib, uni juda engil va tez qiladi. Docker konteyner qurilgan bloklarni yaratish uchun UnionFS-dan foydalanadi. Docker UnionFS ning bir nechta variantlaridan foydalanishi mumkin, jumladan: AUFS, btrfs, vfs va DeviceMapper.

Konteyner formatlari

Docker ushbu komponentlarni biz konteyner formati deb ataydigan paketga birlashtiradi. Standart format chaqiriladi libcontainer. Docker Linuxda an'anaviy konteyner formatini ham qo'llab-quvvatlaydi LXC. Kelajakda Docker boshqa konteyner formatlarini qo'llab-quvvatlashi mumkin. Masalan, BSD Jails yoki Solaris Zones bilan integratsiya.

Manba: www.habr.com

a Izoh qo'shish