Docker nədir?

Anar Məmmədov
6 min readJan 6, 2023

--

Salam dostlar, yəqin ki hər biriniz bu termin ilə tez tez qarşılaşırsınız və hətta çoxlarınızın artıq bu texnologiya haqqında məlumatları vardır. Bu məqalə Docker-a yeni başlıyanlar və onu öyrənib tətbiq etmək istəyənlər üçündür. Elə isə sözü uzatmadan gəlin başlıyaq.

Başlıyacağımız ilk hissə əlbətdəki “Docker nədir?” sualına cavab vermək olacaqdır. Sadə deyimlə desək Docker bizə, yəni biz proqramçılara yaratdığımız application-ı hər bir kəsin(Q/A(tester), proqramçılar) və s. problemsiz şəkildə istifadə edə bilməsinə şərait yaradır. Diqqət yetirdinizsə burada problemsiz şəkildə sözündən bəhs etdim. Məgər bizim yaratmış olduğumuz application başqa bir şəxsin kompyuterində istifadə olunarkən problemlərə gətirib çıxardır?! Cavab Bəli! Əgər elədirsə o hansı problemlədir və onu bilmək olarmı sualı əminəm ki, hər birinizin beynində yaranır. Elə isə gəlin o problemlər nələrdir bir-bir baxaq və başa düşməyə çalışaq.

Fərz edin bizim Java proqramlaşdırılma dilində yaradılmış application vardır və istəyirik ki, onu hər bir şəxs istifadə edə bilsin. Fərz edin bizim application özü ilə bərabər əlavə texnologiyalar istifadə edir. Misal üçün, database olaraq MySQL, cache əməliyyatı üçün Redis, logging əməliyyatı üçün Kibana+Elastic Search və s. kimi texnologiyalar bizim application da mövcuddur. İndi isə gəlin aşağıda qeyd etdiyim hissələrdə hansı problemlər baş verəcəkdir onları görək.

  1. Yuxarıda sadalanan hər hansı bir texnologiya, application istifadə edəcək istifadəçinin kompyuterində olmaya bilər və yaxud olsa belə versiyaları conflict yaradacaqdır.
  2. İstifadə etdiyimiz application da dependencie-lər olur ki, yenədə bu istifadəçinin kompyuterində olmaya bilər və yaxud olsa belə versiyaları conflict yaradacaqdır.
  3. İstifadə etdiyimiz application da library-lər olur ki, yenədə bu istifadəçinin kompyuterində olmaya bilər və yaxud olsa belə versiyaları conflict yaradacaqdır.

Bu və ya bu kimi problemləri həll etmək bir IT infrastrukturunda işləyən əməkdaş üçün həddindən artıq vaxt aparan yorucu işdir. Docker istifadə etməklə yuxarıda sadalanan problemlərin öhdəsindən gələ bilirik. Bunun necə baş verdiyini başa düşmək üçün qısa bir nəzəri hissəni gözdən keçirdək.

Docker deyir ki, sən proqramçı mən bilirəm ki, sən bir application yaratmısan və onun içində ona lazım olacaq texnologiya, dependency və library vardır ki, bunlar mütləq şəkildə başqa bir əməkdaşın kompyuterində problemə gətirib çıxardacaqdır. Ona görə sən gəl mənim container adlanan terminimdən istifadə edərək bu problemi aradan qaldır. Bunun da necə baş verdiyini başa düşmək üçün qısa bir nəzəri hissəni gözdən keçirdək.

Container termini Docker dünyasında adından da məlum olduğu kimi container, yəni bir qablaşdırma və yaxud qutu kimi başa düşülməkdədir və bu container vasitəsi ilə biz onun içində bizim application da olan texnologiya, dependency və library onları container içinə ataraq onu hub docker yaxud docker registry-ə əlavə etməyimiz bəs edir. Beləliklə tək bir container vasitəsi ilə biz bu problemi aradan qaldırmış olduq. Ən sonunda isə hub docker yükləmiş olduğumuz container istənilən əməkdaş tərəfindən, pull olunaraq run olnur və beləliklə application istənilən əməkdaşın kompyuterində problemsiz şəkildə işə düşür. Belə dostlar bu bizdə oldu “Docker nədir?” sualına cavab. Aşağıdakı şəkildən simulyasiya edərək daha rahat şəkildə başa düşə bilərsiniz.

Docker simulation

Docker bir konteynirləşdirilmiş texnologiyadır. Bu o deməkdir ki, biz application-ı Docker vasitəsi ilə konteyner halına salaraq, istənilən mühit də istənilən əməkdaş tərəfindən problemsiz şəkildə application-ı test oluna bilinməsini təmin edirik. Bunu Docker da, yəni yaratdığımız application -ı problemsiz şəkildə istənilən əməkdaşın kompyuterində, kimki sizin application-ı test edəcək onların kompyuterində problemsiz şəkildə işə düşə bilməsini təmin edən məhz Docker-ın bizə vermiş olduğu container terminidir. Docker-ı real həyatda okeanlarda üzən gəmi kimi başa düşə bilərsiniz, real həyatda okeanlarda səyahət edən yekə gəmi özündə yekə konteynerlər daşıyır və hər dəfəsində limana çatdıqda bu konteynerlər həmən limanlara daşınaraq ona lazım olan ölkələr tərəfindən problemsiz şəkildə istifadə olunur. Məhz Docker da okeanlar da üzən gəmi kimi başa düşə bilərsiniz ki, həmən onun daşıdığı konteynerlərın içində sizin application vardır və o application yekə gəmi limana çatdıqda ona lazım olan ölkələr tərəfindən problemsiz şəkildə istifadə olunmasını, sizin application-ı istifadə edən əməkdaşlar kimi düşünə bilərsiniz. Qısası Docker bizə deyir ki, build once run anywhere. Yəni birdəfə proyekt yarat və o proyekti götürüb hərkəs istifadə edə bilsin.

İndi isə gəlin Docker-ın işləmə prinsipinə nəzər yetirək və başa düşməyə çalışaq ki, Docker necə işləyir. Docker “client-server” arxitekturasına əsaslanaraq işləyən texnologiyadır.

Docker workflow

Gördüyümüz kimi yuxarıdakı şəkil 3 hissədən ibarətdir:

Client:

Bu hissəni, bizim terminalda yazmış olduğumuz komandaların icra olunduğu yer kimi başa düşə bilərik. Biz bu komandalar vasitəsi ilə nə edirik ortada duran şəkildə olan hissə ilə əlaqəyə girərərk, Docker Host da Docker Daemon-ı hərəkətə gətirərək, bizim Client hissəsində yazmış olduğumuz komandalar ilə Docker Daemon ilə əlaqəyə girərək müxtəlif prosesləri icra etmiş oluruq.

Docker Host:

Bu hissəni, belə başa düşə bilərik ki, biz Docker-ı kompüterimizə yüklədiyimiz an kompyuterimizdə yer alan və Client-dan gələn komandaları icra edə bilən bir xüsusiyyət kimi başa düşə bilərik.

Docker Registry:

Bu hissəni isə Docker Host-un özündə Client tərəfindən yazılmış komandaları icra edə bilməsi üçün həmin container və yaxud image üzərində əməliyyat apara bilməsi üçün məhz həmən container image-i Docker Host-a təmin edən hissə kimi başa düşə bilərik. Qısası Docker Registry özündə image saxlayan bir cloud platformasıdır.

Docker Architecture:

Docker architecture

Sol tərəf də olan client hissəsi sizin olduğunuzu bildirir, yəni siz burada Docker texnologiyasını istifadə edən bir client-sız və terminalda şəkildə göstərilən komandaları yazarkən nəticə etibarı ilə şəklin orta hissəsində yer alan Docker Host ilə əlaqədə olursunuz. Docker Host-un içərisində olan Docker Daemon, sizin yəni client-ın ona göndərmiş olduğu komandaları icra edən bir program təminatıdır və bu komandaları qəbul edərək containerimage üzərində sizin ona göndərmiş olduğunuz komandalar vasitəsi ilə containerimage-ləri idarə edir. Şəkildən də göründüyü kimi Docker Daemon həm client və həmçinin də Docker Registery ilə kontakta girir.

Docker Daemon:

Docker Daemon-u aşağıdakı şəkildə olan octopus kimi başa düşə bilərsiniz.

Docker Daemon

Gördüyümüz kimi octopus burada imagecontainer ilə məşğul olmaqdadır, yuxarıda demişdik ki, Docker Daemon, client tərəfindən göndərilən komandaları qəbul edərək məhz həmən komandalar vasitəsi ilə Docker Host da əməliyyatları icra etmiş olur. Məncə bu şəkildən hərşey sizə daha yaxşı aydın olar ki, Docker Daemon əslində nədir?

Docker Basic Terminology:

Docker öyrənərkən burada işlədəcəyimiz bir sıra temrinlər vardır ki, onları bilmək və anlamaq məcburiyyətindəyik. Onlar hansılardır gəlin biryerdə baxaq.

Docker Daemon:

Docker Daemon, sizin kompyuterinizdə olan əməliyyat sistemi ilə əlaqəyə girərək bir servis və yaxud bir iş görən proses halını alır və o container-i run edə bilir, image-i docker hub-dan yükləyir və s. sizin client-dan yolladığınız komandalar vasitəsi ilə prosesləri icra edir. Qısası Docker Daemon, Docker Host-da işə düşən və Docker obyektlərini yaradıb və onlar üzərində əməliyyatları icra edən programdır. Burada Docker obyekt-ləri deyərkən bunları nəzərdə tuturam. Məsələn images, containers, network, volume, data və s.

Docker Images:

Docker da image-i biz bir fayl kimi başa düşə bilərik. image exe olunmamış bir fayl halında olur və özündə bizim programımızı işə salacaq konfigurasiyaları(kodlar, library, dependencies və s.) özündə saxlamaqdadır və həmçinin image Docker da container-in yaradılmasından ötəri vardır. Həmçinin image-ları biz paket kimi də başa düşə bilərik. Yuxarıdakı şəkilə baxsaz, başa düşərsiniz ki, həmən şəklə biz application-ın run olunması üçün lazımı konfigurasiyaları(dependencies, library və s.) oraya qoyulur və sonrasında bu image-dən container yaradılaraq exe olunmuş formata çevrilir.

Docker Containers:

Docker da container-lər image-lərdən yaranaq ortalığa çıxmaqdadırlar. image-i öyrəndiyimizdə demişdik ki, image-i application-a lazım olacaq bütün konfigurasiya(library,dependencies və s. ) məlumatlarını saxlayan və bu image-i run edərək ondan bir container yəni exe oluna bilən fayl yaradan paket kimi başa düşə bilərik. Həmçinin Docker da container biri-birindən ayrılmış şəkildə və yaxud biri-birindən asılı olmayaraq çalışan bir file kimi də başa düşə bilərik.

Belə dostlar, bu məqalədə biz Docker texnologiyasını öyrənərək ondan nə üçün və niyə istifadə olunduğunu başa düşməyə çalışdıq. Ümid edirəm məqalə ürəyinizcə oldu hər birinizə xoş mütaliələr.

--

--

Anar Məmmədov
Anar Məmmədov

Written by Anar Məmmədov

Java Backend Developer wondering RDBMS and processing of structure any technology that is related backend.

No responses yet