CodeGym /Kurslar /Docker SELF /docker-compose.yml faylının yaradılması

docker-compose.yml faylının yaradılması

Docker SELF
Səviyyə , Dərs
Mövcuddur

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:

  1. version
  2. services
  3. volumes
  4. 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.

Yaml

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ə:

Yaml

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: webdb.

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ə:

Yaml

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ə:

Yaml

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ə:

Yaml

services:
  web:
    image: nginx:latest

2. build

build direktivi istifadə olunacaq Dockerfile-ın yolunu göstərmək üçün istifadə olunur.

Nümunə:

Yaml

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ə:

Yaml

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ə:

Yaml

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ə:

Yaml

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ə:

Yaml

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ə:

Yaml

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ə:

Yaml

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

Yaml

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, appdb.
  • 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.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION