Docker Compose: inkişafdan istehsala qədər

Kursun başlaması ərəfəsində hazırlanmış podkastin transkripsiyasının tərcüməsi "Linux Administrator"

Docker Compose: inkişafdan istehsala qədər

Docker Compose iş masası yaratmaq üçün heyrətamiz bir vasitədir
tətbiqinizdə istifadə olunan yığın üçün mühit. müəyyən etməyə imkan verir
aydın və sadə sintaksisə əməl edərək tətbiqinizin hər bir komponenti YAML-
fayllar
.

Gəlişi ilə docker tərtib v3 bu YAML faylları işləyərkən birbaşa istehsal mühitində istifadə edilə bilər
klaster Docker sürüsü.

Ancaq bu, eyni docker-compose faylından istifadə edə biləcəyiniz deməkdir
inkişaf prosesi və istehsal mühiti? Və ya eyni fayldan istifadə edin
səhnələşdirmə? Ümumiyyətlə, bəli, lakin belə bir funksionallıq üçün bizə aşağıdakılar lazımdır:

  • Dəyişən interpolyasiya: bəziləri üçün mühit dəyişənlərindən istifadə
    hər mühitdə dəyişən dəyərlər.
  • Konfiqurasiyanın ləğvi: ikincini (və ya hər hansı birini) təyin etmək imkanı
    başqa bir təqib) ilə bağlı bir şeyi dəyişdirəcək docker-compose faylı
    birincisi və docker compose hər iki faylı birləşdirməyə diqqət yetirəcək.

İnkişaf və istehsal faylları arasındakı fərqlər

İnkişaf zamanı, çox güman ki, kod dəyişikliklərini yoxlamaq istəyəcəksiniz
real vaxt rejimi. Bunu etmək üçün, adətən, mənbə kodu olan həcm quraşdırılır
proqramınızın icra müddətini ehtiva edən konteyner. Ancaq istehsal mühiti üçün
bu yol uyğun deyil.

İstehsalda çox qovşaqlı çoxluq var və həcm yerlidir
konteynerinizin (və ya xidmətinizin) işlədiyi hosta nisbətən, siz bunu etmirsiniz
daxil olmaqla mürəkkəb əməliyyatlar olmadan mənbə kodunu quraşdıra bilərsiniz
kod sinxronizasiyası, siqnallar və s.

Bunun əvəzinə biz adətən kodunuzun müəyyən versiyası ilə şəkil yaratmaq istəyirik.
Onu müvafiq etiketlə qeyd etmək adətdir (semantik istifadə edə bilərsiniz
versiya və ya seçdiyiniz başqa sistem).

Konfiqurasiyanın ləğvi

Fərqləri və asılılıqlarınızın ssenarilərdə fərqli ola biləcəyini nəzərə alaraq
inkişaf və istehsal, fərqli konfiqurasiya fayllarına ehtiyacımız olacağı aydındır.

Docker compose müxtəlif tərtib fayllarını birləşdirməyi dəstəkləyir
son konfiqurasiyanı əldə edin. Bunun necə işlədiyini bir nümunədə görmək olar:

$ cat docker-compose.yml
version: "3.2"

services:
  whale:
    image: docker/whalesay
    command: ["cowsay", "hello!"]
$ docker-compose up
Creating network "composeconfigs_default" with the default driver
Starting composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1  |  ________
whale_1  | < hello! >
whale_1  |  --------
whale_1  |     
whale_1  |      
whale_1  |       
whale_1  |                     ##        .
whale_1  |               ## ## ##       ==
whale_1  |            ## ## ## ##      ===
whale_1  |        /""""""""""""""""___/ ===
whale_1  |   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
whale_1  |        ______ o          __/
whale_1  |                     __/
whale_1  |           __________/
composeconfigs_whale_1 exited with code 0

Dediyi kimi, docker compose birdən çox kompozisiyanı birləşdirməyi dəstəkləyir.
faylları, bu, ikinci fayldakı müxtəlif seçimləri ləğv etməyə imkan verir. Misal üçün:

$ cat docker-compose.second.yml
version: "3.2"
services:
  whale:
    command: ["cowsay", "bye!"]

$ docker-compose -f docker-compose.yml -f docker-compose.second.yml up
Creating composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1  |  ______
whale_1  | < bye! >
whale_1  |  ------
whale_1  |     
whale_1  |      
whale_1  |       
whale_1  |                     ##        .
whale_1  |               ## ## ##       ==
whale_1  |            ## ## ## ##      ===
whale_1  |        /""""""""""""""""___/ ===
whale_1  |   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
whale_1  |        ______ o          __/
whale_1  |                     __/
whale_1  |           __________/
composeconfigs_whale_1 exited with code 0

Bu sintaksis inkişaf prosesində çox rahat deyil, əmr verildikdə
dəfələrlə etmək lazımdır.

Xoşbəxtlikdən, docker compose avtomatik olaraq adlı xüsusi faylı axtarır
docker-compose.override.yml dəyərləri üstələmək docker-compose.yml. Əgər
ikinci faylın adını dəyişdirin, eyni nəticəni əldə edəcəksiniz, yalnız orijinal əmrdən istifadə edərək:

$ mv docker-compose.second.yml docker-compose.override.yml
$ docker-compose up
Starting composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1  |  ______
whale_1  | < bye! >
whale_1  |  ------
whale_1  |     
whale_1  |      
whale_1  |       
whale_1  |                     ##        .
whale_1  |               ## ## ##       ==
whale_1  |            ## ## ## ##      ===
whale_1  |        /""""""""""""""""___/ ===
whale_1  |   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
whale_1  |        ______ o          __/
whale_1  |                     __/
whale_1  |           __________/
composeconfigs_whale_1 exited with code 0

Yaxşı, bunu yadda saxlamaq daha asandır.

Dəyişən İnterpolyasiya

Konfiqurasiya faylları dəstəyi interpolyasiya
dəyişənlər
və standart dəyərlər. Yəni aşağıdakıları edə bilərsiniz:

services:
  my-service:
    build:
      context: .
    image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
...

Və əgər docker-compose build (və ya təkan) mühit dəyişəni olmadan
$MY_SERVICE_VERSION, dəyəri istifadə olunacaq sonancaq təyin etsəniz
qurmadan əvvəl ətraf mühit dəyişəninin dəyəri, tikinti və ya itələmə zamanı istifadə ediləcək
qeydiyyatdan keçmək şəxsi.registr.mina.

Mənim prinsiplərim

Mənim üçün əlverişli olan yanaşmalar sizin üçün faydalı ola bilər. Mən bunu izləyirəm
sadə qaydalar:

  • İstehsal, inkişaf (və ya digər mühitlər) üçün bütün yığınlarım vasitəsilə müəyyən edilir
    docker-faylları tərtib edin.
  • Bütün mühitləri əhatə etmək üçün lazım olan konfiqurasiya faylları, maks.
    təkrarlamadan çəkinin.
  • Hər mühitdə işləmək üçün bir sadə əmrə ehtiyacım var.
  • Əsas konfiqurasiya faylda müəyyən edilir docker-compose.yml.
  • Ətraf mühit dəyişənləri şəkil teqlərini və ya digərlərini müəyyən etmək üçün istifadə olunur
    mühitdən mühitə dəyişə bilən dəyişənlər (səhnələşdirmə, inteqrasiya,
    istehsal).
  • İstehsal üçün dəyişənlərin dəyərləri tərəfindən dəyərlər kimi istifadə olunur
    defolt olaraq, yığını istehsalda olmadan işlətsəniz, bu, riskləri minimuma endirir
    mühit dəyişənini təyin edin.
  • İstehsal mühitində xidmətə başlamaq üçün əmrdən istifadə edin docker stack deploy - kompoze faylı docker-compose.yml - registr-auth my-stack-name ilə.
  • İş mühiti əmrlə işə salınır docker-tərtib -d.

Sadə bir misala baxaq.

# docker-compose.yml
...
services:
  my-service:
    build:
      context: .
    image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
    environment:
      API_ENDPOINT: ${API_ENDPOINT:-https://production.my-api.com}
...

И

# docker-compose.override.yml
...
services:
  my-service:
    ports: # This is needed for development!
      - 80:80
    environment:
      API_ENDPOINT: https://devel.my-api.com
    volumes:
      - ./:/project/src
...

istifadə edə bilərəm docker-compose (docker-compose)yığını işlətmək üçün
quraşdırılmış mənbə kodu ilə inkişaf rejimi /layihə/src.

Eyni faylları istehsalda istifadə edə bilərəm! Və dəqiq istifadə edə bilərdim
eyni fayl docker-compose.yml səhnələşdirmə üçün. Bunu genişləndirmək üçün
istehsal, Mən sadəcə əvvəlcədən təyin edilmiş etiket ilə şəkil qurmaq və göndərmək lazımdır
CI mərhələsində:

export MY_SERVICE_VERSION=1.2.3
docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml push

İstehsalda bu, aşağıdakı əmrlərlə işlədilə bilər:

export MY_SERVICE_VERSION=1.2.3
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth

Səhnədə də eyni şeyi etmək istəyirsinizsə, sadəcə müəyyən etməlisiniz
səhnə mühitində işləmək üçün zəruri mühit dəyişənləri:

export MY_SERVICE_VERSION=1.2.3
export API_ENDPOINT=http://staging.my-api.com
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth

Nəticədə biz iki müxtəlif docker-tərtib faylı istifadə etdik, onlar olmadan
dublikat konfiqurasiyalar hər hansı bir mühitiniz üçün istifadə edilə bilər!

Kurs haqqında ətraflı məlumat əldə edin "Linux Administrator"

Mənbə: www.habr.com

Добавить комментарий