Docker Compose: әзірлеуден өндіріске дейін

Курстың басталуына орай дайындалған подкаст транскрипциясының аудармасы «Linux әкімшісі»

Docker Compose: әзірлеуден өндіріске дейін

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

Келуімен докер құрастыру v3 бұл YAML файлдарымен жұмыс істеу кезінде тікелей өндіріс ортасында пайдалануға болады
кластер Докер үйірі.

Бірақ бұл бірдей докер-құрастыру файлын пайдалануға болатынын білдіреді
даму процесі мен ?ндірістік ортада? Немесе сол файлды пайдаланыңыз
сахналау? Жалпы, иә, бірақ бұл функция үшін бізге мыналар қажет:

  • Айнымалы интерполяция: кейбіреулер үшін ортаның айнымалы мәндерін пайдалану
    әр ортада өзгеретін құндылықтар.
  • Конфигурацияны қайта анықтау: секундты анықтау мүмкіндігі (немесе кез келген
    басқа келесі) қатысты бірдеңені өзгертетін 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

Айтылғандай, докер құрастыру бірнеше композицияны біріктіретін қолдауды қолдайды -
файлдар, бұл екінші файлдағы әртүрлі параметрлерді қайта анықтауға мүмкіндік береді. Мысалы:

$ 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 мәндерді қайта анықтау үшін docker-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}
...

Ал егер жасасаңыз докер-құрастыру (немесе итеру) орта айнымалысы жоқ
$MY_SERVICE_VERSION, мәні пайдаланылады ең соңғыбірақ орнатсаңыз
құрастыру алдындағы орта айнымалысының мәні, ол салу немесе итеру кезінде пайдаланылады
тіркеуге private.registry.mine.

Менің ұстанымдарым

Мен үшін жұмыс істейтін тәсілдер сізге де жұмыс істеуі мүмкін. Мен осыларды ұстанамын
қарапайым ережелер:

  • Өндіріске, әзірлеуге (немесе басқа орталарға) арналған барлық стектерім арқылы анықталады
    докер-құрастыру файлдары
  • Конфигурация файлдары мүмкіндігінше менің барлық орталарымды қамту үшін қажет
    қайталанудан аулақ болыңыз.
  • Әр ортада жұмыс істеу үшін маған бір қарапайым пәрмен керек.
  • Негізгі конфигурация файлда анықталған docker-compose.yml.
  • Ортаның айнымалы мәндері кескін тегтерін немесе басқаларын анықтау үшін пайдаланылады
    ортадан ортаға қарай өзгеруі мүмкін айнымалылар (кезең, интеграция,
    өндіріс).
  • Өндірістік айнымалылардың мәндері мәндер ретінде пайдаланылады
    әдепкі бойынша, бұл стек өндірісте іске қосылмайтын болса, тәуекелдерді азайтады
    орта айнымалысын орнату.
  • Өндірістік ортада қызметті бастау үшін пәрменді пайдаланыңыз докер стегін орналастыру - файлды құрастыру 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 (докер-құрастыру)стекті іске қосу үшін
бастапқы коды орнатылған әзірлеу режимі /project/src.

Мен осы файлдарды өндірісте пайдалана аламын! Және мен міндетті түрде пайдалана аламын
бірдей файл docker-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 әкімшісі»

Ақпарат көзі: www.habr.com

пікір қалдыру