Jet Academy Logo
Məzmunə keç / Skip to content

Docker nədir?

Docker — tətbiqləri onların işləməsi üçün lazım olan kod, kitabxana, runtime və digər asılılıqlarla birlikdə container adlanan izolyasiya olunmuş mühitlərdə paketləməyə və işlətməyə imkan verən platformadır. Sadə dillə desək, proqramın yalnız kodunu başqa kompüterə köçürmək hər zaman kifayət etmir. Proqram müəyyən Python, Java və ya Node.js versiyasına, xüsusi kitabxanalara, sistem parametrlərinə və başqa asılılıqlara ehtiyac duya bilər. Bu səbəbdən proqram bir kompüterdə işlədiyi halda başqa kompüterdə işləməyə bilər. Docker tətbiqi və onun işləməsi üçün lazım olan mühiti birlikdə paketləməklə bu problemi azaltmağa kömək edir. Məsələn, Spring Boot tətbiqi üçün Java runtime, tətbiqin .jar faylı və uyğun konfiqurasiyalar Docker image daxilində yerləşdirilə bilər. Həmin image-dən yaradılan container uyğun Docker mühitinin olduğu müxtəlif sistemlərdə oxşar formada işlədilə bilər. Docker xüsusilə Backend proqramlaşdırma, Microservices, DevOps, CI/CD, test və deployment proseslərində geniş istifadə olunur.

Docker nə üçün istifadə olunur?

Docker-un əsas məqsədlərindən biri tətbiqin development, testing və production mühitlərində daha ardıcıl işləməsini təmin etməkdir.

Məsələn, proqramçının kompüterində:

quraşdırılmış ola bilər. Başqa proqramçının kompüterində isə həmin proqramların fərqli versiyaları ola bilər.

Bu vəziyyət tez-tez:

“Məndə işləyir, amma serverdə işləmir.”

probleminə səbəb olur.

Docker tətbiqin ehtiyac duyduğu mühitin böyük hissəsini image daxilində müəyyən etməyə imkan verir.

Docker vasitəsilə:

  • tətbiqləri container-ləşdirmək;
  • müxtəlif layihələrin dependency-lərini bir-birindən ayırmaq;
  • development mühitini komandada standartlaşdırmaq;
  • database və digər servisləri sürətlə işə salmaq;
  • mikroservisləri ayrı-ayrı container-lərdə işlətmək;
  • test mühitləri yaratmaq;
  • CI/CD proseslərində tətbiqləri build və deploy etmək mümkündür.

Container nədir?

Container — Docker image-dən yaradılan və izolyasiya olunmuş şəkildə işləyən prosesdir.

Sadə müqayisə ilə:

Docker Image → Şablon

Docker Container → Həmin şablondan işləyən instansiya

Məsələn, nginx image-dən bir neçə ayrı container yaratmaq mümkündür.

docker run nginx

əmri uyğun image mövcud deyilsə onu əldə edə və həmin image əsasında container başlada bilər. Container öz filesystem görünüşünə, process-lərinə və şəbəkə mühitinə malik ola bilər, lakin Virtual Machine-dən fərqli olaraq ayrıca tam əməliyyat sistemi kernel-i işə salmır. Bu xüsusiyyət container-lərin nisbətən yüngül və sürətli başlamasına imkan verir.

Docker Image nədir?

Docker Image container yaratmaq üçün istifadə olunan dəyişdirilməz — immutable paketdir. Image daxilində tətbiqin işləməsi üçün lazım olan:

  • tətbiq kodu;
  • runtime;
  • kitabxanalar;
  • dependency-lər;
  • sistem faylları;
  • başlanğıc komandası

kimi məlumatlar yerləşə bilər. Məsələn, Python tətbiqi üçün image belə komponentlərdən ibarət ola bilər:

Linux əsas faylları

↓

Python runtime

↓

Python dependency-ləri

↓

Tətbiqin kodu

↓

Başlanğıc komandası

Image bir dəfə yaradıldıqdan sonra həmin image birbaşa dəyişdirilmir. Dəyişiklik etmək lazım gəldikdə yeni image build edilir.

Docker Image və Container arasında fərq nədir?

Image və Container tez-tez qarışdırılır. Image tətbiqin işləməsi üçün lazım olan faylların və konfiqurasiyanın hazır paketidir. Container isə həmin image-in işləyən instansiyasıdır.

Sadə analogiya:

Image → proqramın hazır şablonu

Container → həmin şablonun işləyən versiyası

Eyni image-dən bir neçə container yaratmaq mümkündür.

Məsələn:

nginx image

↓

Container 1


nginx image

↓

Container 2


nginx image

↓

Container 3

Bu container-lər eyni image-dən yaransalar da, ayrı proseslər kimi işləyə bilər.

Dockerfile nədir?

Dockerfile Docker image-in necə hazırlanacağını müəyyən edən təlimatlar faylıdır.

Məsələn, sadə Java tətbiqi üçün:

FROM eclipse-temurin:21-jre


WORKDIR /app


COPY application.jar app.jar


EXPOSE 8080


ENTRYPOINT ["java", "-jar", "app.jar"]

Burada:

FROM — hansı base image-dən başlanacağını;

WORKDIR — container daxilində iş qovluğunu;

COPY — faylın image daxilinə köçürülməsini;

EXPOSE — tətbiqin istifadə etdiyi portu sənədləşdirməyi;

ENTRYPOINT — container başladıqda hansı komandanın icra olunacağını

müəyyən edir. Dockerfile özü container deyil. O, image yaratmaq üçün istifadə olunan reseptdir.

docker build nədir?

Dockerfile əsasında image yaratmaq üçün docker build istifadə olunur.

Məsələn:

docker build -t my-app:1.0 .

Burada:

my-app — image adı;

1.0 — tag;

. — build context-i göstərir. Build tamamlandıqdan sonra yaranan image-dən container yaratmaq mümkündür.

docker run nədir?

docker run image əsasında yeni container yaratmaq və işə salmaq üçün istifadə olunur.

Məsələn:

docker run my-app:1.0

Container-i background-da başlatmaq üçün:

docker run -d my-app:1.0

istifadə edilə bilər.

-d detached mode deməkdir və container-in terminalı bloklamadan arxa planda işləməsinə imkan verir.

docker ps nədir?

Hazırda işləyən container-ləri görmək üçün:

docker ps

istifadə olunur.

Dayanmış container-lər daxil olmaqla bütün container-ləri görmək üçün:

docker ps -a

yazmaq mümkündür. Bu əmrlər Docker ilə işləyərkən ən çox istifadə olunan əsas komandalar arasındadır.

Docker port mapping nədir?

Container daxilində işləyən tətbiqin host kompüterdən əlçatan olması üçün port mapping istifadə edilə bilər.

Məsələn:

docker run -p 8080:80 nginx

Burada:

8080 — host portu;

80 — container portudur.

Bu halda istifadəçi host kompüterdə:

localhost:8080

ünvanına daxil olduqda trafik container-in 80 portuna yönləndirilir. Port mapping xüsusilə web server, REST API və database container-ləri ilə işləyərkən vacibdir.

Docker Volume nədir?

Container daxilində yazılan məlumatlar container silindikdə itə bilər. Məsələn, PostgreSQL database container-i yaradıb bütün məlumatları yalnız container-in öz writable layer-ində saxlasanız, container silindikdə həmin data da itə bilər. Daimi məlumatların saxlanılması üçün Docker Volume istifadə olunur.

Sadə formada:

Container

↓

Docker Volume

↓

Persistent Data

Volume container-in həyat dövründən ayrı idarə olunur.

Məsələn:

docker volume create postgres-data

ilə volume yaratmaq mümkündür. Database-lər, upload faylları və digər davamlı məlumatlar üçün volume-lardan istifadə edilə bilər.

Bind Mount nədir?

Bind Mount host kompüterdəki müəyyən fayl və ya qovluğu container daxilində istifadə etməyə imkan verir. Məsələn, development zamanı source code qovluğunu container-ə mount etmək mümkündür. Volume-lar Docker tərəfindən idarə olunur. Bind Mount isə host sistemdə konkret mövcud path ilə işləyir. Bu iki mexanizmin istifadə məqsədləri fərqli ola bilər.

Docker Network nədir?

Container-lərin bir-biri ilə əlaqə yaratması üçün Docker network-lərdən istifadə edir.

Məsələn:

Backend Container

↓

Docker Network

↓

PostgreSQL Container

Backend container database container-ə eyni Docker network vasitəsilə qoşula bilər. Bu yanaşma multi-container tətbiqlərdə xüsusilə vacibdir. Docker müxtəlif network driver-ləri təqdim edir. Lokal layihələrdə ən çox rast gəlinən yanaşmalardan biri bridge network-dür.

Docker Compose nədir?

Docker Compose bir neçə container-dən ibarət tətbiqləri vahid konfiqurasiya faylı vasitəsilə idarə etməyə imkan verən Docker alətidir.

Məsələn, Backend layihəsində aşağıdakılar ola bilər:

  • Spring Boot tətbiqi;
  • PostgreSQL;
  • Redis.

Bunların hər birini ayrı docker run komandaları ilə başlatmaq mümkündür. Docker Compose vasitəsilə isə bütün servislər compose.yaml faylında müəyyən edilə bilər.

Məsələn:

services:

app:

build: .

ports:

- "8080:8080"


db:

image: postgres:17

environment:

POSTGRES_DB: app

POSTGRES_PASSWORD: password

Daha sonra:

docker compose up

əmri vasitəsilə bütün servislər birlikdə başladılır. Docker Compose xüsusilə development mühitində və bir neçə servisdən ibarət tətbiqlərin idarə olunmasında çox faydalıdır.

Dockerfile və Docker Compose arasında fərq nədir?

Dockerfile və Docker Compose eyni məqsəd daşımır. Dockerfile image-in necə build olunacağını müəyyən edir. Compose file isə bir və ya bir neçə container-in necə işləyəcəyini müəyyən edir.

Sadə müqayisə:

Dockerfile

↓

Docker Image

↓

Container

və:

compose.yaml

↓

App Container

Database Container

Redis Container

...

Real layihədə Dockerfile və Docker Compose birlikdə istifadə edilə bilər.

Docker Engine nədir?

Docker Engine container-lərin yaradılması və işlədilməsi üçün istifadə olunan əsas Docker texnologiyasıdır. Docker Engine client-server arxitekturasına malikdir.

Onun əsas komponentlərinə:

  • Docker daemon;
  • Docker API;
  • Docker CLI

daxildir.

İstifadəçi:

docker run nginx

kimi komanda verdikdə Docker CLI Docker Engine ilə əlaqə yaradır və uyğun əməliyyatın həyata keçirilməsini tələb edir.

Docker Daemon nədir?

Docker daemon — dockerd Docker Engine-in əsas background proseslərindən biridir.

Daemon Docker obyektlərinin idarə olunmasında iştirak edir:

  • image-lər;
  • container-lər;
  • network-lər;
  • volume-lar.

Unix və Linux sistemlərində istifadəçi ilə birbaşa qarşılıqlı əlaqə olmadan background-da işləyən bu tip proseslər Daemon adlanır. Daemon anlayışı haqqında daha geniş məlumat üçün JET Academy-nin Daemon nədir? termin səhifəsinə baxa bilərsiniz.

Docker Hub nədir?

Docker Hub Docker image-lərinin saxlanılması və paylaşılması üçün istifadə olunan container registry xidmətidir.

Məsələn:

docker pull postgres

əmri ilə PostgreSQL image-i registry-dən endirilə bilər. Image-i registry-yə göndərmək üçün isə docker push istifadə olunur.

Docker Hub-da:

  • Docker Official Images;
  • müxtəlif vendor image-ləri;
  • community image-ləri

mövcuddur.

Production layihələrində image seçərkən onun mənbəyinə, yenilənmə tarixçəsinə və təhlükəsizliyinə diqqət etmək vacibdir.

Docker Registry nədir?

Registry Docker image-lərinin saxlanıldığı server və ya xidmətdir. Docker Hub registry nümunəsidir.

Digər nümunələrə:

  • GitHub Container Registry;
  • Amazon ECR;
  • Azure Container Registry;
  • Google Artifact Registry

daxildir.

Registry daxilində repository-lər, həmin repository-lərdə isə fərqli tag-lərə malik image-lər saxlanıla bilər.

Docker və Virtual Machine arasında fərq nədir?

Docker container-ləri ilə Virtual Machine-lər hər ikisi izolyasiya yaratmağa imkan verir, lakin işləmə prinsipləri fərqlidir. Virtual Machine adətən öz tam əməliyyat sistemi və kernel-i ilə işləyir. Container isə host sistemin kernel-indən istifadə edən izolyasiya olunmuş prosesdir.

Sadələşdirilmiş şəkildə:

Virtual Machine

Hardware

↓

Host OS

↓

Hypervisor

↓

Guest OS

↓

Application

Container

Hardware

↓

Host OS

↓

Container Runtime

↓

Container

↓

Application

Container-lər adətən VM-lərdən daha yüngül və daha sürətli başlayır. Lakin bu, container və Virtual Machine-in hər vəziyyətdə bir-birini əvəz etdiyi demək deyil. Real infrastrukturlarda Virtual Machine üzərində Docker container-lərinin işlədilməsi geniş yayılmış yanaşmadır.

Docker və Kubernetes arasında fərq nədir?

Docker əsasən container image-lərinin yaradılması, container-lərin işlədilməsi və lokal container workflow-ları ilə əlaqəlidir. Kubernetes isə çoxsaylı containerized tətbiqlərin böyük miqyasda orchestration və idarə olunması üçün istifadə olunan platformadır.

Sadə müqayisə:

Docker → container yarat və işlət

Kubernetes → çoxsaylı container workload-larını idarə et və miqyaslandır

Kubernetes deployment, scaling, service discovery və self-healing kimi imkanlar təqdim edir. Docker öyrəndikdən sonra container orchestration mövzusunda Kubernetes-ə keçmək mümkündür.

Docker Microservices-də necə istifadə olunur?

Microservices arxitekturasında tətbiq kiçik və müstəqil servislərə bölünür.

Məsələn, e-commerce sistemi:

User Service

Product Service

Order Service

Payment Service

kimi servislərdən ibarət ola bilər. Hər servis ayrıca Docker image kimi hazırlanaraq ayrıca container-də işlədilə bilər.

Bu, servislərin:

  • ayrı deployment olunmasını;
  • fərqli versiyalarda işləməsini;
  • ayrılıqda scale edilməsini;
  • dependency-lərinin izolyasiya edilməsini

asanlaşdıra bilər. JET Academy-nin Java Backend proqramında da Microservices və Docker Compose eyni modul daxilində praktiki olaraq öyrədilir.

Docker Spring Boot ilə necə istifadə olunur?

Spring Boot tətbiqi əvvəlcə .jar faylı kimi build edilə bilər. Daha sonra Dockerfile vasitəsilə həmin tətbiq üçün image hazırlanır.

Sadə proses:

Spring Boot

↓

JAR

↓

Dockerfile

↓

Docker Image

↓

Container

Container işə salındıqda Spring Boot tətbiqi Docker daxilində işləyir. PostgreSQL də ayrıca container-də işlədilə və iki servis Docker network vasitəsilə əlaqələndirilə bilər. Bu yanaşma xüsusilə Backend development və microservices layihələrində geniş istifadə olunur.

Docker Python layihələrində necə istifadə olunur?

Python Backend tətbiqləri də Docker vasitəsilə container-ləşdirilə bilər.

Məsələn, Django layihəsində:

Django Application

↓

Docker Image

↓

Application Container

və ayrıca:

PostgreSQL Container

Redis Container

Celery Worker Container

yaratmaq mümkündür. Docker Compose bütün bu servisləri birlikdə idarə etməyə kömək edir. Bu səbəbdən Docker Python Backend proqramlaşdırmada da vacib deployment və development alətlərindən biridir.

Docker CI/CD-də necə istifadə olunur?

CI/CD prosesində tətbiq kodu repository-yə göndərildikdən sonra avtomatik pipeline işə düşə bilər.

Məsələn:

Git Push

↓

Tests

↓

Docker Image Build

↓

Image Registry

↓

Deployment

Pipeline tətbiqin Docker image-ini hazırlaya, test edə, registry-yə göndərə və daha sonra serverdə deploy edə bilər. Docker-un image əsaslı yanaşması development və production arasında daha ardıcıl deployment prosesi yaratmağa kömək edir.

Docker container daxilində log-lara necə baxılır?

Container-də problem yarandıqda ilk yoxlanılan yerlərdən biri log-lardır.

Məsələn:

docker logs container-name

ilə container-in log-larına baxmaq mümkündür.

Real vaxtda log-ları izləmək üçün:

docker logs -f container-name

istifadə edilə bilər.

Bundan əlavə:

docker inspect container-name

container haqqında konfiqurasiya və runtime məlumatlarını göstərir. Problemlərin sistemli şəkildə müəyyən edilməsi proqramlaşdırmada Debugging prosesinin bir hissəsidir.

Docker exec nədir?

İşləyən container daxilində komanda icra etmək üçün docker exec istifadə edilə bilər.

Məsələn:

docker exec -it container-name sh

container daxilində shell açmağa imkan verə bilər. Bu üsul development və troubleshooting zamanı container daxilində faylları və prosesləri yoxlamaq üçün faydalıdır. Production sistemlərində isə dəyişiklikləri birbaşa container daxilində əl ilə etmək əvəzinə image və deployment konfiqurasiyasını düzəltmək daha düzgün yanaşmadır.

Docker container-ləri təhlükəsizdirmi?

Container-lər müəyyən səviyyədə izolyasiya təqdim edir, lakin Docker istifadə etmək tətbiqi avtomatik olaraq tam təhlükəsiz etmir.

Təhlükəsizlik üçün:

  • etibarlı base image-lərdən istifadə etmək;
  • image-ləri mütəmadi yeniləmək;
  • lazımsız paketləri image-ə əlavə etməmək;
  • secrets və password-ları image daxilində saxlamamaq;
  • container-i lazımsız root hüquqları ilə işlətməmək;
  • yalnız lazım olan portları açmaq;
  • image vulnerability scanning istifadə etmək

kimi yanaşmalar vacibdir. Container security ayrıca geniş mövzudur və production sistemlərində xüsusi diqqət tələb edir.

Docker istifadə etməyin üstünlükləri nələrdir?

Docker-un əsas üstünlüklərindən biri tətbiq mühitinin standartlaşdırılmasıdır. Tətbiq və onun dependency-ləri image daxilində müəyyən edildiyi üçün development, testing və production mühitləri arasındakı fərqləri azaltmaq mümkündür.

Digər üstünlüklərə:

  • sürətli container yaradılması;
  • dependency isolation;
  • portability;
  • asan test mühitləri;
  • microservices üçün uyğun struktur;
  • CI/CD inteqrasiyası;
  • development mühitinin daha sürətli qurulması

daxildir.

Docker-un çatışmazlıqları varmı?

Docker bütün problemləri avtomatik həll edən texnologiya deyil. Yeni başlayanlar üçün image, container, network, volume və registry kimi anlayışları birlikdə öyrənmək əvvəlcə mürəkkəb görünə bilər. Production sistemlərində networking, storage, logging, monitoring və security düzgün planlaşdırılmalıdır. Container-lər ephemeral ola bildiyinə görə database kimi persistent məlumatların düzgün volume strategiyası ilə saxlanılması vacibdir. Çoxsaylı container-lərin böyük miqyasda idarə olunması üçün isə Docker-dan əlavə Kubernetes kimi orchestration platformalarına ehtiyac yarana bilər.

Docker öyrənməyə haradan başlamaq lazımdır?

Docker öyrənərkən əvvəlcə Linux və terminal haqqında baza bilikləri faydalıdır.

Daha sonra bu ardıcıllıqla irəliləmək mümkündür:

Container → Image → Docker CLI → Dockerfile → Volume → Network → Docker Compose → Registry → CI/CD → Kubernetes

İlk mərhələdə hazır image-i işə salmaq yaxşı başlanğıcdır:

docker run hello-world

Daha sonra sadə Backend tətbiq üçün Dockerfile hazırlamaq və image build etmək olar. Növbəti mərhələdə PostgreSQL və tətbiqi ayrı container-lərdə işə salaraq Docker Compose vasitəsilə birlikdə idarə etmək mövzunu daha yaxşı başa düşməyə kömək edir. Docker yalnız komandaları əzbərləməkdən ibarət deyil. Əsas məqsəd image, container, filesystem, networking və persistence anlayışlarının bir-biri ilə necə işlədiyini başa düşməkdir. Docker, Spring Boot, REST API, PostgreSQL, Microservices və CI/CD kimi müasir Backend texnologiyalarını praktiki layihələr üzərində öyrənmək istəyirsinizsə, JET Academy-nin Java Backend Proqramlaşdırma Təlimi ilə tanış ola bilərsiniz.

Python, Django, PostgreSQL, Redis, NGINX və Docker ilə Backend layihələr hazırlamaq istəyirsinizsə, Python Backend Proqramlaşdırma Təlimi ilə də tanış ola bilərsiniz.

Tədris sahələrimiz barədə məlumat almaq üçün qeydiyyatdan keçin

IT sahəsini öyrənməyə başla