Docker-i başa düşmək

Artıq bir neçə aydır ki, mən veb layihələrin işlənib hazırlanması/çatdırılma prosesini strukturlaşdırmaq üçün Docker-dən istifadə edirəm. Habrakhabr oxucularına docker haqqında giriş məqaləsinin tərcüməsini təklif edirəm - "Dokeri başa düşmək".

docker nədir?

Docker proqramların hazırlanması, çatdırılması və istismarı üçün açıq platformadır. Docker proqramlarınızı daha sürətli çatdırmaq üçün nəzərdə tutulmuşdur. Docker ilə siz tətbiqinizi infrastrukturunuzdan ayıra və infrastrukturu idarə olunan proqram kimi qəbul edə bilərsiniz. Docker kodunuzu daha sürətli göndərməyə, daha sürətli sınaqdan keçirməyə, tətbiqləri daha sürətli göndərməyə və kodun yazılması ilə işləyən kodun müddətini azaltmağa kömək edir. Docker bunu tətbiqlərinizi idarə etməyə və yerləşdirməyə kömək edən proseslər və yardım proqramlarından istifadə edərək yüngül konteyner virtuallaşdırma platforması vasitəsilə edir.

Əsasən, docker konteynerdə təhlükəsiz şəkildə təcrid olunmuş demək olar ki, hər hansı bir proqramı işə salmağa imkan verir. Təhlükəsiz izolyasiya eyni anda bir çox konteyneri eyni hostda işlətməyə imkan verir. Hipervisorun əlavə yükü olmadan işləyən konteynerin yüngül çəkisi sizə aparatınızdan daha çox yararlanmağa imkan verir.

Konteyner virtuallaşdırma platforması və alətləri aşağıdakı hallarda faydalı ola bilər:

  • tətbiqinizi (və istifadə etdiyiniz komponentləri) docker konteynerlərinə qablaşdırmaq;
  • inkişaf və sınaq üçün bu konteynerlərin paylanması və komandalarınıza çatdırılması;
  • bu konteynerləri həm məlumat mərkəzlərində, həm də buludlarda istehsal saytlarınızda yerləşdirmək.

Docker-dən nə üçün istifadə edə bilərəm?

Tətbiqlərinizi tez dərc edin

Docker inkişaf dövrünü təşkil etmək üçün əladır. Docker tərtibatçılara tətbiqlər və xidmətlər ilə yerli konteynerləri işə salmağa imkan verir. Bu, sonradan davamlı inteqrasiya və yerləşdirmə iş axını prosesi ilə inteqrasiya etməyə imkan verir.

Məsələn, tərtibatçılarınız yerli olaraq kod yazır və öz inkişaf yığınını (Docker şəkilləri dəsti) həmkarları ilə paylaşırlar. Onlar hazır olduqda, kodu və konteynerləri sınaq sahəsinə itələyir və lazımi testləri həyata keçirirlər. Test yerindən onlar kod və şəkilləri istehsala göndərə bilərlər.

Daha asan yerləşdirmək və açmaq

Docker konteyner əsaslı platforma yükünüzü daşımağı asanlaşdırır. Docker konteynerləri yerli maşınınızda, ya real, ya da məlumat mərkəzindəki virtual maşında və ya buludda işləyə bilər.

Docker-in daşınma qabiliyyəti və yüngülliyi iş yükünüzü dinamik şəkildə idarə etməyi asanlaşdırır. Tətbiqinizi və ya xidmətlərinizi yerləşdirmək və ya söndürmək üçün docker istifadə edə bilərsiniz. Docker-in sürəti bunu real vaxtda etməyə imkan verir.

Daha yüksək yüklər və daha çox faydalı yüklər

Docker yüngül və sürətlidir. O, hipervizora əsaslanan virtual maşınlara davamlı, sərfəli alternativ təqdim edir. Xüsusilə yüksək yüklü mühitlərdə, məsələn, öz buludunuzu və ya xidmət kimi platformanızı yaratarkən faydalıdır. Ancaq siz malik olduğunuz resurslardan daha çox yararlanmaq istədiyiniz zaman kiçik və orta ölçülü tətbiqlər üçün də faydalıdır.

Əsas Docker Komponentləri

Docker iki əsas komponentdən ibarətdir:

  • Docker: açıq mənbəli virtuallaşdırma platforması;
  • Docker Hub: Docker konteynerlərini paylamaq və idarə etmək üçün xidmət kimi platformamız.

Qeyd! Docker Apache 2.0 lisenziyası altında paylanır.

Docker memarlığı

Docker müştəri-server arxitekturasından istifadə edir. Docker müştərisi konteynerlərinizi yaratmaq, işə salmaq və yaymaq yükünü öz üzərinə götürən Docker demonu ilə əlaqə saxlayır. Həm müştəri, həm də server eyni sistemdə işləyə bilər, siz müştərini uzaq docker demonuna qoşa bilərsiniz. Müştəri və server rozetka və ya RESTful API vasitəsilə əlaqə saxlayır.

Docker-i başa düşmək

Docker demonu

Diaqramda göstərildiyi kimi, demon ana maşın üzərində işləyir. İstifadəçi serverlə birbaşa əlaqə saxlamır, bunun üçün müştəridən istifadə edir.

Docker müştəri

Docker müştəri, docker proqramı, Docker üçün əsas interfeysdir. O, istifadəçidən əmrlər alır və docker demonu ilə qarşılıqlı əlaqədə olur.

Dokerin içərisində

Docker-in nədən ibarət olduğunu başa düşmək üçün üç komponent haqqında bilmək lazımdır:

  • şəkillər
  • reyestr
  • konteynerlər

Şəkillər

Docker şəkli yalnız oxumaq üçün hazırlanmış şablondur. Məsələn, təsvirdə Apache ilə Ubuntu əməliyyat sistemi və üzərindəki proqram ola bilər. Şəkillər konteynerlər yaratmaq üçün istifadə olunur. Docker yeni şəkillər yaratmağı, mövcud olanları yeniləməyi asanlaşdırır və ya siz başqa insanlar tərəfindən yaradılmış şəkilləri endirə bilərsiniz. Şəkillər docker quruluşunun komponentləridir.

Reyestr

Docker reyestri şəkilləri saxlayır. Şəkilləri yükləyə və ya yükləyə biləcəyiniz ictimai və özəl registrlər var. İctimai Docker reyestridir Docker mərkəzi. Orada saxlanılan böyük şəkillər kolleksiyası var. Bildiyiniz kimi, şəkilləri özünüz yarada bilərsiniz və ya başqalarının yaratdığı şəkillərdən istifadə edə bilərsiniz. Reyestrlər paylama komponentidir.

Konteynerlər

Konteynerlər kataloqlara bənzəyir. Konteynerlər tətbiqin işləməsi üçün lazım olan hər şeyi ehtiva edir. Hər bir konteyner təsvirdən yaradılmışdır. Konteynerlər yaradıla, işə salına, dayandırıla, köçürülə və ya silinə bilər. Hər bir konteyner təcrid olunub və tətbiq üçün təhlükəsiz platforma təmin edir. Konteynerlər işin tərkib hissəsidir.

Beləliklə, Docker necə işləyir?

İndiyə qədər bilirik ki:

  • tətbiqlərimizin yerləşdiyi şəkilləri yarada bilərik;
  • proqramları işə salmaq üçün şəkillərdən konteynerlər yarada bilərik;
  • Biz şəkilləri Docker Hub və ya başqa bir şəkil reyestrindən istifadə edərək yaya bilərik.

Bu komponentlərin bir-birinə necə uyğunlaşdığını görək.

Şəkil necə işləyir?

Biz artıq bilirik ki, şəkil yalnız oxuna bilən şablondur və ondan konteyner yaradılır. Hər bir şəkil bir sıra səviyyələrdən ibarətdir. Docker istifadə edir union fayl sistemi bu səviyyələri bir təsvirdə birləşdirmək. Birlik fayl sistemi müxtəlif fayl sistemlərindən (müxtəlif filiallardan) faylların və qovluqların şəffaf şəkildə üst-üstə düşməsinə imkan verir və ardıcıl fayl sistemi yaradır.

Docker-in yüngül olmasının səbəblərindən biri onun bu kimi təbəqələrdən istifadə etməsidir. Şəkili dəyişdirdiyiniz zaman, məsələn, proqramın yenilənməsi, yeni təbəqə yaradılır. Beləliklə, bütün təsviri dəyişdirmədən və ya onu yenidən qurmadan, virtual maşınla əlaqəli ola biləcəyiniz kimi, yalnız təbəqə əlavə olunur və ya yenilənir. Və siz bütün yeni təsviri yaymaq məcburiyyətində deyilsiniz, yalnız yeniləmə paylanır, bu da şəkillərin yayılmasını asanlaşdırır və daha sürətli edir.

Hər bir görüntünün mərkəzində bir əsas təsvir durur. Məsələn, Ubuntu-nun əsas şəkli olan ubuntu və ya Fedora paylanmasının əsas şəkli olan fedora. Siz həmçinin yeni şəkillər yaratmaq üçün şəkillərdən əsas kimi istifadə edə bilərsiniz. Məsələn, apache şəkliniz varsa, onu veb proqramlarınız üçün əsas şəkil kimi istifadə edə bilərsiniz.

Qeyd! Docker adətən şəkilləri Docker Hub reyestrindən çıxarır.

Bu əsas təsvirlərdən Docker təsvirləri yaradıla bilər; biz bu təsvirləri yaratmaq üçün addımları təlimat adlandırırıq. Hər bir təlimat yeni görüntü və ya səviyyə yaradır. Təlimatlar aşağıdakılar olacaq:

  • çalıştır əmri
  • fayl və ya qovluq əlavə etmək
  • mühit dəyişəni yaratmaq
  • bu təsvirin konteyneri işə salındıqda nələrin işə salınacağına dair təlimatlar

Bu təlimatlar faylda saxlanılır Dockerfile. Docker bunu oxuyur Dockerfile, təsviri qurduğunuz zaman bu təlimatları yerinə yetirir və son şəkli qaytarır.

Docker reyestri necə işləyir?

Reyestr docker şəkilləri üçün bir anbardır. Şəkil yaradıldıqdan sonra onu ictimai Docker Hub reyestrində və ya şəxsi reyestrinizdə dərc edə bilərsiniz.

Docker müştəri ilə siz artıq dərc edilmiş şəkilləri axtara və konteynerlər yaratmaq üçün onları docker maşınınıza endirə bilərsiniz.

Docker Hub ictimai və şəxsi şəkil depolarını təmin edir. İctimai repozitoriyalardan şəkilləri axtarmaq və yükləmək hamı üçün əlçatandır. Şəxsi anbarların məzmunu axtarış nəticələrinə daxil edilmir. Və yalnız siz və sizin istifadəçiləriniz bu şəkilləri qəbul edə və onlardan konteynerlər yarada bilərsiniz.

Konteyner necə işləyir?

Konteyner əməliyyat sistemindən, istifadəçi fayllarından və metadatadan ibarətdir. Bildiyimiz kimi, hər bir konteyner təsvirdən yaradılmışdır. Bu şəkil dockerə konteynerdə nə olduğunu, hansı prosesin başlamasını, konteynerin nə vaxt işə salınacağını və digər konfiqurasiya məlumatlarını bildirir. Docker təsviri yalnız oxunur. Docker konteyneri işə saldıqda, o, tətbiqin işə salına biləcəyi təsvirin üstündə oxu/yazma qatı yaradır (əvvəllər qeyd edildiyi kimi birlik fayl sistemindən istifadə etməklə).

Konteyner işə düşəndə ​​nə baş verir?

Və ya proqramdan istifadə etməklə docker, və ya RESTful API istifadə edərək, docker müştəri docker demonuna konteyneri işə salmağı əmr edir.

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

Gəlin bu əmrə nəzər salaq. Müştəri əmrdən istifadə edərək işə salınır docker, seçimi ilə run, yeni konteynerin işə salınacağını söyləyən. Konteyneri işə salmaq üçün minimum tələblər aşağıdakı atributlardır:

  • konteyner yaratmaq üçün hansı təsvirdən istifadə etmək lazımdır. Bizim vəziyyətimizdə ubuntu
  • konteyner işə salındıqda işlətmək istədiyiniz əmr. Bizim vəziyyətimizdə /bin/bash

Bu əmri yerinə yetirdikdə başlıq altında nə baş verir?

Docker, ardıcıl olaraq aşağıdakıları edir:

  • ubuntu şəklini yükləyir: docker təsvirin mövcudluğunu yoxlayır ubuntu yerli maşında və orada deyilsə, onu yükləyin Docker mərkəzi. Bir şəkil varsa, konteyner yaratmaq üçün ondan istifadə edir;
  • konteyner yaradır: şəkil qəbul edildikdə, docker ondan konteyner yaratmaq üçün istifadə edir;
  • fayl sistemini işə salır və yalnız oxumaq üçün səviyyəni quraşdırır: konteyner fayl sistemində yaradılır və şəkil yalnız oxumaq səviyyəsinə əlavə olunur;
  • şəbəkəni/körpü işə salır: dockerə ana maşınla əlaqə yaratmağa imkan verən şəbəkə interfeysi yaradır;
  • IP ünvanının təyin edilməsi: ünvanı tapır və təyin edir;
  • Müəyyən edilmiş prosesi başlayır: tətbiqinizi işə salır;
  • Tətbiqinizdən çıxışı emal edir və istehsal edir: tətbiqinizin standart giriş, çıxış və xəta axınını birləşdirir və qeyd edir ki, siz tətbiqinizin necə işləməsini izləyə biləsiniz.

İndi işləyən konteyneriniz var. Konteynerinizi idarə edə, tətbiqinizlə əlaqə saxlaya bilərsiniz. Tətbiqi dayandırmaq qərarına gəldikdə, konteyneri silin.

İstifadə olunan texnologiyalar

Docker Go-da yazılmışdır və yuxarıdakı funksionallığı həyata keçirmək üçün Linux nüvəsinin bəzi xüsusiyyətlərindən istifadə edir.

Ad boşluqları

Docker texnologiyadan istifadə edir namespaces konteynerlər adlandırdığımız təcrid olunmuş iş yerlərini təşkil etmək. Konteyneri işə saldığımız zaman docker həmin konteyner üçün bir sıra ad boşluqları yaradır.

Bu, konteynerin hər bir aspektinin öz ad məkanında işlədiyi və xarici sistemə çıxışı olmayan izolyasiya edilmiş təbəqə yaradır.

Docker-in istifadə etdiyi bəzi ad boşluqlarının siyahısı:

  • pid: prosesi təcrid etmək;
  • net: şəbəkə interfeyslərini idarə etmək üçün;
  • ipc: IPC resurslarını idarə etmək. (ICP: InterProccess Communication);
  • mnt: montaj nöqtələrini idarə etmək;
  • utc: nüvəni təcrid etmək və versiyanın yaradılmasına nəzarət etmək (UTC: Unix timesharing sistemi).

Nəzarət qrupları

Docker texnologiyadan da istifadə edir cgroups və ya nəzarət qrupları. Tətbiqin təcrid olunmuş şəkildə işlədilməsinin açarı tətbiqi yalnız təmin etmək istədiyiniz resurslarla təmin etməkdir. Bu, konteynerlərin yaxşı qonşu olmasını təmin edir. Nəzarət qrupları mövcud avadanlıq resurslarını paylaşmağa və lazım olduqda limitlər və məhdudiyyətlər təyin etməyə imkan verir. Məsələn, konteyner üçün mümkün yaddaş miqdarını məhdudlaşdırın.

Birlik fayl sistemi

Union File Sysem və ya UnionFS, təbəqələr yaratmaqla işləyən, onu çox yüngül və sürətli edən fayl sistemidir. Docker, konteynerin qurulduğu blokları yaratmaq üçün UnionFS-dən istifadə edir. Docker UnionFS-in bir neçə variantından istifadə edə bilər: AUFS, btrfs, vfs və DeviceMapper.

Konteyner formatları

Docker bu komponentləri konteyner formatı adlandırdığımız sarğıda birləşdirir. Standart format adlanır libcontainer. Docker Linux-da ənənəvi konteyner formatını da dəstəkləyir LXC. Gələcəkdə Docker digər konteyner formatlarını dəstəkləyə bilər. Məsələn, BSD Jails və ya Solaris Zones ilə inteqrasiya.

Mənbə: www.habr.com

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