Docker Nədir və Necə İşləyir? Yeni Başlayanlar üçün Praktiki Bələdçi
"Mənim kompüterimdə işləyirdi, serverdə niyə işləmədi?" Bu cümlə proqram təminatı dünyasında ən çox eşidilən və həm tərtibatçıların (developers), həm də sistem administratorlarının (sysadmins) kabusuna çevrilən bir ifadədir. Müxtəlif əməliyyat sistemləri, fərqli kitabxana versiyaları və konfiqurasiya fərqlilikləri layihələrin bir mühitdən digərinə köçürülməsi zamanı saysız-hesabsız xətalara yol açır. Məhz bu problemi kökündən həll etmək üçün yaradılan texnologiya Docker adlanır.
Docker, müasir proqram təminatı inkişafı və DevOps dünyasının ən vacib alətlərindən biridir. Bu bələdçidə Docker-in nə olduğunu, necə işlədiyini, virtual maşınlardan fərqini və ondan necə istifadə edəcəyinizi ən sadə və praktiki yollarla öyrənəcəksiniz.
Süni İntellekt Agentləri (AI Agents) Nədir? Biznes Proseslərini Avtomatlaşdırmağın Yolları
Süni İntellekt Agentləri (AI Agents) nədir və biznes proseslərini necə avtomatlaşdırır? CrewAI və LangChain ilə praktiki tətbiq planı və ətraflı bələdçi.
Oxumağa davam et→Konteynerləşdirmə (Containerization) Nədir?
Docker-i başqa düşmək üçün ilk növbədə konteynerləşdirmə anlayışını anlamaq lazımdır. Gəlin bunu real həyatdan bir nümunə ilə izah edək.
Dəniz daşımalarında müxtəlif növ mallar (geyim, elektronika, qida və s.) gəmilərə yüklənməzdən əvvəl standart ölçülü metal konteynerlərə yerləşdirilir. Bu konteynerlər sayəsində gəmi heyəti daxildə nə olduğunu bilmədən bütün yükləri eyni qaydada asanlıqla daşıya bilir.
Proqram təminatında da konteynerləşdirmə eyni funksiyanı yerinə yetirir. Sizin yazdığınız kod, istifadə etdiyiniz proqramlaşdırma dilinin versiyası, kitabxanalar, verilənlər bazası bağlantıları və bütün digər asılılıqlar (dependencies) vahid bir paketə - konteynerə yığılır. Bu konteyner istənilən əməliyyat sistemində (Windows, macOS, Linux) və ya bulud (Cloud) serverində tamamilə eyni şəkildə işləyir.
Qeyd: Konteynerləşdirmə texnologiyası Linux əməliyyat sisteminin daxili xüsusiyyətləri olan "Namespaces" və "Control Groups" (cgroups) üzərində qurulub. Docker bu mürəkkəb texnologiyaları istifadəçilər üçün sadələşdirən bir platformadır.
Docker və Virtual Maşınlar (VM) Arasındakı Fərqlər
Çox vaxt Docker və Virtual Maşınlar (məsələn, VirtualBox, VMware) bir-biri ilə qarışdırılır. Hər ikisi izolyasiya olunmuş mühitlər yaratsa da, işləmə prinsipləri tamamilə fərqlidir.
Virtual Maşınlar fiziki serverin üzərində bir hipervizor (Hypervisor) vasitəsilə tam bir əməliyyat sistemi (Guest OS) işlədir. Bu o deməkdir ki, siz hər bir kiçik tətbiq üçün gigabaytlarla yaddaş tutan və açılması dəqiqələr çəkən yeni bir əməliyyat sistemi quraşdırmalısınız.
Docker isə host əməliyyat sisteminin nüvəsini (Kernel) paylaşır. Konteynerlər bir-birindən izolyasiya olunmuş proseslər kimi işləyir. Buna görə də onlar çox yüngüldür, saniyələr daxilində açılır və sistem resurslarından maksimum dərəcədə qənaətlə istifadə edirlər.
Müqayisə Cədvəli
| Xüsusiyyət | Docker (Konteynerlər) | Virtual Maşınlar (VM) |
|---|---|---|
| Memarlıq | Əməliyyat sistemi səviyyəsində virtuallaşdırma (Host OS Kernel paylaşılır) | Aparat (Hardware) səviyyəsində virtuallaşdırma (Hər birində qonaq OS var) |
| Ölçü | Çox kiçik (adətən meqabaytlar səviyyəsində) | Çox böyük (adətən gigabaytlar səviyyəsində) |
| Başlama Sürəti | Saniyələr daxilində | Dəqiqələr daxilində |
| Resurs Sərfiyyatı | Çox aşağı və effektiv | Yüksək (hər VM üçün ayrılmış RAM və CPU) |
| İzolyasiya | Proses səviyyəsində izolyasiya | Tam aparat səviyyəsində izolyasiya |
Docker-in Əsas Anlayışları
Docker dünyasında tez-tez qarşılaşacağınız dörd əsas anlayış var:
1. Docker Image (Təsvir)
Docker Image, bir konteynerin işləməsi üçün lazım olan bütün faylları, kodları, kitabxanaları və tənzimləmələri özündə saxlayan oxunabilən (read-only) bir şablondur. Bunu bir proqramın quraşdırma faylına (məsələn, .exe və ya .dmg) bənzədə bilərsiniz.
2. Docker Container (Konteyner)
Docker Image-in işə salınmış aktiv formasıdır. Şablon əsasında yaradılmış canlı, işlək mühitdir. Bir Image-dən istənilən sayda fərqli konteyner yaratmaq mümkündür.
3. Dockerfile
Docker Image-i sıfırdan yaratmaq üçün istifadə olunan, addım-addım təlimatları özündə saxlayan sadə bir mətn faylıdır. Docker bu fayldakı əmrləri ardıcıllıqla oxuyaraq avtomatik olaraq layihənizin təsvirini (Image) hazırlayır.
4. Docker Registry (Docker Hub)
Docker Image-lərinin saxlandığı və paylaşıldığı bulud bazasıdır. Ən populyar registry Docker Hub-dır. Burada rəsmi Node.js, Python, MySQL, Ubuntu və minlərlə digər hazır texnologiyaların təsvirləri mövcuddur.
Addım-addım İlk Docker Konteynerinizi Yaradın
İndi isə nəzəriyyədən praktikaya keçək. Sadə bir Node.js veb tətbiqini Docker konteynerinə necə yerləşdirəcəyimizi addım-addım öyrənək.
Addım 1: Docker-i Quraşdırın
İlk növbədə rəsmi Docker saytından (docker.com) əməliyyat sisteminizə uyğun olan Docker Desktop proqramını yükləyin və quraşdırın.
Addım 2: Layihə Fayllarını Hazırlayın
Kompüterinizdə yeni bir qovluq yaradın və daxilində sadə bir Node.js tətbiqi üçün aşağıdakı iki faylı yaradın:
server.js faylı:
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.send('Salam! Bu tətbiq Docker konteyneri daxilində uğurla işləyir!');
});
app.listen(PORT, () => {
console.log('Server ' + PORT + ' portunda aktivdir.');
});
package.json faylı:
{
"name": "docker-demo",
"version": "1.0.0",
"main": "server.js",
"dependencies": {
"express": "^4.18.2"
}
}
Addım 3: Dockerfile Yaradın
Eyni qovluqda adı sadəcə Dockerfile (heç bir uzantısı olmadan, məsələn .txt olmadan) olan bir fayl yaradın və daxilinə aşağıdakı sətirləri yazın:
# Rəsmi Node.js təsvirindən istifadə edirik
FROM node:18-alpine
# Konteyner daxilində işçi qovluğu təyin edirik
WORKDIR /usr/src/app
# Layihə asılılıqlarını kopyalayırıq
COPY package*.json ./
# Asılılıqları quraşdırırıq
RUN npm install
# Bütün layihə fayllarını konteynerə kopyalayırıq
COPY . .
# Tətbiqin işləyəcəyi portu açırıq
EXPOSE 3000
# Tətbiqi işə salmaq üçün əmri təyin edirik
CMD ["node", "server.js"]
Addım 4: Docker Image-i Qurun (Build)
Terminalı (və ya Command Prompt) açın, layihənizin olduğu qovluğa keçid edin və aşağıdakı əmri yazaraq öz Docker Image-inizi yaradın:
docker build -t mənim-ilk-tətbiqim .
İzah:
-tparametri təsvirə ad (tag) vermək üçündür. Sondakı nöqtə.isə Docker-ə cari qovluqdakı Dockerfile-dan istifadə etməsini bildirir.
Addım 5: Konteyneri İşə Salın (Run)
Image uğurla yaradıldıqdan sonra, onu konteyner daxilində işə salmaq üçün bu əmri yazın:
docker run -p 8080:3000 mənim-ilk-tətbiqim
İzah:
-p 8080:3000parametri kompüterinizin 8080 portunu konteynerin daxili 3000 portuna yönləndirir (port mapping).
İndi brauzerinizdə http://localhost:8080 ünvanına daxil olun. Ekranda "Salam! Bu tətbiq Docker konteyneri daxilində uğurla işləyir!" yazısını görəcəksiniz.
Docker Compose Nədir?
Real layihələr adətən yalnız bir tətbiqdən ibarət olmur. Məsələn, sizin bir Node.js tətbiqiniz, bir PostgreSQL verilənlər bazanız və bir Redis keş serveriniz ola bilər. Hər biri üçün ayrı-ayrı Docker əmrləri yazmaq olduqca yorucudur.
Məhz bu problemi həll etmək üçün Docker Compose istifadə olunur. Docker Compose, çoxlu konteynerdən ibarət tətbiqləri tək bir YAML faylı ilə idarə etməyə imkan verir.
Layihə qovluğunuzda docker-compose.yml adlı bir fayl yaradaraq tətbiqinizi və verilənlər bazanızı bu şəkildə birləşdirə bilərsiniz:
version: '3.8'
services:
web_app:
build: .
ports:
- "8080:3000"
depends_on:
- database
database:
image: postgres:15-alpine
environment:
POSTGRES_USER: istifadeci
POSTGRES_PASSWORD: gizlisifre
POSTGRES_DB: mehsullar_db
ports:
- "5432:5432"
Bu faylı yaratdıqdan sonra terminalda sadəcə aşağıdakı əmri yazmaqla hər iki xidməti eyni anda işə sala bilərsiniz:
docker-compose up
Konteynerləri dayandırmaq üçün isə docker-compose down əmrindən istifadə olunur.
Docker-in Proqram Təminatında Üstünlükləri
Docker-in həm fərdi tərtibatçılar, həm də böyük texnologiya şirkətləri tərəfindən bu qədər sevilməsinin əsas səbəbləri bunlardır:
- Mühit Uyğunluğu (Consistency): Kodunuz lokal kompüterinizdə necə işləyirsə, test və real istehsalat (production) serverlərində də eyni şəkildə işləyəcək.
- Sürətli Quraşdırma (Onboarding): Komandaya yeni qoşulan proqramçı günlərlə mühit quraşdırmaqla məşğul olmur. Sadəcə layihəni yükləyir və
docker-compose upyazaraq işə başlayır. - Mikroservis Arxitekturası: Böyük layihələri kiçik, müstəqil və asanlıqla idarə oluna bilən hissələrə (servislərə) bölmək üçün Docker ideal vasitədir.
- Resurs Qənaəti: Eyni serverdə onlarla fərqli konteyneri minimal resurs sərfiyyatı ilə işlətmək mümkündür.
Nəticə və Növbəti Addımlar
Docker, müasir texnologiya dünyasında sadəcə bir üstünlük deyil, artıq bir standartdır. Proqram təminatının hazırlanması, sınaqdan keçirilməsi və serverlərə yerləşdirilməsi proseslərini inanılmaz dərəcədə asanlaşdırır.
Əgər Docker-i mənimsəmisinizsə, növbəti addım olaraq konteynerlərin böyük miqyasda idarə edilməsi (orchestration) üçün istifadə olunan Kubernetes texnologiyasını öyrənə bilərsiniz. Docker-dən istifadə etməyə bu gün başlayın və layihələrinizi bulud mühitinə tam təhlükəsiz və sürətli şəkildə daşıyın!
Jamil Sultanli
Rəqəmsal marketinq, SEO və startuplar üzrə məsləhətçi. Datanın tətbiqi ilə işlərin miqyaslanması (Scaling) və inkişaf (Growth) strategiyalarının idarə olunması haqqında yazır.