VM yoki Docker?

Sizga VM emas, balki Docker kerakligini qanday tushunish mumkin? Siz aniq nimani ajratib olishni xohlayotganingizni aniqlashingiz kerak. Agar siz tizimni kafolatlangan resurslar va virtual uskuna bilan izolyatsiya qilmoqchi bo'lsangiz, u holda tanlov VMga to'g'ri kelishi kerak. Agar ishlayotgan ilovalarni alohida tizim jarayonlari sifatida ajratish kerak bo'lsa, sizga Docker kerak bo'ladi.

Xo'sh, Docker konteynerlari va VMlar o'rtasidagi farq nima?

Virtual mashina (VM) barcha virtual qurilmalar va virtual qattiq diskdan iborat virtual kompyuter boβ€˜lib, unda virtual qurilma drayverlari, xotira boshqaruvi va boshqa komponentlar bilan birga yangi mustaqil OT oβ€˜rnatilgan. Ya'ni, biz bir kompyuterda ko'plab virtual kompyuterlarni ishga tushirishga imkon beruvchi jismoniy apparatning abstraktsiyasini olamiz.
O'rnatilgan VM diskdagi joyni turli yo'llar bilan egallashi mumkin:

  • qattiq diskdagi qattiq disk maydoni, bu virtual qattiq diskka tezroq kirish imkonini beradi va fayllarning parchalanishini oldini oladi;
  • dinamik xotirani taqsimlash. Qo'shimcha ilovalarni o'rnatishda xotira ular uchun ajratilgan maksimal miqdorga yetguncha dinamik ravishda ajratiladi.

Serverda qancha ko'p virtual mashinalar bo'lsa, ular shunchalik ko'p joy egallaydi va ilovangiz ishlashi uchun zarur bo'lgan muhitning doimiy qo'llab-quvvatlanishini talab qiladi.

Docker konteynerlar asosida ilovalar yaratish uchun dastur hisoblanadi. Konteynerlar va virtual mashinalar o'xshash afzalliklarga ega, ammo ular boshqacha ishlaydi. Konteynerlar kamroq joy egallaydi, chunki VM ga qaraganda xost tizimining ko'proq umumiy resurslaridan ortiqcha foydalanish, chunki VM dan farqli o'laroq, apparat emas, balki OS darajasida virtualizatsiyani ta'minlaydi. Ushbu yondashuv kamroq xotira maydoni, tezroq joylashtirish va oson masshtablashni ta'minlaydi.

Konteyner xost tizimiga kerakli interfeyslarni taqdim etish orqali ilovalarni kapsulalash uchun yanada samarali mexanizmni taqdim etadi. Bu xususiyat konteynerlarga tizimning yadrosini almashish imkonini beradi, bu erda konteynerlarning har biri o'ziga xos xotira maydonlariga (o'z virtual manzil maydoni) ega bo'lgan asosiy OT ning alohida jarayoni sifatida ishlaydi. Har bir konteynerning virtual manzil maydoni o'ziga xos bo'lgani uchun turli xil xotira sohalariga tegishli ma'lumotlarni o'zgartirib bo'lmaydi.
Docker uchun mahalliy OS Linux hisoblanadi (Docker Windows va MacOS da ham qo'llanilishi mumkin), u o'zining asosiy afzalliklaridan foydalanadi, bu esa bo'lingan yadroni tashkil qilish imkonini beradi. Windows-da Docker konteynerlarini ishga tushirish Linux virtual mashinasi ichida amalga oshiriladi. konteynerlar xost tizimining operatsion tizimini baham ko'radi va ular uchun asosiy OS Linux hisoblanadi.

Konteyner - u qanday ishlaydi?

Konteyner kod va bog'liqliklarni birlashtirgan dastur darajasidagi abstraksiyadir. Konteynerlar har doim tasvirlardan yaratiladi, yoziladigan yuqori qatlam qo'shiladi va turli parametrlarni ishga tushiradi. Konteyner o'zining yozish qatlamiga ega bo'lgani uchun va barcha o'zgarishlar shu qatlamda saqlanganligi sababli, bir nechta konteynerlar bir xil asosiy tasvirga kirishni baham ko'rishlari mumkin.

Har bir konteyner asosiy yechimga kiritilgan docker-compose loyihasidagi fayl orqali sozlanishi mumkin, docker-compose.yml. U erda siz konteyner nomi, portlar, identifikatorlar, resurslar chegaralari, boshqa konteynerlar orasidagi bog'liqliklar kabi turli parametrlarni o'rnatishingiz mumkin. Agar sozlamalarda konteyner nomini belgilamasangiz, Docker har safar yangi konteyner yaratadi va unga tasodifiy nom beradi.

Tasvirdan konteyner ishga tushirilganda, Docker o'qish/yozish fayl tizimini quyidagi qatlamlar ustiga o'rnatadi. Bu erda biz Docker konteynerimiz ishlashini xohlagan barcha jarayonlar ishlaydi.

Docker birinchi marta konteynerni ishga tushirganda, dastlabki o'qish/yozish qatlami bo'sh bo'ladi. O'zgarishlar sodir bo'lganda, ular ushbu qatlamga qo'llaniladi; masalan, agar siz faylni o'zgartirmoqchi bo'lsangiz, u fayl quyida joylashgan faqat o'qish qatlamidan o'qish-yozish qatlamiga ko'chiriladi.
Faylning faqat o'qish uchun mo'ljallangan versiyasi hali ham mavjud bo'ladi, lekin hozir nusxa ostida yashiringan. Hajmlar konteynerning hayot aylanishidan qat'i nazar, ma'lumotlarni saqlash uchun ishlatiladi. Konteyner yaratilganda hajmlar ishga tushiriladi.

Tasvir konteyner bilan qanday bog'langan?

Rasm - har bir konteyner uchun asosiy element. Tasvir loyihaga qo'shilgan Dockerfile faylidan yaratilgan va bir-birining ustiga qatlamlangan va birga guruhlangan fayl tizimlari (qatlamlari) to'plamidir, faqat o'qish uchun mavjud; qatlamlarning maksimal soni - 127.

Har bir tasvirning markazida FROM buyrug'i bilan belgilanadigan asosiy tasvir - Dockerfile tasvirini yaratishda kirish nuqtasi joylashgan. Har bir qatlam faqat o'qiladigan qatlam bo'lib, Dockerfile faylida yozilgan fayl tizimini o'zgartiruvchi bitta buyruq bilan ifodalanadi.
Ushbu qatlamlarni bitta rasmga birlashtirish uchun Docker Kengaytirilgan ko'p qatlamli Union fayl tizimidan foydalanadi (AuFS UnionFS ustiga qurilgan), turli fayl qatlamlaridagi turli fayllar va kataloglarni shaffof tarzda bir-biriga yopishib, bog'langan fayl tizimini yaratishga imkon beradi.

Qatlamlar har bir qatlam haqida tegishli ma'lumotlarni ishlash va qurish vaqtida saqlash imkonini beruvchi metama'lumotlarni o'z ichiga oladi. Har bir qatlam keyingi qatlamga havolani o'z ichiga oladi, agar qatlamda havola bo'lmasa, bu rasmning eng yuqori qatlamidir.

Dockerfile quyidagi kabi buyruqlarni o'z ichiga olishi mumkin:

  • FROM - tasvirni shakllantirishdagi kirish nuqtasi;
  • MAINTAINER - tasvir egasining ismi;
  • RUN - tasvirni yig'ish paytida buyruqni bajarish;
  • ADD - xost faylini yangi rasmga nusxalash, agar URL faylni ko'rsatsangiz, Docker uni belgilangan katalogga yuklab oladi;
  • ENV - muhit o'zgaruvchilari;
  • CMD - tasvir asosida yangi konteyner yaratishni boshlaydi;
  • ENTRYPOINT - konteyner ishga tushirilganda buyruq bajariladi.
  • WORKDIR - bu CMD buyrug'ini bajarish uchun ishchi katalog.
  • USER - Tasvirdan yaratilgan konteyner uchun UIDni o'rnatadi.
  • VOLUME - xost katalogini konteynerga o'rnatadi.
  • EXPOSE - bu konteynerda tinglanadigan portlar to'plami.

UnionFS qanday ishlaydi?

UnionFS β€” Linux va FreeBSD uchun xizmat stek fayl tizimi (FS). Ushbu FS yozishda nusxa ko'chirish (Copy-On-Write, COW) mexanizmini amalga oshiradi. UnionFS ning ishchi birligi qatlam bo'lib, har bir qatlam ildizning o'zidan katalog ierarxiyasiga ega bo'lgan alohida to'liq huquqli fayl tizimi sifatida ko'rib chiqilishi kerak. UnionFS boshqa fayl tizimlari uchun birlashma moslamasini yaratadi va sizga turli xil fayl tizimlaridan (tarmoqlar deb ataladigan) fayllar va kataloglarni foydalanuvchi uchun shaffof tarzda bitta bog'langan fayl tizimiga birlashtirish imkonini beradi.

Xuddi shu yo'llarga ega bo'lgan kataloglarning mazmuni hosil bo'lgan fayl tizimining bitta birlashtirilgan katalogida (bir xil nomlar maydonida) birga ko'rsatiladi.

UnionFS qatlamlarni quyidagi tamoyillar asosida birlashtiradi:

  • qatlamlardan biri yuqori darajali qatlamga aylanadi, ikkinchi va keyingi qatlamlar quyi darajadagi qatlamlarga aylanadi;
  • qatlam ob'ektlari foydalanuvchi uchun "yuqoridan pastga", ya'ni. agar so'ralgan ob'ekt "yuqori" qatlamda bo'lsa, "pastki" qatlamda bir xil nomdagi ob'ekt mavjudligidan qat'i nazar, qaytariladi; aks holda, "pastki" qatlam ob'ekti qaytariladi; agar so'ralgan ob'ekt u erda ham, u erda ham bo'lmasa, "Bunday fayl yoki katalog yo'q" xatosi qaytariladi;
  • ishchi qatlam "yuqori" hisoblanadi, ya'ni foydalanuvchining ma'lumotlarni o'zgartirish bo'yicha barcha harakatlari quyi darajadagi qatlamlar tarkibiga ta'sir qilmasdan faqat yuqori darajadagi qatlamda aks etadi.

Docker - amaliy ishlarda konteynerlardan foydalanishning eng keng tarqalgan texnologiyasi. Bu Linux yadrosi tomonidan taqdim etilgan guruhlar va nomlar maydoniga asoslanib, ushbu sohada standartga aylandi.

Docker bizga OS yadrosini alohida OS jarayonlari sifatida ishlaydigan barcha konteynerlar o'rtasida almashish orqali ilovalarni tezda joylashtirish va fayl tizimidan eng yaxshi foydalanish imkonini beradi.

Manba: www.habr.com

a Izoh qo'shish