Docker Compose: хөгжүүлэлтээс үйлдвэрлэл хүртэл

Хичээл эхлэхийг угтан бэлтгэсэн подкаст транскрипцийн орчуулга "Linux администратор"

Docker Compose: хөгжүүлэлтээс үйлдвэрлэл хүртэл

Docker Compose бол бүтээл үүсгэх гайхалтай хэрэгсэл юм
таны програмд ​​ашигласан стекийн орчин. Энэ нь танд тодорхойлох боломжийг олгодог
Таны хэрэглээний бүрэлдэхүүн хэсэг бүрийг тодорхой бөгөөд энгийн синтаксийг дагаж мөрдөөрэй YAML-
файлууд
.

-ийн гарснаар 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 утгыг дарах 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}
...

Хэрэв тэгвэл docker-compose бүтээх (эсвэл түлхэх) орчны хувьсагчгүйгээр
$MY_SERVICE_VERSION, утгыг ашиглана хамгийн сүүлийн үеийнгэхдээ та тохируулсан бол
барихаас өмнөх орчны хувьсагчийн үнэ цэнэ, үүнийг барих эсвэл түлхэх үед ашиглах болно
бүртгэл рүү хувийн.бүртгэлийн.миний.

Миний зарчим

Надад тохирох аргууд танд ч бас тустай байж магадгүй. Би эдгээрийг дагаж мөрддөг
энгийн дүрэм:

  • Миний үйлдвэрлэл, хөгжүүлэлт (эсвэл бусад орчинд) зориулсан бүх стекүүд тодорхойлогддог
    docker-compose файлууд
  • Тохируулгын файлууд миний бүх орчныг аль болох хамрах шаардлагатай байв
    давхардлаас зайлсхийх.
  • Бүх орчинд ажиллахын тулд надад нэг энгийн тушаал хэрэгтэй.
  • Үндсэн тохиргоог файлд тодорхойлсон docker-compose.yml.
  • Хүрээлэн буй орчны хувьсагчдыг зургийн шошго эсвэл бусад зүйлийг тодорхойлоход ашигладаг
    орчноос хамаарч өөр өөр байж болох хувьсагч (үе шат, интеграци,
    үйлдвэрлэл).
  • Үйлдвэрлэлийн хувьсагчдын утгыг утга болгон ашигладаг
    өгөгдмөл байдлаар, энэ нь стекийг үйлдвэрлэлд эхлүүлэхгүйгээр эрсдэлийг бууруулдаг
    орчны хувьсагчийг тохируулах.
  • Үйлдвэрлэлийн орчинд үйлчилгээг эхлүүлэхийн тулд командыг ашиглана уу docker stack deploy - файлыг зохиох docker-compose.yml -бүртгэлтэй-autth 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)стекийг ажиллуулахын тулд
эх кодыг суулгасан хөгжүүлэлтийн горим /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

Үүний үр дүнд бид хоёр өөр docker-compose файл ашигласан бөгөөд тэдгээр нь байхгүй
Давхардсан тохиргоог өөрт байгаа ямар ч орчинд ашиглаж болно!

Хичээлийн талаар илүү ихийг мэдэж аваарай "Linux администратор"

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх