د ډاکر کمپوز: له پراختیا څخه تولید ته

د کورس د پیل په تمه چمتو شوي د پوډکاسټ لیږد ژباړه "د لینکس مدیر"

د ډاکر کمپوز: له پراختیا څخه تولید ته

ډاکر کمپوز د کار کولو رامینځته کولو لپاره په زړه پوری وسیله ده
ستاسو په غوښتنلیک کې کارول شوي سټیک لپاره چاپیریال. دا تاسو ته اجازه درکوي تعریف کړئ
ستاسو د غوښتنلیک هره برخه، د روښانه او ساده ترکیب په تعقیب کې YAML-
فایلونه
.

د راتګ سره ډاکر کمپوز v3 دا د YAML فایلونه مستقیم د تولید چاپیریال کې کارول کیدی شي کله چې کار کوي
کلستر ډوکر سوی.

مګر ایا د دې معنی دا ده چې تاسو کولی شئ ورته ډاکر - کمپوز فایل وکاروئ
د پراختیا بهیر او د تولید چاپیریال کې؟ یا د دې لپاره ورته فایل وکاروئ
پړاو؟ ښه، په عموم کې، هو، مګر د دې فعالیت لپاره موږ لاندې ته اړتیا لرو:

  • متغیر انټرپولیشن: د ځینو لپاره د چاپیریال متغیرونو کارول
    ارزښتونه چې په هر چاپیریال کې بدلیږي.
  • د کنفیګریشن اوورایډ: د ثانیې تعریف کولو وړتیا (یا کوم
    بل ورپسې) د ډاکر - کمپوز فایل چې په اړه به یو څه بدل کړي
    لومړی، او ډاکر کمپوز به د دواړو فایلونو یوځای کولو ته پاملرنه وکړي.

د پراختیا او تولید فایلونو ترمنځ توپیر

د پراختیا په جریان کې ، تاسو به ډیری احتمال غواړئ په کوډ کې بدلونونه چیک کړئ
اصلي وخت. د دې کولو لپاره، معمولا حجم د سرچینې کوډ سره نصب شوی
کانټینر چې ستاسو د غوښتنلیک لپاره د چلولو وخت لري. مګر د تولید چاپیریال لپاره
دا طریقه مناسبه نه ده.

په تولید کې، تاسو د ډیری نوډونو سره کلستر لرئ، او حجم محلي دی
د نوډ په اړه چې ستاسو کانټینر (یا خدمت) روان دی، نو تاسو یې نه کوئ
تاسو کولی شئ د سرچینې کوډ پرته له پیچلو عملیاتو څخه نصب کړئ چې پکې شامل دي
کوډ همغږي کول، سیګنالونه، او نور.

پرځای یې، موږ معمولا غواړو ستاسو د کوډ ځانګړي نسخه سره یو انځور جوړ کړو.
دا دود دی چې دا د مناسب ټاګ سره په نښه کړئ (تاسو کولی شئ سیمانټیک وکاروئ
نسخه کول یا ستاسو په اختیار کې بل سیسټم).

د ترتیب اوورډ

توپیرونو ته په پام سره او دا چې ستاسو انحصار ممکن په سناریو کې توپیر ولري
پراختیا او تولید، دا روښانه ده چې موږ به مختلف ترتیب فایلونو ته اړتیا ولرو.

د ډاکر کمپوز د مختلف کمپوز فایلونو یوځای کولو ملاتړ کوي
وروستی ترتیب ترلاسه کړئ. دا څنګه کار کوي په مثال کې لیدل کیدی شي:

$ 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.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}
...

او که تاسو یې کوئ ډاکر - کمپوز جوړ (یا فشار) د چاپیریال متغیر پرته
$MY_SERVICE_VERSION، ارزښت به وکارول شي تازهمګر که تاسو تنظیم کړئ
د جوړیدو دمخه د چاپیریال متغیر ارزښت ، دا به د جوړولو یا فشار کولو پرمهال وکارول شي
راجستر ته private.registry.mine.

زما اصول

هغه لارې چې زما لپاره کار کوي ممکن ستاسو لپاره هم کار وکړي. زه دا تعقیبوم
ساده قواعد:

  • د تولید، پراختیا (یا نورو چاپیریالونو) لپاره زما ټول سټیکونه تعریف شوي
    docker-compose فایلونه
  • زما د ټولو چاپیریالونو پوښلو لپاره د ترتیب فایلونو ته اړتیا ده، څومره چې ممکنه وي
    د نقل څخه ډډه وکړئ.
  • زه په هر چاپیریال کې د کار کولو لپاره یو ساده قوماندې ته اړتیا لرم.
  • اصلي ترتیب په فایل کې تعریف شوی ډاکر - 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
...

زه کولی شم وکاروم 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

د پایلې په توګه ، موږ دوه مختلف ډاکر - کمپوز فایلونه کارولي ، کوم چې پرته
نقل شوي تشکیلات د هر هغه چاپیریال لپاره کارول کیدی شي چې تاسو یې لرئ!

د کورس په اړه نور معلومات ترلاسه کړئ "د لینکس مدیر"

سرچینه: www.habr.com

Add a comment