3.1 docker-compose.yml
faylı
docker-compose.yml
faylı — bu, Docker Compose tərəfindən çox konteynerli tətbiqlərin müəyyənləşdirilməsi və idarə olunması üçün istifadə edilən əsas konfiqurasiya faylıdır. O, hansı konteynerlərin (servislərin) işə salınmalı olduğunu, onların bir-biri ilə necə qarşılıqlı əlaqədə olacağını və hansı resurslara ehtiyac duyduğunu təsvir edir. Bu mühazirədə docker-compose.yml
faylının strukturunu və servislərin konfiqurasiyası üçün istifadə olunan əsas direktivləri ətraflı şəkildə nəzərdən keçirəcəyik.
docker-compose.yml
faylının strukturu
docker-compose.yml
faylı bir neçə bölmədən ibarətdir, hər biri tətbiqlərin konfiqurasiyasının müxtəlif aspektlərini təsvir edir. Əsas bölmələrə daxildir:
- version
- services
- volumes
- networks
3.2 Əsas direktivlər
1. version
version direktivi docker-compose faylında istifadə edilən Docker Compose sintaksisinin versiyasını müəyyən edir. Məqalənin yazıldığı anda ən çox yayılmış versiyalar 2 və 3-dür.
version: '3.8'
2. services
services bölməsi Compose tərəfindən yaradılıb işə salınmalı olan konteynerləri müəyyən edir. Hər bir servis özünəməxsus konfiqurasiyalı ayrıca konteyneri təmsil edir.
Nümunə:
services:
web:
image: nginx:latest
ports:
- "80:80"
db:
image: mongo:latest
volumes:
- mongo-data:/data/db
Bu nümunədə iki servis müəyyən edilib: web
və db
.
3. volumes
volumes bölməsi məlumatların saxlanması üçün konteynerlərə qoşula biləcək həcmləri müəyyən etmək üçün istifadə olunur.
Nümunə:
volumes:
mongo-data:
4. networks
networks bölməsi konteynerlərin işləyəcəyi xüsusi şəbəkələri təyin etməyə imkan verir, bu isə izolyasiya və şəbəkə bağlantılarının konfiqurasiya olunmasını təmin edir. Əgər şəbəkələr göstərilməyibsə, Docker Compose defolt bir şəbəkə yaradacaq və bütün servislər o şəbəkəyə qoşulacaq.
Nümunə:
networks:
front-end:
back-end:
3.3 Servislərin tənzimlənməsi üçün direktivlər
Servislərin tənzimlənməsində əsas direktivlər
1. image
image direktivi konteyner yaratmaq üçün istifadə olunacaq imici göstərir.
Nümunə:
services:
web:
image: nginx:latest
2. build
build direktivi istifadə olunacaq Dockerfile-ın yolunu göstərmək üçün istifadə olunur.
Nümunə:
services:
app:
build: ./app
3. ports
ports direktivi host maşından konteynerə açıq və yönləndirilmiş portları göstərə bilər.
Nümunə:
services:
web:
image: nginx:latest
ports:
- "80:80"
4. volumes
volumes direktivi konteynerlərə həcmləri montaj edir, beləliklə, konteynerləri yenidən işə saldıqdan sonra da məlumatlar qorunur.
Nümunə:
services:
db:
image: mongo:latest
volumes:
- mongo-data:/data/db
5. environment
environment direktivi konteyner üçün mühit dəyişənlərini təyin edir.
Nümunə:
services:
app:
image: myapp:latest
environment:
- NODE_ENV=production
- API_KEY=1234567890
6. depends_on
depends_on direktivi bu servisin digər servislərdən asılı olduğunu və onlardan sonra işə salınacağını göstərir.
Vacibdir!
Servisinizi işə salarkən sizdə tam bir zəmanət yoxdur ki, işləməsi üçün vacib olan bütün digər servislər normal işləyəcək. Onlar işə düşəcək – bəli, amma onların tam çalışması zəmanət deyil. Bu problemi health-check-lərlə həll etmək olar, amma bunu sonra izah edərik.
Nümunə:
services:
web:
image: nginx:latest
depends_on:
- db
db:
image: mongo:latest
7. command
command direktivi konteynerin işə salınarkən icra ediləcək komandanı yenidən müəyyən etmək üçün istifadə olunur.
Nümunə:
services:
app:
image: myapp:latest
command: python app.py
8. networks
networks direktivi servisi bir və ya bir neçə şəbəkəyə qoşur.
Nümunə:
services:
web:
image: nginx:latest
networks:
- front-end
db:
image: mongo:latest
networks:
- back-end
3.4 Tam nümunə
Tam docker-compose.yml
faylının nümunəsi
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- app
networks:
- front-end
app:
build: ./app
volumes:
- ./app:/usr/src/app
environment:
- NODE_ENV=production
networks:
- front-end
- back-end
db:
image: mongo:latest
volumes:
- mongo-data:/data/db
networks:
- back-end
volumes:
mongo-data:
networks:
front-end:
back-end:
Bu nümunədə:
- Üç servis müəyyən edilib:
web
,app
vədb
. -
web
Nginx imicindən istifadə edir, konfiqurasiya faylını montaj edir vəapp
servisindən asılıdır. -
app
lokal Dockerfile-dən yığılır, tətbiqin ilkin mənbə kodunu montaj edir və mühit dəyişənlərindən istifadə edir. -
db
MongoDB imicindən istifadə edir və məlumatların saxlanması üçün volume montaj edir. - Servislərin qarşılıqlı əlaqəsini idarə etmək və izolyasiya üçün iki volume və iki şəbəkə yaradılıb.
Qeyd: bir volume – bu mongo-data
, ikincisi isə host-maşından montaj edilmiş direktoriya.
GO TO FULL VERSION