Docker-a ehtiyacınız olduğunu, yoxsa VM-ə olduğunu necə başa düşmək olar? İzolyasiya etmək istədiyiniz şeyləri müəyyən etmək vacibdir. Əgər təmin edilmiş resurslarla və virtual hardvarda sistemin izolyasiyasını keçirmək lazımdırsa, seçiminiz VM olmalıdır. Əgər işləyən tətbiqləri sistemin ayrıca prosesləri kimi izolyasiya etmək lazımdırsa, Docker-a ehtiyacınız olacaq.
Docker konteynerlərinin VM-lərdən fərqi nədədir?
Virtual maşın (VM) bütün virtual cihazlar və virtual sərt disk ilə virtual bir kompüterdir. Yeni müstəqil OS ilə birlikdə virtual cihaz sürücüləri, yaddaş idarəsi və digər komponentlər quraşdırılır. Yəni, bir kompüterdə bir çox virtual kompüterlərin işləməsinə imkan verən fiziki avadanlığın abstraksiyasını əldə edirik.
Quraşdırılmış VM kompüterin diskində fərqli forma ala bilər:
- sabit diskdə sabit yer, bu da virtual sərt diskin daha sürətli erişimini təmin edir və faylın parçalanmasının qarşısını alır;
- dinamik yaddaş ayırması. Əlavə tətbiqlər quraşdırıldıqca, yerinə yetiriləcək maksimum həddinə çatana qədər yaddaş dinamik olaraq ayrılacaq.
Serverə daha çox virtual maşınlar yükləndikcə daha çox yer tuturlar və tətbiqinizin işləməsi üçün lazım olan mühitin davamlı dəstəyini tələb edirlər.
Docker Tətbiq yaratmaq üçün konteyner əsaslı bir proqramdır. Konteynerlər və virtual maşınlar əyani bənzər üstünlüklərə malikdir, lakin fərqli şəkildə işləyirlər. Konteynerlər daha az yer tuturlar, çünki VM-lərdən fərqli olaraq, OS səviyyəsində virtualizasiyanı təmin edir, fiziki avadanlığın yerinə. Bu yanaşma, daha az yaddaş tutumu, sürətli yayılma və daha asan ölçülmə imkanları təmin edir.
Konteynerlər, ev sahibi sistemin lazımi interfeyslərini təmin edərək tətbiqlərin inkapsulasiyası üçün daha səmərəli bir mexanizm təqdim edir. Bu imkan konteynerlərin sistemi nüvəsini bölməsinə imkan verir, burada hər bir konteyner əsas OS-in ayrıca prosesi kimi işləyir, özünün spesifik sahələrini (özü üçün virtual ünvan mərkəzini) saxlayır. Hər konteynerin virtual ünvan mərkəzi özəldir, buna görə də fərqli yaddaş sahələrinə aid məlumatlar dəyişdirilə bilmir.
Docker üçün yerli əməliyyat sistemi Linux-dur (Docker Windows və MacOS-da da istifadə oluna bilər), o, əsas üstünlüklərindən istifadə edir ki, bu da ona nüvəni ayırmaq imkanı verir. Windows-da Docker konteynerlərinin işə salınması Linux əməliyyat sistemi ilə virtual maşın içində baş verir, çünki konteynerlər ev sahibi sistemin əməliyyat sistemi ilə ayrılır və onlar üçün əsas əməliyyat sistemi Linux-dur.
Konteyner — bu necə işləyir?
Konteyner — kodu və asılılıqları birləşdirən tətbiq səviyyəsində bir abstraksiyadır. Konteynerlər həmişə imiclərdən yaradılır, yazılmaq üçün əlçatan üst təbəqə əlavə edilir və müxtəlif parametrlər başlatılır. Konteynerin öz yazma təbəqəsi olduğu üçün və bütün dəyişikliklər bu təbəqədə saxlandığına görə, bir neçə konteyner eyni əsas imicə birgə giriş imkanı yarada bilər.
Hər bir konteyner, əsas həll yolu — docker-compose.yml daxilində layihədəki fayl vasitəsilə konfiqurasiya edilə bilər. Orada konteynerin adı, limanlar, identifikatorlar, resurs limitləri, digər konteynerlərlə asılılıqlar kimi müxtəlif parametrlər təyin oluna bilər. Konfiqurasiyalarda konteynerin adı təyin edilmədikdə, Docker hər dəfə təsadüfi adla yeni konteyner yaradacaq.
Konteyner imicdən işə başladıqda, Docker alt təbəqələrdəki bütün yazma və oxuma sistemini üzərinə montaj edir. Burası, konteynerimizin yerinə yetirməsini istədiyimiz bütün proseslərin həyata keçiriləcəyi yerdir.
Docker konteyneri ilk dəfə işə saldıqda, başlanğıc yazma-oxuma təbəqəsi boşdur. Dəyişikliklər baş verdikdə, onlar bu təbəqəyə tətbiq olunur; məsələn, bir faylı dəyişmək istədiyinizdə, bu fayl aşağıdakı oxumaq üçün olan təbəqədən yazmaq üçün olan təbəqəyə kopyalanacaq.
Yalnız oxumaq üçün əlçatan fayl hələ də mövcuddur, lakin indi o, bir nüsxənin altında gizlidir. Konteynerin həyat dövründən asılı olmayaraq, məlumatların saxlanması üçün həcmlər istifadə olunur. Həcmlər konteyner yaradılarkən başlanğıc edilir.
İmic konteynerlə necə əlaqəlidir?
Şəkil — hər bir konteyner üçün əsas elementdir. İmic Dockerfile-dan yaradılır, layihəyə əlavə olunur və bir-birinin üzərində yığılan və birlikdə qruplaşan, yalnız oxumaq üçün əlçatan fayl sistemlərinin (təfəq) toplusunu təmsil edir; maksimum təbəqə sayı 127-dir.
Hər bir imicin əsasında FROM komandası ilə göstərilən əsas imic yer alır — Dockerfile imicinin yaradılmasında giriş nöqtəsidir. Hər bir təbəqə readonly təbəqədir və Dockerfile-da qeydə alınan fayl sistemini dəyişdirən bir komanda ilə təqdim olunur.
Bu təbəqələri bir imicdə birləşdirmək üçün Docker İleri çox qatlı Birləşmiş fayl sistemindən (AuFS UnionFS-in əsasında qurulmuşdur) istifadə edir, fərqli fayl və qovluqları müxtəlif fayl təbəqələrindən şəffaf şəkildə üst-üstə qoymağa imkan verir, əlaqəli fayl sistemi yaradır.
Təbəqələr, hər təbəqə ilə bağlı əlavə məlumatı saxlamağa imkan tanıyan metadata daxildir. Hər bir təbəqə, əgər təbəqənin bağlantısı yoxdursa, şəkilin üst təbəqəsi olduğunu göstərən növbəti təbəqəyə bir bağlantı ehtiva edir.
Dockerfile aşağıdakı əmrləri ehtiva edə bilər:
- FROM — şəkil yaradılarkən giriş nöqtəsi;
- MAINTAINER — şəklin sahibinin adı;
- RUN — şəkil yaradılarkən əmrin yerinə yetirilməsi;
- ADD — evdəki faylı yeni şəkilə kopyalayır, əgər URL faylı göstərilərsə, Docker onu müvafiq dizinə yükləyəcək;
- ENV — mühit dəyişənləri;
- CMD — şəkil əsasında yeni konteynerin yaradılmasını başlayır;
- ENTRYPOINT — konteyner işə salındığında yerinə yetirilən əmr.
- WORKDIR — CMD əmri icra ediləcək iş kataloqu.
- USER — şəkil əsasında yaradılan konteyner üçün UID təyin edir.
- VOLUME — evdəki dizini konteynere montaj edir.
- EXPOSE — konteynerdə dinlənən portların dəsti.
UnionFS necə işləyir?
UnionFS — Linux və FreeBSD üçün xidmət edən bir stəkli fayl sistemi (FS). Bu FS yazarkən kopyalama (Copy-On-Write, COW) mexanizmini həyata keçirir. UnionFS-in işləmə vahidi təbəqədir, hər təbəqəni ayrıca müstəqil fayl sistemi kimi, kök direktoriyası ilə ierarxiyası olan bir sistem kimi qiymətləndirmək lazımdır. UnionFS, digər fayl sistemləri üçün birləşdirilmiş montaj yaradır və istifadəçiyə müxtəlif fayl sistemlərinin (şaxələrin) fayl və direktoriyalarını şəffaf şəkildə bir müstəqil əlaqəli fayl sistemində birləşdirməyə imkan verir.
Eyni yolları olan direktoriyaların məzmunu birləşdirilmiş bir direktoriyada (bir müstəqil ad sahəsində) görünəcək.
UnionFS təbəqələri aşağıdakı prinsiplər əsasında birləşdirir:
- bir təbəqə üst təbəqəyə çevrilir, ikinci və sonrakılar isə alt təbəqələrdir;
- istifadəçiyə təbəqələrin obyektləri 'yuxarıdan aşağıya' təqdim olunur, yəni əgər tələb olunan obyekt 'üst' təbəqədə varsa, o geri qaytarılır, alt təbəqədə belə bir adla obyekt varsa belə yaxşıdır; əks halda 'alt' təbəqənin obyekti qaytarılır; əgər tələb olunan obyekt heç bir yerdə yoxdursa, 'Belə bir fayl və ya direktoriyamız yoxdur' səhvi qaytarılır;
- işçi təbəqə 'üst' təbəqədir, yəni istifadəçinin məlumat dəyişdirmə hərəkətləri yalnız üst təbəqədə əks olunur, alt təbəqələrin məzmununa təsir etmir.
Docker, tətbiq işlərində konteyner istifadəsinin ən geniş yayılmış texnologiyasıdır. O, Linux-un nüvəsi tərəfindən təmin edilən cgroups və ad sahələri əsasında bir standart olmuşdur.
Docker, bizə tətbiqləri tez bir zamanda yerləşdirmək və bütün konteynerlər arasında əməliyyat sisteminin nüvəsini bölüşməklə fayl sistemini maksimum dərəcədə səmərəli istifadə etməyə imkan verir, müstəqil əməliyyat sistemi prosesləri kimi fəaliyyət göstərir.
Mənbə: habr.com
