Docker Compose- ဖွံ့ဖြိုးတိုးတက်မှုမှ ထုတ်လုပ်ရေးအထိ

သင်တန်းစတင်ချိန်၌ ပြင်ဆင်ထားသည့် ပေါ့တ်ကာစ်မှတ်တမ်းကို ဘာသာပြန်ခြင်း။ "Linux စီမံခန့်ခွဲသူ"

Docker Compose- ဖွံ့ဖြိုးတိုးတက်မှုမှ ထုတ်လုပ်ရေးအထိ

Docker Compose သည် အလုပ်ဖန်တီးရန်အတွက် အံ့သြဖွယ်ကိရိယာတစ်ခုဖြစ်သည်။
သင့်အပလီကေးရှင်းတွင်အသုံးပြုသည့် stack အတွက် ပတ်ဝန်းကျင်။ သတ်မှတ်နိုင်ရမယ်။
သင့်အပလီကေးရှင်းတစ်ခုစီ၏ အစိတ်အပိုင်းတစ်ခုစီတွင် ရှင်းရှင်းလင်းလင်းနှင့် ရိုးရှင်းသော syntax ကို လိုက်နာပါ။ YAML-
ဖိုင်များ
.

ထွန်းနှင့်အတူ docker ရေးဖွဲ့ v3 ဤ YAML ဖိုင်များကို ထုတ်လုပ်မှုပတ်ဝန်းကျင်တွင် တိုက်ရိုက်အသုံးပြုနိုင်ပါသည်။
အစုအဖွဲ့ Docker Swarm ဖြစ်သည်.

သို့သော် ၎င်းသည် တူညီသော docker-compose ဖိုင်ကို သင်အသုံးပြုနိုင်သည်ဟု ဆိုလိုပါသလား။
ဖွံ့ဖြိုးတိုးတက်မှုလုပ်ငန်းစဉ်နှင့် ထုတ်လုပ်မှုပတ်ဝန်းကျင်တွင် ? သို့မဟုတ် တူညီသောဖိုင်ကို အသုံးပြုပါ။
သူ့ထက်ငါ? ကောင်းပြီ၊ ယေဘုယျအားဖြင့် ဟုတ်သည်၊ သို့သော် ဤလုပ်ဆောင်ချက်အတွက် ကျွန်ုပ်တို့သည် အောက်ပါတို့ကို လိုအပ်သည်-

  • Variable interpolation- အချို့အတွက် ပတ်ဝန်းကျင် ကိန်းရှင်များကို အသုံးပြုခြင်း။
    ပတ်ဝန်းကျင်တစ်ခုစီတွင် ပြောင်းလဲနေသော တန်ဖိုးများ။
  • ဖွဲ့စည်းမှုပုံစံကို အစားထိုးခြင်း- တစ်စက္ကန့်ကို သတ်မှတ်နိုင်မှု (သို့မဟုတ် မည်သည့်အရာမဆို
    အခြားနောက်ဆက်တွဲ) docker-compose ဖိုင်နှင့် ပတ်သတ်၍ တစ်စုံတစ်ခု ပြောင်းလဲသွားပါမည်။
    ဦးစွာ၊ docker သည် ဖိုင်နှစ်ခုလုံးကို ပေါင်းစည်းရန် ဂရုစိုက်လိမ့်မည်။

ဖွံ့ဖြိုးတိုးတက်မှုနှင့် ထုတ်လုပ်မှုဖိုင်များအကြား ကွာခြားချက်များ

ဖွံ့ဖြိုးတိုးတက်မှုကာလအတွင်း၊ သင်သည် ကုဒ်ပြောင်းလဲမှုများကို စစ်ဆေးရန် ဖြစ်နိုင်ခြေများပါသည်။
အချိန်နှင့်တပြေးညီ။ ထိုသို့လုပ်ဆောင်ရန်၊ များသောအားဖြင့် အရင်းအမြစ်ကုဒ်ပါသော ပမာဏကို ထည့်သွင်းထားသည်။
သင့်အပလီကေးရှင်းအတွက် runtime ပါဝင်သည့် container ဒါပေမယ့် ထုတ်လုပ်မှုပတ်ဝန်းကျင်အတွက်ပါ။
ဒီနည်းလမ်းက မသင့်တော်ပါဘူး။

ထုတ်လုပ်မှုတွင်၊ သင့်တွင် node အများအပြားရှိသော အစုအဝေးတစ်ခုရှိပြီး အသံအတိုးအကျယ်သည် ဒေသန္တရဖြစ်သည်။
သင့်ကွန်တိန်နာ (သို့မဟုတ် ဝန်ဆောင်မှု) လုပ်ဆောင်နေသည့် ကုဒ်များနှင့် ဆက်စပ်နေသောကြောင့် သင်မလုပ်ပါ။
ရှုပ်ထွေးသောလုပ်ဆောင်မှုများပါ၀င်သည့် အရင်းအမြစ်ကုဒ်ကို သင်ထည့်သွင်းနိုင်သည်။
ကုဒ်ထပ်တူပြုခြင်း၊ အချက်ပြမှုများ၊ စသည်တို့။

ယင်းအစား၊ ကျွန်ုပ်တို့သည် သင့်ကုဒ်၏ သီးခြားဗားရှင်းတစ်ခုနှင့် ပုံတစ်ခုကို ဖန်တီးလိုကြသည်။
၎င်းကို သင့်လျော်သော tag ဖြင့် အမှတ်အသားပြုခြင်းသည် ထုံးစံအတိုင်းဖြစ်သည် (သင် semantic ကိုသုံးနိုင်သည်။
ဗားရှင်းပြောင်းခြင်း သို့မဟုတ် အခြားစနစ်တစ်ခုကို သင့်ဆုံးဖြတ်ချက်အတိုင်း)။

ဖွဲ့စည်းမှုပုံစံကို ထပ်လောင်းပါ။

ကွဲပြားမှုများနှင့် သင်၏မှီခိုမှုများသည် အခြေအနေများတွင် ကွဲပြားနိုင်သည်။
ဖွံ့ဖြိုးတိုးတက်မှုနှင့် ထုတ်လုပ်မှု၊ ကျွန်ုပ်တို့သည် မတူညီသော configuration ဖိုင်များ လိုအပ်မည်မှာ ထင်ရှားပါသည်။

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

ဆိုခဲ့သည့်အတိုင်း 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

ဒီ syntax က command ကို develop လုပ်နေစဉ်အတွင်း သိပ်အဆင်ပြေမှာ မဟုတ်ပါဘူး။
အကြိမ်များစွာ ပြုလုပ်ရန် လိုအပ်မည်ဖြစ်သည်။

ကံကောင်းစွာဖြင့်၊ docker ရေးဖွဲ့ခြင်းဟုခေါ်သော အထူးဖိုင်ကို အလိုအလျောက်ရှာဖွေသည်။
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

အိုကေ၊ အဲဒါ မှတ်မိဖို့ ပိုလွယ်တယ်။

ကိန်းရှင်များ ပေါင်းစပ်ခြင်း။

Configuration ဖိုင်များကို ပံ့ပိုးပေးသည်။ interpolation
ကိန်းရှင်များ
ပုံသေတန်ဖိုးများ။ ဆိုလိုသည်မှာ သင်သည် အောက်ပါတို့ကို လုပ်ဆောင်နိုင်သည်-

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

အကယ်လို့များလား။ docker-compose build (သို့မဟုတ် push) ပတ်ဝန်းကျင်ပြောင်းလဲမှုမရှိဘဲ
$MY_SERVICE_VERSIONတန်ဖိုးကို အသုံးပြုပါမည်။ နောက်ဆုံးဒါပေမယ့် သတ်မှတ်ရင်
မတည်ဆောက်မီ ပတ်ဝန်းကျင် variable ၏တန်ဖိုးကို တည်ဆောက်သည့်အခါ သို့မဟုတ် တွန်းတင်သည့်အခါတွင် အသုံးပြုမည်ဖြစ်သည်။
မှတ်ပုံတင်ရန် private.registry.mine.

ငါ့စာမူ

ကျွန်ုပ်အတွက် လုပ်ဆောင်ပေးသော ချဉ်းကပ်မှုများသည် သင့်အတွက်လည်း အကျိုးရှိနိုင်ပါသည်။ ဒါတွေကို ငါလိုက်နာတယ်။
ရိုးရှင်းသောစည်းမျဉ်းများ

  • ထုတ်လုပ်မှု၊ ဖွံ့ဖြိုးတိုးတက်မှု (သို့မဟုတ် အခြားပတ်ဝန်းကျင်များ) အတွက် ကျွန်ုပ်၏ stacks အားလုံးကို သတ်မှတ်ထားပါသည်။
    docker-compose ဖိုင်များ
  • ကျွန်ုပ်၏ပတ်ဝန်းကျင်အားလုံးကို တတ်နိုင်သမျှ ဖုံးအုပ်ရန် ဖွဲ့စည်းမှုဖိုင်များ လိုအပ်ပါသည်။
    ပွားခြင်းကို ရှောင်ကြဉ်ပါ။
  • ပတ်ဝန်းကျင်တစ်ခုစီတွင် အလုပ်လုပ်ရန် ရိုးရှင်းသော အမိန့်တစ်ခု လိုအပ်ပါသည်။
  • အဓိက configuration ကို ဖိုင်တွင် သတ်မှတ်ထားသည်။ docker-compose.yml.
  • ပုံတဂ်များ သို့မဟုတ် အခြားအရာများကို သတ်မှတ်ရန် Environment variable များကို အသုံးပြုသည်။
    ပတ်ဝန်းကျင်တစ်ခုနှင့်တစ်ခု ကွဲပြားနိုင်သော ကိန်းရှင်များ (ဇာတ်ညွှန်း၊ ပေါင်းစည်းမှု၊
    ထုတ်လုပ်မှု)။
  • ထုတ်လုပ်မှုကိန်းရှင်များ၏တန်ဖိုးများကိုတန်ဖိုးများအဖြစ်အသုံးပြုကြသည်။
    ပုံသေအားဖြင့်၊ ၎င်းသည် stack ကိုမပါဘဲထုတ်လုပ်မှုတွင်စတင်ပါကအန္တရာယ်များကိုလျော့နည်းစေသည်။
    ပတ်ဝန်းကျင် variable ကို သတ်မှတ်ပါ။
  • ထုတ်လုပ်မှုပတ်ဝန်းကျင်တွင် ဝန်ဆောင်မှုတစ်ခု စတင်ရန်၊ အမိန့်ကို အသုံးပြုပါ။ docker stack ကို အသုံးပြုခြင်း - ရေးဖွဲ့-ဖိုင် docker-compose.yml -with-registry-auth my-stack-name.
  • အလုပ်လုပ်သောပတ်ဝန်းကျင်သည် command ကိုစတင်အသုံးပြုသည်။ တက် docker-compose -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)stack ကို run ဖို့
အရင်းအမြစ်ကုဒ်တွင် ထည့်သွင်းထားသည့် ဖွံ့ဖြိုးတိုးတက်မှုမုဒ် /project/src.

ထုတ်လုပ်မှုတွင် ဤတူညီသောဖိုင်များကို ကျွန်ုပ်အသုံးပြုနိုင်ပါသည်။ ငါသေချာပေါက်သုံးနိုင်ခဲ့တယ်။
တူညီသောဖိုင် docker-compose.yml ဇာတ်ခုံအတွက်။ ဒါကိုချဲ့ထွင်ဖို့
ထုတ်လုပ်မှု၊ ကျွန်ုပ်သည် ကြိုတင်သတ်မှတ်ထားသော tag ဖြင့် ပုံကို တည်ဆောက်ပြီး ပေးပို့ရန်သာလိုသည်။
CI အဆင့်တွင်-

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

ထုတ်လုပ်မှုတွင်၊ ၎င်းကို အောက်ပါ command များကို အသုံးပြု၍ လုပ်ဆောင်နိုင်သည်-

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 စီမံခန့်ခွဲသူ"

source: www.habr.com

မှတ်ချက် Add