7.1 Həcm montajı
Həcm və şəbəkələrin montajı — Docker Compose-də əsas anlayışlardır, hansı ki, çevik və effektiv çox konteynerli tətbiqlər yaratmağa imkan verir. Volumes (həcm) konteynerlərin xaricində saxlanmalıdır, məlumatların saxlanılması üçün istifadə olunur, şəbəkələr (networks) isə konteynerlər arasında qarşılıqlı əlaqəni təmin edir. Bu mühazirədə həcm və şəbəkələrdən Docker Compose-də necə istifadə edəcəyimizi ətraflı şəkildə nəzərdən keçirəcəyik.
Docker-də həcm məlumatları konteynerlərin xaricində saxlamağa imkan verir və konteynerlər dayandırıldıqdan və ya silindikdən sonra belə məlumatları əlçatan edir. Bu xüsusilə verilənlər bazası məlumatlarını, log fayllarını və digər uzunmüddətli məlumatları saxlamaq üçün çox faydalıdır.
Həcm növləri:
- Adlandırılmış həcm (Named Volumes): Docker tərəfindən idarə olunur və ev sahibi maşında xüsusi bir qovluqda saxlanılır.
- Bağlantılı həcm (Bind Mounts): Ev sahibi maşında göstərilmiş bir qovluqdan konteynerə montaj edilir.
Docker Compose-də həcm təyin etmək
Adlandırılmış həcm nümunəsi
Bu nümunədə postgres-data
adlı adlandırılmış bir həcm yaradılmışdır, hansı ki, /var/lib/postgresql/data
qovluğuna montaj edilir konteynerin daxilində db
.
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Bağlantılı həcm nümunəsi
Bu nümunədə yerli qovluqlar və fayllar nginx.conf və html montaj olunur web konteynerinə bağlantılı həcm kimi.
version: '3.8'
services:
web:
image: nginx:latest
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./html:/usr/share/nginx/html
7.2 Şəbəkələrin montajı
Docker Compose-da şəbəkələr konteynerlərin bir-biri ilə əlaqə qurmasına imkan verir. Hər bir konteyner bir və ya bir neçə şəbəkəyə qoşula bilər ki, bu da izolasiya və trafikin idarə edilməsini təmin edir.
Şəbəkə növləri:
- Körpü şəbəkələri (Bridge): Defolt olaraq konteynerlər körpü şəbəkəsinə qoşulur, bu da onların bir host daxilində qarşılıqlı əlaqəsini təmin edir.
- Overlay şəbəkələri (Overlay): Docker Swarm klasterində müxtəlif hostlarda işə salınmış konteynerlərin qarşılıqlı əlaqəsi üçün istifadə olunur.
- Şəbəkə plaginləri (Network Plugins): Daha kompleks konfiqurasiyalar üçün üçüncü tərəf şəbəkə driver-lərini istifadə etməyə imkan verir.
İstifadəçi şəbəkələrinin yaradılması və istifadəsi nümunəsi
Bu nümunədə iki istifadəçi şəbəkəsi front-end və back-end yaradılır. app servisi hər iki şəbəkəyə qoşulub, web servisi yalnız front-end-ə, db servisi isə yalnız back-end-ə qoşulub.
version: '3.8'
services:
web:
image: nginx:latest
networks:
- front-end
app:
image: myapp:latest
networks:
- front-end
- back-end
db:
image: postgres:latest
networks:
- back-end
networks:
front-end:
back-end:
Praktiki məsləhətlər:
- Adlandırılmış volum-lardan istifadə: Adlandırılmış volum-lar Docker tərəfindən idarə olunur və məlumatların istifadəsini və idarə olunmasını asanlaşdırır. Adlandırılmış volum-ları eyni vaxtda bir neçə servislərə qoşmaq olar. Məsələn, backend servisi log-ları yazır, monitorinq servisi isə onlara analiz edir və "error" səviyyəli mesajları görəndə xəbər verir.
- Şəbəkələrin ayrılması: Bir neçə şəbəkə istifadə etmək, tətbiqin müxtəlif hissələrini izolyasiya etməyə və onların qarşılıqlı əlaqəsini nəzarət etməyə imkan verir.
- Konfiqurasiya fayllarının saxlanması: Konfiqurasiya fayllarının montajı üçün bağlı volum-lardan istifadə edin, bu da şəkillərin yenidən yaradılmadan konfiqurasiyanı asanlıqla dəyişməyə imkan verir.
- Şəbəkələrin təhlükəsizliyi: Şəbəkələrə çıxışı məhdudlaşdırın ki, yalnız lazımi konteynerlər qarşılıqlı əlaqə qura bilsin, bu da tətbiqin təhlükəsizliyini artırır.
7.3 Həcm və şəbəkələrin istifadəsinə nümunələr
Docker Compose-də həcm və şəbəkələrin istifadəsinə nümunələr
Nümunə 1: Web server və məlumat bazası olan tətbiq
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./html:/usr/share/nginx/html
networks:
- webnet
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- db-data:/var/lib/postgresql/data
networks:
- webnet
volumes:
db-data:
networks:
webnet:
Bu nümunədə:
- nginx web serveri və postgres məlumat bazası bir webnet şəbəkəsinə qoşulub, bu onların qarşılıqlı əlaqəsini təmin edir. Əgər şəbəkə birdirsə, onu göstərməyə ehtiyac yoxdur – default şəbəkə yaradılacaq.
- Məlumat bazasının məlumatları adlandırılmış db-data həcmində saxlanılır, bu isə konteynerlərin yenidən yüklənməsi zamanı onların qorunmasını təmin edir.
Nümunə 2: Bir neçə səviyyəli tətbiq
version: '3.8'
services:
frontend:
image: myfrontend:latest
networks:
- front-tier
- back-tier
backend:
image: mybackend:latest
networks:
- back-tier
volumes:
- backend-data:/var/lib/backend
database:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db-data:/var/lib/mysql
networks:
- back-tier
volumes:
backend-data:
db-data:
networks:
front-tier:
back-tier:
Bu nümunədə:
- İki şəbəkə yaradılıb: front-tier və back-tier.
- frontend xidməti hər iki şəbəkəyə qoşulub, bu ona həm backend, həm də xarici müştərilərlə qarşılıqlı əlaqə qurmağa imkan verir.
- backend və database xidmətləri yalnız back-tier şəbəkəsinə qoşulublar ki, onların qarşılıqlı əlaqəsi təmin edilsin.
- backend və database xidmətlərinin məlumatları ayrılmış adlandırılmış backend-data və db-data həcmlərində saxlanılır.
GO TO FULL VERSION