Docker Compose: аз таҳия то истеҳсолот

Тарҷумаи транскрипсияи подкаст, ки бо интизории оғози курс омода шудааст "Администратори Linux"

Docker Compose: аз таҳия то истеҳсолот

Docker Compose воситаи аҷибест барои эҷоди кор
муҳити барои стек истифодашуда дар барномаи шумо. Он ба шумо имкон медиҳад, ки муайян кунед
ҳар як ҷузъи барномаи шумо бо риояи синтаксиси равшан ва оддӣ дар ЯМЛ-
файлҳо
.

Бо пайдоиши docker compose v3 ин файлҳои YAML метавонанд бевосита дар муҳити истеҳсолӣ ҳангоми кор бо истифода бурда шаванд
кластер Тӯдаи докер.

Аммо оё ин маънои онро дорад, ки шумо метавонед ҳамон файли docker-compose -ро дар
раванди рушд ва дар муҳити истеҳсолот? Ё ҳамон файлро барои
ба сахна гузоштан? Хуб, дар маҷмӯъ, бале, аммо барои ин функсия мо ба инҳо ниёз дорем:

  • Интерполясияи тағирёбанда: истифодаи тағирёбандаҳои муҳити зист барои баъзеҳо
    арзишҳое, ки дар ҳар як муҳит тағйир меёбанд.
  • Тағйирёбии конфигуратсия: қобилияти муайян кардани сония (ё ягон
    файли дигари минбаъда) docker-compose, ки чизеро дар бораи он тағир медиҳад
    аввал, ва docker compose барои якҷоя кардани ҳарду файл ғамхорӣ мекунад.

Тафовут байни файлҳои таҳия ва истеҳсолӣ

Ҳангоми таҳия, шумо эҳтимоли зиёд мехоҳед, ки тағироти кодро дар
вақти ҳақиқӣ. Барои ин, одатан ҳаҷми бо рамзи сарчашма насб карда мешавад
контейнере, ки барои барномаи шумо вақти корӣ дорад. Аммо барои муҳити истеҳсолӣ
Ин усул мувофиқ нест.

Дар истеҳсолот, шумо як кластер бо гиреҳҳои зиёд доред ва ҳаҷм маҳаллӣ аст
нисбат ба гиреҳе, ки дар он контейнер (ё хидмати) шумо кор мекунад, бинобар ин шумо ин корро накунед
шумо метавонед рамзи сарчашмаро бе амалиёти мураккабе, ки дар бар мегиранд, насб кунед
ҳамоҳангсозии код, сигналҳо ва ғайра.

Ба ҷои ин, мо одатан мехоҳем тасвиреро бо версияи мушаххаси рамзи шумо эҷод кунем.
Одат аст, ки онро бо теги мувофиқ қайд кунед (шумо метавонед семантикиро истифода баред
версия ё системаи дигар ба ихтиёри шумо).

Барқароркунии конфигуратсия

Бо назардошти фарқиятҳо ва вобастагии шумо метавонанд дар сенарияҳо фарқ кунанд
таҳия ва истеҳсол, маълум аст, ки ба мо файлҳои конфигуратсияи гуногун ниёз доранд.

Docker compose якҷоя кардани файлҳои эҷоди гуногунро дастгирӣ мекунад
конфигуратсияи ниҳоиро ба даст оред. Чӣ тавр ин корро дар мисол дидан мумкин аст:

$ 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

Тавре ки гуфта шуд, docker compose муттаҳид кардани эҷодҳои сершуморро дастгирӣ мекунад -
файлҳо, ин ба шумо имкон медиҳад, ки параметрҳои гуногунро дар файли дуюм бекор кунед. Барои намуна:

$ 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

Ин синтаксис дар вақти таҳия, вақте ки фармон хеле қулай нест
борхо ичро кардан лозим меояд.

Хушбахтона, docker compose ба таври худкор файли махсусеро, ки ном дорад, ҷустуҷӯ мекунад
docker-compose.override.yml барои барҳам додани арзишҳо Доктор-compose.yml. Агар
номи файли дуюмро иваз кунед, шумо ҳамон натиҷаро мегиред, танҳо бо истифода аз фармони аслӣ:

$ 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

Хуб, дар хотир доштан осонтар аст.

Интерполятсияи тағирёбандаҳо

Дастгирии файлҳои конфигуратсия интерполяция
тағирёбандаҳо
ва арзишҳои пешфарз. Яъне, шумо метавонед амалҳои зеринро иҷро кунед:

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

Ва агар шумо сохтани docker-compose (ё push) бидуни тағирёбандаи муҳити зист
$MY_SERVICE_VERSION, арзиш истифода мешавад охиринаммо агар шумо муқаррар кунед
арзиши тағирёбандаи муҳити зист пеш аз сохтмон, он ҳангоми сохтмон ё тела истифода мешавад
ба реестр private.registry.mine.

Принсипҳои ман

Равишҳое, ки барои ман кор мекунанд, метавонанд барои шумо низ кор кунанд. Ман ба инҳо пайравӣ мекунам
қоидаҳои оддӣ:

  • Ҳама стекҳои ман барои истеҳсол, рушд (ё муҳитҳои дигар) тавассути муайян карда мешаванд
    docker-compose файлҳо
  • Файлҳои конфигуратсия барои то ҳадди имкон фаро гирифтани тамоми муҳити ман лозиманд
    аз такрор пешгирӣ кунед.
  • Барои кор дар ҳар як муҳит ба ман як фармони оддӣ лозим аст.
  • Конфигуратсияи асосӣ дар файл муайян карда мешавад Доктор-compose.yml.
  • Тағирёбандаҳои муҳити зист барои муайян кардани тегҳои тасвир ё дигар истифода мешаванд
    тағирёбандаҳое, ки метавонанд аз муҳит ба муҳит фарқ кунанд (саҳна, ҳамгироӣ,
    истеҳсолот).
  • Арзишҳои тағирёбандаҳои истеҳсолӣ ҳамчун арзишҳо истифода мешаванд
    ба таври нобаёнӣ, ин хатарҳоро кам мекунад, агар стек дар истеҳсолот бидуни он оғоз шавад
    тағирёбандаи муҳити зистро муқаррар кунед.
  • Барои оғози хидмат дар муҳити истеҳсолӣ, фармонро истифода баред ҷойгиркунии стек докер - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Муҳити корӣ бо истифода аз фармон оғоз мешавад docker-бардоштан -d.

Биёед як мисоли оддиро дида бароем.

# 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
...

Ман метавонам истифода кунам docker-compose (docker-compose up)барои ба кор андохтани стек
режими рушд бо рамзи сарчашма насбшуда /project/src.

Ман метавонам ин файлҳоро дар истеҳсолот истифода барам! Ва ман бешубҳа метавонистам истифода барам
ҳамон файл Доктор-compose.yml барои ба сахна гузоштан. Барои васеъ кардани ин ба
истеҳсол, ман танҳо лозим аст, ки тасвирро бо теги пешакӣ муайяншуда созам ва фиристам
дар марҳилаи CI:

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

Дар истеҳсолот, онро бо истифода аз фармонҳои зерин иҷро кардан мумкин аст:

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

Ва агар шумо хоҳед, ки дар саҳна ҳамин корро кунед, шумо бояд танҳо муайян кунед
тағйирёбандаҳои муҳити зарурӣ барои кор дар муҳити саҳнавӣ:

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

Дар натиҷа, мо ду файли гуногуни docker-compose-ро истифода бурдем, ки бе он
Конфигуратсияҳои такрорӣ метавонанд барои ҳама гуна муҳити шумо истифода шаванд!

Дар бораи курс маълумоти бештар гиред "Администратори Linux"

Манбаъ: will.com

Илова Эзоҳ