Docker Compose: иштеп чыгуудан өндүрүшкө чейин

Курстун башталышын утурлай даярдалган подкаст транскрипциясынын котормосу "Linux администратору"

Docker Compose: иштеп чыгуудан өндүрүшкө чейин

Docker Compose - бул жумуш түзүү үчүн укмуштуудай курал
колдонмоңузда колдонулган стек үчүн чөйрө. аныктоого мүмкүндүк берет
колдонмоңуздун ар бир компоненти, так жана жөнөкөй синтаксистен кийин YAML-
файлдар
.

Келиши менен докер түзүү v3 бул YAML файлдары менен иштөөдө түздөн-түз өндүрүш чөйрөсүндө колдонсо болот
кластер Докер үйүрү.

Бирок бул сиз ошол эле докер-түзүүчү файлды колдоно аласыз дегенди билдиреби
иштеп чыгуу процесси жана өндүрүш чөйрөсүндө? Же ошол эле файлды колдонуңуз
сахналаштыруу? Ооба, жалпысынан, ооба, бирок бул функция үчүн бизге төмөнкүлөр керек:

  • Өзгөрмөлөрдүн интерполяциясы: кээ бирлери үчүн чөйрө өзгөрмөлөрүн колдонуу
    ар бир чөйрөдө өзгөрүп турган баалуулуктар.
  • Конфигурацияны жокко чыгаруу: секунданы аныктоо мүмкүнчүлүгү (же кандайдыр бир
    башка кийинки) бир нерсени өзгөртө турган докер-түзүүчү файл
    биринчиден, жана докер түзүү эки файлды бириктирүүгө кам көрөт.

Иштеп чыгуу жана өндүрүш файлдарынын ортосундагы айырмачылыктар

Иштеп чыгуу учурунда сиз коддун өзгөртүүлөрүн текшергиңиз келет
чыныгы убакыт. Бул үчүн, адатта, баштапкы коду менен көлөмү орнотулган
колдонмоңуз үчүн иштөө убактысын камтыган контейнер. Бирок өндүрүш чөйрөсү үчүн
Бул ыкма ылайыктуу эмес.

Өндүрүштө сизде көп түйүндөр бар кластер бар, көлөмү жергиликтүү
сиздин контейнериңиз (же кызматыңыз) иштеп жаткан түйүнгө салыштырмалуу, андыктан сиз андай эмес
камтылган татаал операцияларсыз баштапкы кодду орното аласыз
код синхрондоштуруу, сигналдар ж.б.

Анын ордуна, биз адатта кодуңуздун белгилүү бир версиясы менен сүрөт түзгүбүз келет.
Аны тиешелүү теги менен белгилөө салтка айланган (семантикалык
версия же башка система сиздин каалооңуз боюнча).

Конфигурацияны жокко чыгаруу

Айырмачылыктарды жана көз карандылыктарыңыз сценарийлерде ар кандай болушу мүмкүн экенин эске алып
иштеп чыгуу жана өндүрүү, бизге ар кандай конфигурация файлдары керек болору анык.

Docker түзүү ар кандай түзүүчү файлдарды бириктирүүнү колдойт
акыркы конфигурацияны алуу. Бул кантип иштээрин мисалдан көрүүгө болот:

$ 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

Айтылгандай, докер түзүү бир нече композицияны бириктирүүнү колдойт -
файлдар, бул экинчи файлдагы ар кандай параметрлерди жокко чыгарууга мүмкүндүк берет. Мисалы:

$ 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 куруу (же түртүү) чөйрө өзгөрмөсүз
$MY_SERVICE_VERSION, мааниси колдонулат акыркыбирок сиз орнотсоңуз
курууга чейин айлана-чөйрө өзгөрмөнүн мааниси, ал курууда же түртүүдө колдонулат
реестрге private.registry.mine.

Менин принциптерим

Мен үчүн иштеген ыкмалар сизге да иштеши мүмкүн. Мен буларды ээрчийм
жөнөкөй эрежелер:

  • Өндүрүш, иштеп чыгуу (же башка чөйрөлөр) үчүн менин бардык стектерим аркылуу аныкталат
    докер-түзүүчү файлдар
  • Конфигурация файлдары мүмкүн болушунча менин бардык чөйрөлөрүмдү камтуу үчүн керек болчу
    кайталоодон качуу.
  • Ар бир чөйрөдө иштөө үчүн мага бир жөнөкөй буйрук керек.
  • Негизги конфигурация файлда аныкталган ютуб-compose.yml.
  • Айлана-чөйрө өзгөрмөлөрү сүрөт тэгдерин же башкаларды аныктоо үчүн колдонулат
    чөйрөдөн чөйрөгө өзгөрүшү мүмкүн болгон өзгөрмөлөр (этапташтыруу, интеграциялоо,
    өндүрүш).
  • Өндүрүштүк өзгөрмөлөрдүн маанилери маанилер катары колдонулат
    демейки боюнча, бул стек өндүрүшкө киргизилбестен, тобокелдиктерди азайтат
    чөйрө өзгөрмөсүн коюу.
  • Өндүрүш чөйрөсүндө кызматты баштоо үчүн буйрукту колдонуңуз докер стек жайгаштыруу - түзүү-файл docker-compose.yml -with-registry-auth my-stack-name.
  • Иш чөйрөсү буйрукту колдонуу менен башталат Эсеп ютуб-жазуу -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
...

Мен колдоно алам докер-түзүү (докер-түзүү)стекти иштетүү үчүн
баштапкы коду орнотулган иштеп чыгуу режими /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

Натыйжада, биз эки башка докер-түзүүчү файлдарды колдондук, алар жок
Кайталанма конфигурациялар сизде болгон ар кандай чөйрө үчүн колдонулушу мүмкүн!

Курс жөнүндө көбүрөөк билүү "Linux администратору"

Source: www.habr.com

Комментарий кошуу