VM və ya Docker?

VM deyil, Dockerə ehtiyacınız olduğunu necə başa düşmək olar? Tam olaraq nəyi təcrid etmək istədiyinizi müəyyənləşdirməlisiniz. Zəmanətli resurslar və virtual avadanlıqla sistemi təcrid etmək istəyirsinizsə, seçim VM-nin üzərinə düşməlidir. Çalışan proqramları ayrıca sistem prosesləri kimi təcrid etmək lazımdırsa, sizə Docker lazımdır.

Beləliklə, Docker konteynerləri ilə VM-lər arasındakı fərq nədir?

Virtual maşın (VM) virtual qurğu drayverləri, yaddaşın idarə edilməsi və digər komponentlərlə birlikdə yeni müstəqil ƏS-nin quraşdırıldığı bütün virtual qurğulara və virtual sabit diskə malik virtual kompüterdir. Yəni, bir kompüterdə çoxlu virtual kompüterləri işlətməyə imkan verən fiziki avadanlıqların abstraksiyasını əldə edirik.
Quraşdırılmış VM müxtəlif yollarla disk yerini tuta bilər:

  • virtual sabit diskə daha sürətli daxil olmağa imkan verən və faylın parçalanmasının qarşısını alan sabit disk sahəsi;
  • dinamik yaddaş bölgüsü. Əlavə proqramlar quraşdırarkən yaddaş ona ayrılan maksimum məbləğə çatana qədər onlar üçün dinamik olaraq ayrılacaq.

Serverdə nə qədər çox virtual maşın varsa, onlar bir o qədər çox yer tutur və həmçinin tətbiqinizin işləməsi üçün tələb olunan mühitin daimi dəstəyini tələb edir.

yükvuran konteynerlərə əsaslanan proqramlar yaratmaq üçün proqramdır. Konteynerlər və virtual maşınlar oxşar üstünlüklərə malikdir, lakin fərqli işləyirlər. Konteynerlər daha az yer tutur, çünki VM-dən daha çox host sisteminin paylaşılan resurslarından həddindən artıq istifadə edin, çünki VM-dən fərqli olaraq, hardware deyil, OS səviyyəsində virtuallaşdırma təmin edir. Bu yanaşma daha az yaddaş yeri, daha sürətli yerləşdirmə və asan miqyaslama təmin edir.

Konteyner, host sisteminə lazımi interfeysləri təmin etməklə tətbiqləri əhatə etmək üçün daha səmərəli mexanizm təqdim edir. Bu xüsusiyyət konteynerlərə sistemin əsas hissəsini paylaşmağa imkan verir, burada konteynerlərin hər biri öz yaddaş sahələri dəsti (öz virtual ünvan sahəsi) olan əsas ƏS-nin ayrıca prosesi kimi işləyir. Hər bir konteynerin virtual ünvan məkanı özünə məxsus olduğu üçün müxtəlif yaddaş sahələrinə aid verilənlər dəyişdirilə bilməz.
Docker üçün yerli OS Linux-dur (Docker Windows və MacOS-da da istifadə edilə bilər), o, bölünmüş nüvəni təşkil etməyə imkan verən əsas üstünlüklərindən istifadə edir. Windows-da Docker konteynerlərinin işə salınması Linux virtual maşınının içərisində baş tutacaq. konteynerlər host sisteminin ƏS-ni paylaşır və onlar üçün əsas ƏS Linux-dur.

Konteyner - bu necə işləyir?

Konteyner kodu və asılılıqları birləşdirən tətbiq səviyyəsində abstraksiyadır. Konteynerlər həmişə şəkillərdən yaradılır, yazıla bilən üst qat əlavə edilir və müxtəlif parametrləri işə salır. Konteynerin öz yazma təbəqəsi olduğundan və bütün dəyişikliklər həmin təbəqədə saxlandığından, birdən çox konteyner eyni əsas təsvirə girişi paylaşa bilər.

Hər bir konteyner docker-compose.yml əsas həllinə daxil olan docker-compose layihəsindəki fayl vasitəsilə konfiqurasiya edilə bilər. Orada siz konteyner adı, portlar, identifikatorlar, resurs limitləri, digər konteynerlər arasında asılılıqlar kimi müxtəlif parametrləri təyin edə bilərsiniz. Parametrlərdə konteyner adını göstərməsəniz, Docker hər dəfə ona təsadüfi ad təyin edərək yeni konteyner yaradacaq.

Konteyner bir şəkildən işə salındıqda, Docker oxumaq/yazmaq fayl sistemini aşağıdakı təbəqələrin üzərinə quraşdırır. Docker konteynerimizin işləməsini istədiyimiz bütün proseslər burada işləyəcək.

Docker konteyneri ilk dəfə işə saldıqda, ilkin oxumaq/yazmaq təbəqəsi boşdur. Dəyişikliklər baş verdikdə, onlar həmin təbəqəyə tətbiq olunur; məsələn, faylı dəyişdirmək istəyirsinizsə, o fayl aşağıdakı yalnız oxumaq üçün olan təbəqədən oxumaq-yazmaq qatına kopyalanacaq.
Faylın yalnız oxuna bilən versiyası hələ də mövcud olacaq, lakin indi surətin altında gizlənib. Həcmlər konteynerin həyat dövründən asılı olmayaraq məlumatları saxlamaq üçün istifadə olunur. Konteyner yaradıldıqda həcmlər işə salınır.

Şəkil konteynerlə necə əlaqələndirilir?

Şəkil - hər bir konteyner üçün əsas element. Şəkil layihəyə əlavə edilmiş Dockerfile-dən yaradılmışdır və bir-birinin üstündə laylı və birlikdə qruplaşdırılmış fayl sistemləri (qatları) dəstidir, yalnız oxumaq üçün mövcuddur; qatların maksimum sayı 127-dir.

Hər bir təsvirin mərkəzində FROM əmri ilə təyin olunan əsas təsvir - Dockerfile şəklini yaradan giriş nöqtəsi yerləşir. Hər bir təbəqə yalnız oxunan təbəqədir və Dockerfile-də yazılmış fayl sistemini dəyişdirən bir əmrlə təmsil olunur.
Bu təbəqələri vahid təsvirdə birləşdirmək üçün Docker Qabaqcıl çoxqatlı Birlik fayl sistemindən istifadə edir (AuFS UnionFS-in üzərində qurulub), müxtəlif fayl təbəqələrindən olan müxtəlif fayl və qovluqların şəffaf şəkildə üst-üstə düşməsinə imkan verir və əlaqəli fayl sistemi yaradır.

Qatlarda hər bir təbəqə haqqında müvafiq məlumatı iş vaxtı və qurma vaxtı saxlamağa imkan verən metadata var. Hər bir təbəqədə növbəti təbəqəyə keçid var, əgər qatın heç bir əlaqəsi yoxdursa, bu, təsvirin ən yuxarı təbəqəsidir.

Dockerfile aşağıdakı kimi əmrləri ehtiva edə bilər:

  • FROM - təsvirin formalaşmasında giriş nöqtəsi;
  • MAINTAINER - təsvirin sahibinin adı;
  • RUN - təsvirin yığılması zamanı əmrin icrası;
  • ADD - host faylının yeni bir şəkilə kopyalanması, əgər URL faylını göstərsəniz, Docker onu göstərilən qovluğa endirəcək;
  • ENV - mühit dəyişənləri;
  • CMD - təsvir əsasında yeni konteynerin yaradılmasına başlayır;
  • ENTRYPOINT - Konteyner işə salındıqda əmr yerinə yetirilir.
  • WORKDIR CMD əmrini yerinə yetirmək üçün işləyən qovluqdur.
  • USER - Şəkildən yaradılmış konteyner üçün UID təyin edir.
  • VOLUME - host kataloqunu konteynerə quraşdırır.
  • EXPOSE konteynerdə dinlənilən portlar toplusudur.

UnionFS necə işləyir?

UnionFS — Linux və FreeBSD üçün xidmət yığını fayl sistemi (FS). Bu FS yazmaq üzrə kopyalama (Copy-On-Write, COW) mexanizmini həyata keçirir. UnionFS-in iş vahidi bir təbəqədir, hər bir təbəqə kökün özündən kataloq iyerarxiyası olan ayrıca tam hüquqlu fayl sistemi kimi qəbul edilməlidir. UnionFS digər fayl sistemləri üçün birlik bağlayıcısı yaradır və sizə şəffaf şəkildə müxtəlif fayl sistemlərindən (budaqlar adlanır) faylları və qovluqları istifadəçi üçün şəffaf şəkildə vahid əlaqəli fayl sisteminə birləşdirməyə imkan verir.

Eyni yolları olan qovluqların məzmunu nəticədə yaranan fayl sisteminin bir birləşdirilmiş kataloqunda (eyni ad məkanında) birlikdə göstəriləcəkdir.

UnionFS aşağıdakı prinsiplərə əsaslanaraq təbəqələri birləşdirir:

  • təbəqələrdən biri yuxarı səviyyəli təbəqəyə, ikinci və sonrakı təbəqələr aşağı səviyyəli təbəqələrə çevrilir;
  • təbəqə obyektləri istifadəçi üçün “yuxarıdan aşağıya”, yəni. tələb olunan obyekt “yuxarı” təbəqədədirsə, “aşağı” təbəqədə eyni adlı obyektin olmasından asılı olmayaraq, o, qaytarılır; əks halda, "alt" təbəqə obyekti qaytarılır; tələb olunan obyekt nə orada, nə də oradadırsa, "Belə fayl və ya kataloq yoxdur" xətası qaytarılır;
  • işçi təbəqə "yuxarı"dır, yəni məlumatları dəyişdirmək üçün istifadəçinin bütün hərəkətləri aşağı səviyyəli təbəqələrin məzmununa təsir etmədən yalnız yuxarı səviyyəli təbəqədə əks olunur.

Docker proqram işində konteynerlərdən istifadə üçün ən çox yayılmış texnologiyadır. Linux nüvəsi tərəfindən təmin edilən qruplar və ad boşluqları üzərində qurularaq bu sahədə standart halına gəldi.

Docker bizə proqramları tez bir zamanda yerləşdirməyə və OS nüvəsini ayrı-ayrı OS prosesləri kimi işləyən bütün konteynerlər arasında paylaşaraq fayl sistemindən ən yaxşı şəkildə istifadə etməyə imkan verir.

Mənbə: www.habr.com

Добавить комментарий