Salam dostlar,
Bu məqaləmdə "Docker" haqqında tez-tez verilən (müsahibə tipli) suallar və cavabları təqdim edəcəm. Beləliklə:
- "Docker" nədir?
"Docker" tətbiqlərin, proqram təminatının qurulması və daşınması üçün nəzərdə tutulmuş konteyner tipli açıq mənbəli bir platformadır. Proqram təminatının qurularaq konteyner vasitəsilə daşınmasını həyata keçirən "Docker", tətbiqləri infrastrukturdan ayırır ki, məhz "Docker" ilə tətbiqlərin idarə edilməsi kimi infrastrukturun da idarə edilməsi mümkün olur. "Docker" metodologiyalarından yararlanaraq, "production"-da kod yazmaqla tətbiqetmə arasında olan gecikməni əhəmiyyətli dərəcədə azaltmaq mümkündür;
- Virtualizasiya nədir?
Virtualizasiya kompüterdə yer alan əməliyyat sistemini təqlid (simulyasiya) edən bir platformadır və fiziki infrastruktur (bera metal) üzərindən (ESXI) müxtəlif virtual əməliyyat sistemlərinin yaradılmasını təmin etməklə mərkəzdən idarətməni həyata keçirir;
- Konteyner (Docker) ilə Virtualizasiyanın fərqi nədir?
Konteyner texnologiyasına əsaslanan "Docker" ilə Virtualizasiyanın (VM) fərqi ondan ibarətdir ki, Virtualizasiyada hər VM-in bir əməliyyat sistemi olduğu halda, "Docker" konteynerlərdə isə bir əməliyyat sistemi mövcud olur və hər bir proqram, tətbiq üçün ayrıca əməliyyat sisteminə ehtiyac duyulmadan bir əməliyyat sistemi mərkəzdən paylanır. Bir sözlə, bir-birilərindən təcrid olunmuş (isolate) formada işləyən "Docker" konteynerlər bir əməliyyat sistemini istifadə edərək öz aralarında bölüşdürə bilirlər. "Docker" konteynerlər arasındakı əməliyyat sistemi resurslarının bölüşdürülərək izolyasiyası "namespace"-lər vasitəsilə həyata keçirilir. Əlavə olaraq qeyd edim ki, virtualizasiyaya nisbətən "Docker" konteynerlər daha az resurs istifadə edə bilir ki, virtualizasiyada hər bir əməliyyat sisteminə kifayət qədər (RAM, CPU, Disk Storage və s.) əlavə resurslar təyin edildiyi halda, "Docker" konteynerlər bir əməliyyat sistemindən paylanan resursları öz iş yükünün tələbinə əsasən istifadə edə bilir ki, bu da virtualizasiyaya nisbətən "Docker" konteynerlərdə əməliyyat sisteminin həddindan artıq yükə düşməməsi deməkdir;
- "Docker" Arxitekturası nədir?
"Docker" "client-server" arxitekturasını istifadə edir ki, "Docker" "client" konteynerlərin qurulması, istifadəsi və daşınması üçün "Docker daemon" ilə əlaqə qurur ki, bu əlaqə "Unix" və ya şəbəkə interfeysi üzərindən "REST API" vasitəsilə həyata keçirilir. "Docker client" və "daemon" eyni sistemdə işləyə, eləcə də "Docker client" ilə "daemon" arasında əlaqənin kənardan qurulması da təmin edilə bilir;
- "Docker"-in hansı komponentləri mövcuddur və bəzi komponentlər haqqında izah verə bilərsinizmi?
- "Docker Compose" - çox (multi) konteynerli "Docker" tətbiqetmələrini təyin, idarə və istifadə etmək üçün bir vasitədir;
- "Docker Daemon" - "Docker daemon (dockerd)" "Docker API" sorğularını dinləyir, "Docker" obyektlərinə daxil olan image-lər, konteynerlər, şəbəkələr, "volume"-lar və s. idarə edir. "Docker" xidmətlərinin idarə edilməsi üçün bir "daemon" digər "daemon"-lar ilə də əlaqə qura bilir;
- "Docker Client" - "Docker" istifadəçilərinin "Docker" ilə qarşılıqlı əlaqəsininin təmin edilməsində əsas rol oynayır. "Docker" client birdən çox daemon ilə əlaqə qura bilir. Əgər istifadəçi "docker run" əmrini istifadə etdikdə, client bu tipli əmrlərin icrasının həyata keçirilməsini "dockerd"-ə göndərir. "Docker" əmri "Docker API"-ni istifadə edir;
- "Docker Registry" - "Docker" registry public və private olmaqla özündə "Docker image"-lərini saxlayır. "Docker HUB" isə hər kəsin istifadə edə biləcəyi bir public "registry"-dir və "Docker" "default" olaraq "Docker Hub"-da "image"-lərin paylaşımı və istifadəsi üçün konfiqurasiya edilmişdir. Qeyd edim ki, "docker pull" və ya "docker run" əmrlərini istifadə etdikdə, "image"-lər konfiqurasiya edilmiş registry-dən çıxarılır, "docker push" əmri ilə isə "image"-lər (əksinə olaraq) konfiqurasiya edilmiş registry-yə göndərilir;
- "Docker CLI" - "Docker deamon"-u ilə əlaqənin yaradılmasına imkan verən və əmrlərin icrasını həyata keçirən bir platformadır. "Docker"-in quraşdırılması zamanı həm "Docker deamon", həm də "Docker CLI" alətləri bir araya gətirilmiş olur. "Docker run" əmri, verilmiş bir "image"-dən konteyner yaradır və müvafiq əmrin icra edilməsilə konteynerin işə salınmasını (start) təmin edir;
- "Dockerfile" - "Docker image"-lərinin yaradılması üçün əsas konsepsiyadır və "image"-lərin necə qurulduğunu təsvir edən əmrlərin (konfiqurasiyalar, instruksiylar, source "code"-lar və s.) siyahısını özündə ehtiva edən bir mətn sənədidir. "Docker build" əmri, "Dockerfile"-ın içərisindəki məzmuna uğun olaraq "Docker"-ə "image" yaratmağı əmr edir. "Dockerfile"-ın ümumi instruksiyaları "FROM", "LABEL", "RUN", and "CMD"-dən ibarətdir;
- "Docker"-in vacib xüsusiyyətləri hansılardır?
- Asan Modelləşdirmə (Easy Modeling)
- Versiya nəzarəti (Version control)
- Yerləşdirmə (Placement/Affinity)
- Tətbiq sürətliliyi (Application Agility)
- Tərtibatçı məhsuldarlığı (Developer Productivity)
- Əməliyyatın effektivliyi (Operational Efficiencies)
- "Docker image" nədir?
"Docker image" "Docker" konteynerlərinin yaradılmasına kömək edir və hər bir "Docker image" "Docker" reyestrində yer alır ki, həmin "Docker" reyestr "Docker Hub" adlanır. "Docker Hub"-ı bir növ "repository" kimi də düşünmək olar;
- Hansı əmr bütün işlək olan (running) "docker" konteynerlərinin siyahısını tərtib edir?
$ docker ps
- "Docker image"-in konteyner kimi işə salınması hansı əmr vasitəsilə həyata keçirilir?
$ sudo docker run -i -t alpine /bin/bash
- "Docker"-in hansı vacib "state"-ləri vardır?
- Running
- Paused
- Restarting
- Exited
- Fərz edək ki, 3 konteyner mövcuddur və bu konteynerlərdən işlək vəziyyətdə olan (running) konteynerə daxil olmaq üçün hansı əmr icra edilir?
$ sudo docker exec -it <container id> bash
"Docker" konteynerin hansı "lifecycle" addımları mövcuddur?
- Create a container
- Run the container
- Pause the container (optional)
- Un-pause the container (optional)
- Start the container
- Stop the container
- Restart the container
- Kill the container
- Destroy the container
Dostlar,
Güman edirəm ki, bu məqaləm də maariflənməniz istiqamətində sizə faydalı olar.
Təşəkkür edirəm və uğurlar!
Hörmətlə,
Müəllif
Araz Əhmədov
Comments
Post a Comment