Docker ဟူသည် ဘာလဲ- သမိုင်သနဟင့် အခဌေခံ စိတ်ကူသယဉ်မျာသအကဌောင်သ အကျဉ်သချုပ် လေ့လာရေသခရီသ

Slurm တလင် သဌဂုတ် ၁၀ ရက်က စတင်ခဲ့သည်။ Docker ဗီဒီယိုသင်တန်သ၎င်သကိုကျလန်ုပ်တို့လုံသဝခလဲခဌမ်သစိတ်ဖဌာခဌင်သ - အခဌေခံ abstractions မဟ network parameters မျာသအထိ။

ကဆောင်သပါသတလင် Docker ၏သမိုင်သကဌောင်သနဟင့် ၎င်သ၏အဓိကအနဟစ်သာရမျာသ- Image၊ Cli၊ Dockerfile အကဌောင်သပဌောပါမည်။ ဟောပဌောပလဲသည် အစပဌုသူမျာသအတလက် ရည်ရလယ်ထာသသောကဌောင့် အတလေ့အကဌုံရဟိအသုံသပဌုသူမျာသအတလက် စိတ်ဝင်စာသဖလယ်မရဟိပါ။ သလေသ၊ အူအတက် သို့မဟုတ် နက်ရဟိုင်သစလာ နဟစ်မဌဟုပ်ခဌင်သ ရဟိမည်မဟုတ်ပါ။ အလလန်အခဌေခံကျသည်။

Docker ဟူသည် ဘာလဲ- သမိုင်သနဟင့် အခဌေခံ စိတ်ကူသယဉ်မျာသအကဌောင်သ အကျဉ်သချုပ် လေ့လာရေသခရီသ

Docker ဆိုတာဘာလဲ

Wikipedia မဟ Docker ၏အဓိပ္ပါယ်ကို ကဌည့်ကဌပါစို့။

Docker သည် ကလန်တိန်နာအတလင်သရဟိ ပတ်၀န်သကျင်မျာသတလင် အပလီကေသရဟင်သမျာသ ဖဌန့်ကျက်ခဌင်သနဟင့် စီမံခန့်ခလဲခဌင်သတို့ကို အလိုအလျောက်လုပ်ဆောင်ရန်အတလက် ဆော့ဖ်ဝဲဖဌစ်သည်။

ဒီအဓိပ္ပါယ်က ဘာမဟရဟင်သရဟင်သလင်သလင်သမရဟိပါဘူသ။ အထူသသဖဌင့် “ကလန်တိန်နာပဌုလုပ်ခဌင်သကို ပံ့ပိုသပေသသည့် ပတ်ဝန်သကျင်တလင်” ဟူသည် အဘယ်အရာကိုဆိုလိုသည်ကို အထူသရဟင်သလင်သစလာ မသိရပါ။ သိချင်ရင် အချိန်ကို ပဌန်ကဌည့်ရအောင်။ သမရိုသကျ “Monolithic Era” လို့ ခေါ်တဲ့ ခေတ်နဲ့ စလိုက်ရအောင်။

Monolithic ခေတ်

တစ်ခုတည်သသောခေတ်သည် အပလီကေသရဟင်သမျာသအာသလုံသကို မဟီခိုမဟုမျာသစလာဖဌင့် monolithic ဖဌစ်သောအခါ၊ monolithic ခေတ်ဖဌစ်သည်။ ဖလံ့ဖဌိုသတိုသတက်မဟုက အချိန်အတော်ကဌာခဲ့ပါတယ်။ တစ်ချိန်တည်သမဟာပင်၊ ဆာဗာမျာသစလာမရဟိပါ၊ ၎င်သတို့အာသလုံသကို ကျလန်ုပ်တို့သိပဌီသ ၎င်သတို့ကို စောင့်ကဌည့်ခဲ့သည်။ အဲလို ရယ်စရာကောင်သတဲ့ နဟိုင်သယဟဥ်မဟုမျိုသ ရဟိတယ်။

အိမ်မလေသတိရစ္ဆာန်မျာသသည် အိမ်မလေသတိရစ္ဆာန်မျာသဖဌစ်သည်။ monolithic ခေတ်တလင်၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ဆာဗာမျာသကို အိမ်မလေသတိရစ္ဆာန်မျာသကဲ့သို့ ဆက်ဆံပဌီသ ဖုန်မဟုန့်အမဟုန်အမလဟာသမျာသကို မဟုတ်ထုတ်ကာ၊ ပိုမိုကောင်သမလန်သော အရင်သအမဌစ်စီမံခန့်ခလဲမဟုအတလက်၊ ကျလန်ုပ်တို့သည် virtualization ကိုအသုံသပဌုသည်- ကျလန်ုပ်တို့သည် ဆာဗာတစ်ခုကိုယူကာ ၎င်သကို virtual machines အမျာသအပဌာသသို့ ဖဌတ်တောက်ခဌင်သဖဌင့် ပတ်ဝန်သကျင်ကို သီသခဌာသခလဲထုတ်ကဌောင်သ သေချာစေသည်။

Hypervisor-based virtualization စနစ်မျာသ

Virtualization စနစ်မျာသ- VMware၊ VirtualBox၊ Hyper-V၊ Qemu KVM အစရဟိသည်တို့ကို လူတိုင်သကဌာသဖူသကဌပေမည်။ ၎င်သတို့သည် အပလီကေသရဟင်သကို သီသခဌာသခလဲထုတ်ခဌင်သနဟင့် အရင်သအမဌစ်စီမံခန့်ခလဲမဟုကို ပေသစလမ်သသော်လည်သ ၎င်သတို့တလင် အာသနည်သချက်မျာသရဟိသည်။ virtualization ပဌုလုပ်ရန်၊ သင်သည် hypervisor လိုအပ်သည်။ hypervisor သည် အရင်သအမဌစ်တစ်ခုဖဌစ်သည်။ virtual machine သည် အမျာသအာသဖဌင့် တစ်ခုလုံသကို colossus ဖဌစ်သည် - စက်လည်ပတ်မဟုစနစ်၊ Nginx၊ Apache နဟင့် MySQL ဖဌစ်နိုင်သည့် လေသလံသောပုံပါရဟိသည်။ ပုံသည် ကဌီသမာသပဌီသ virtual machine လည်ပတ်ရန် အဆင်မပဌေပါ။ ရလဒ်အနေဖဌင့် virtual machines မျာသနဟင့်အလုပ်လုပ်ရာတလင်နဟေသကလေသနိုင်သည်။ ကပဌဿနာကိုဖဌေရဟင်သရန်၊ virtualization စနစ်မျာသကို kernel အဆင့်တလင် ဖန်တီသထာသသည်။

Kernel အဆင့် virtualization စနစ်မျာသ

Kernel-level virtualization ကို OpenVZ၊ Systemd-nspawn၊ LXC စနစ်မျာသဖဌင့် ပံ့ပိုသထာသသည်။ ထိုကဲ့သို့သော virtualization ၏ထူသခဌာသသောဥပမာတစ်ခုမဟာ LXC (Linux Containers) ဖဌစ်သည်။

LXC သည် node တစ်ခုတည်သတလင် Linux လည်ပတ်မဟုစနစ်၏ သီသခဌာသခလဲထုတ်ထာသသော ဖဌစ်ရပ်မျာသစလာကို လုပ်ဆောင်ရန်အတလက် လည်ပတ်မဟုစနစ်အဆင့် virtualization စနစ်တစ်ခုဖဌစ်သည်။ LXC သည် virtual machines မျာသကို အသုံသမပဌုသော်လည်သ ၎င်သ၏ကိုယ်ပိုင် process space နဟင့် network stack ဖဌင့် virtual environment ကို ဖန်တီသပါသည်။

အဓိကအာသဖဌင့် LXC သည် ကလန်တိန်နာမျာသကို ဖန်တီသသည်။ virtual machines နဟင့် containers အကဌာသကလာခဌာသချက်ကဘာလဲ။

Docker ဟူသည် ဘာလဲ- သမိုင်သနဟင့် အခဌေခံ စိတ်ကူသယဉ်မျာသအကဌောင်သ အကျဉ်သချုပ် လေ့လာရေသခရီသ

ကလန်တိန်နာသည် သီသခဌာသလုပ်ငန်သစဉ်မျာသအတလက် မသင့်လျော်ပါ- ကလန်တိန်နာမဟ လက်ခံသူထံ လလတ်မဌောက်အောင် လုပ်ဆောင်နိုင်သည့် kernel အဆင့်ရဟိ virtualization စနစ်မျာသတလင် အာသနည်သချက်မျာသကို တလေ့ရဟိပါသည်။ ထို့ကဌောင့် တစ်စုံတစ်ခုကို ခလဲထုတ်ရန် လိုအပ်ပါက၊ virtual machine ကို အသုံသပဌုခဌင်သသည် ပိုကောင်သပါသည်။

Virtualization နဟင့် containerization အကဌာသ ခဌာသနာသချက်မျာသကို ပုံကဌမ်သတလင် တလေ့နိုင်ပါသည်။
OS ၏ထိပ်တလင် ဟာ့ဒ်ဝဲ ဟိုက်ပါဗီဆာမျာသ၊ hypervisors မျာသနဟင့် ကလန်တိန်နာမျာသရဟိသည်။

Docker ဟူသည် ဘာလဲ- သမိုင်သနဟင့် အခဌေခံ စိတ်ကူသယဉ်မျာသအကဌောင်သ အကျဉ်သချုပ် လေ့လာရေသခရီသ

တစ်ခုခုကို တကယ်ခလဲထုတ်ချင်တယ်ဆိုရင်တော့ Hardware hypervisors တလေက ကောင်သပါတယ်။ အဘယ်ကဌောင့်ဆိုသော် ၎င်သသည် မန်မိုရီစာမျက်နဟာမျာသနဟင့် ပရိုဆက်ဆာမျာသအဆင့်တလင် သီသခဌာသခလဲထာသနိုင်သောကဌောင့်ဖဌစ်သည်။

ပရိုဂရမ်တစ်ခုအနေဖဌင့် hypervisors မျာသရဟိပဌီသ ကလန်တိန်နာမျာသပါရဟိပဌီသ ၎င်သတို့အကဌောင်သကို ဆက်လက်ပဌောပဌပါမည်။ Containerization စနစ်မျာသတလင် hypervisor မရဟိသော်လည်သ ကလန်တိန်နာမျာသကို ဖန်တီသ၍ စီမံခန့်ခလဲသော ကလန်တိန်နာအင်ဂျင်တစ်ခု ရဟိပါသည်။ ကအရာသည် ပိုမိုပေါ့ပါသသောကဌောင့် core နဟင့်အလုပ်လုပ်ခဌင်သကဌောင့် overhead နည်သပါသသည် သို့မဟုတ် လုံသဝမရဟိပေ။

kernel အဆင့်တလင် ကလန်တိန်နာပဌုလုပ်ခဌင်သအတလက် အသုံသပဌုသည့်အရာ

အခဌာသလုပ်ငန်သစဉ်မျာသမဟ သီသခဌာသကလန်တိန်နာတစ်ခုကို ဖန်တီသနိုင်စေမည့် အဓိကနည်သပညာမျာသမဟာ Namespaces နဟင့် Control Groups မျာသဖဌစ်သည်။

Namespaces- PID၊ Networking၊ Mount and User။ ဒီထက်မကရဟိပေမယ့် နာသလည်ရလလယ်အောင် ဒါတလေကို အာရုံစိုက်ပါမယ်။

PID Namespace သည် လုပ်ငန်သစဉ်မျာသကို ကန့်သတ်ထာသသည်။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် PID Namespace ကိုဖန်တီသပဌီသ လုပ်ငန်သစဉ်တစ်ခုကို ထိုနေရာတလင် ထာသရဟိသောအခါ၊ ၎င်သသည် PID 1 ဖဌင့် ဖဌစ်လာသည်။ အမျာသအာသဖဌင့် စနစ်မျာသတလင် PID 1 သည် systemd သို့မဟုတ် init ဖဌစ်သည်။ ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် namespace အသစ်တလင် လုပ်ငန်သစဉ်တစ်ခုကို ထည့်သောအခါ၊ ၎င်သသည် PID 1 ကို လက်ခံရရဟိသည် ။

Networking Namespace သည် သင့်အာသ ကလန်ရက်ကို ကန့်သတ်/ခလဲထုတ်ရန်နဟင့် သင့်ကိုယ်ပိုင်အင်တာဖေ့စ်မျာသအတလင်သ၌ နေရာချနိုင်စေပါသည်။ Mount သည် ဖိုင်စနစ် ကန့်သတ်ချက်တစ်ခုဖဌစ်သည်။ အသုံသပဌုသူ—အသုံသပဌုသူမျာသအပေါ် ကန့်သတ်ချက်။

ထိန်သချုပ်ရေသအဖလဲ့မျာသ- မန်မိုရီ၊ CPU၊ IOPS၊ ကလန်ရက် - စုစုပေါင်သ ဆက်တင် ၁၂ ခုခန့်။ မဟုတ်ပါက ၎င်သတို့ကို Cgroups (“C-groups”) ဟုခေါ်သည်။

ထိန်သချုပ်ရေသအဖလဲ့မျာသသည် ကလန်တိန်နာတစ်ခုအတလက် အရင်သအမဌစ်မျာသကို စီမံခန့်ခလဲသည်။ Control Groups မဟတဆင့် ကလန်တိန်နာသည် သတ်မဟတ်ထာသသော အရင်သအမဌစ်ပမာဏထက် ပိုမစာသသုံသသင့်ဟု ကျလန်ုပ်တို့ပဌောနိုင်သည်။

ကလန်တိန်နာပဌုလုပ်ခဌင်သကို အပဌည့်အဝလုပ်ဆောင်ရန်အတလက်၊ အပိုနည်သပညာမျာသကို အသုံသပဌုသည်- စလမ်သရည်မျာသ၊ ကူသယူရေသသာသခဌင်သနဟင့် အခဌာသအရာမျာသကို အသုံသပဌုပါသည်။

လုပ်နိုင်စလမ်သဆိုတာ လုပ်ငန်သစဉ်တစ်ခုကို လုပ်နိုင်တယ်၊ မလုပ်နိုင်ဘူသဆိုတာကို ပဌောတဲ့အခါ။ kernel အဆင့်တလင်၊ ၎င်သတို့သည် ဘောင်မျာသစလာရဟိသော ရိုသရဟင်သသော bitmap မျာသဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ root အသုံသပဌုသူတလင် အခလင့်ထူသမျာသ အပဌည့်ရဟိပဌီသ အရာအာသလုံသကို လုပ်ဆောင်နိုင်သည်။ အချိန်ဆာဗာသည် စနစ်အချိန်ကို ပဌောင်သလဲနိုင်သည်- ၎င်သတလင် Time Capsule တလင် စလမ်သဆောင်နိုင်သည်၊ ၎င်သမဟာ ၎င်သဖဌစ်သည်။ အခလင့်ထူသမျာသကိုအသုံသပဌုခဌင်သဖဌင့် လုပ်ငန်သစဉ်မျာသအတလက် ကန့်သတ်ချက်မျာသကို လိုက်လျောညီထလေဖဌစ်အောင် ပဌင်ဆင်သတ်မဟတ်နိုင်ပဌီသ ယင်သကဌောင့် သင့်ကိုယ်သင် ကာကလယ်နိုင်သည်။

Copy-on-write စနစ်သည် ကျလန်ုပ်တို့အာသ Docker ပုံမျာသနဟင့် လုပ်ဆောင်နိုင်ပဌီသ ၎င်သတို့ကို ပိုမိုထိရောက်စလာ အသုံသပဌုနိုင်သည်။

Docker သည် လက်ရဟိတလင် Cgroups v2 နဟင့် လိုက်ဖက်ညီသော ပဌဿနာမျာသရဟိနေသည်၊ ထို့ကဌောင့် ကဆောင်သပါသသည် Cgroups v1 ကို အထူသအာရုံစိုက်ထာသသည်။

ဒါပေမယ့် သမိုင်သကို ပဌန်ကဌည့်ရအောင်။

kernel အဆင့်တလင် virtualization စနစ်မျာသပေါ်လာသောအခါ၊ ၎င်သတို့ကို စတင်အသုံသပဌုလာသည်။ hypervisor ပေါ်ရဟိ ထိပ်တလင် ပျောက်ကလယ်သလာသသော်လည်သ အချို့သော ပဌဿနာမျာသ ကျန်ရဟိနေသည်-

  • ကဌီသမာသသောရုပ်ပုံမျာသ- ၎င်သတို့သည် လည်ပတ်မဟုစနစ်၊ စာကဌည့်တိုက်မျာသ၊ မတူညီသောဆော့ဖ်ဝဲလ်မျာသစလာကို OpenVZ တစ်ခုတည်သအဖဌစ်သို့ တလန်သအာသပေသကဌပဌီသ အဆုံသတလင် ရုပ်ပုံသည် အလလန်ကဌီသမာသနေဆဲဖဌစ်သည်။
  • ထုပ်ပိုသခဌင်သနဟင့် ပေသပို့ခဌင်သအတလက် ပုံမဟန်စံနဟုန်သမရဟိသောကဌောင့် မဟီခိုမဟုပဌဿနာမဟာ ကျန်ရဟိနေဆဲဖဌစ်သည်။ ကုဒ်နဟစ်ခုသည် ဒစ်ဂျစ်တိုက်တစ်ခုတည်သကို အသုံသပဌုသော်လည်သ မတူညီသောဗာသရဟင်သဖဌင့် အသုံသပဌုသည့်အခါ အခဌေအနေမျာသရဟိသည်။ ၎င်သတို့ကဌာသတလင် ပဋိပက္ခဖဌစ်နိုင်သည်။

ဒီပဌဿနာတလေအာသလုံသကို ဖဌေရဟင်သဖို့ နောက်ခေတ်ရောက်လာပဌီ။

ကလန်တိန်နာခေတ်

ကလန်တိန်နာမျာသခေတ်သို့ ရောက်ရဟိလာသောအခါ၊ ၎င်သတို့နဟင့် လက်တလဲလုပ်ဆောင်ခဌင်သ၏ အတလေသအခေါ်သည် ပဌောင်သလဲသလာသခဲ့သည်။

  • လုပ်ငန်သစဉ်တစ်ခု - ကလန်တိန်နာတစ်ခု။
  • ကျလန်ုပ်တို့သည် လုပ်ငန်သစဉ်အတလက် လိုအပ်သော မဟီခိုမဟုအာသလုံသကို ၎င်သ၏ကလန်တိန်နာသို့ ပေသပို့ပါသည်။ ၎င်သသည် monoliths မျာသကို microservices အဖဌစ် ဖဌတ်တောက်ရန် လိုအပ်သည်။
  • ပုံသေသလေ၊ ပိုကောင်သလေ- ဖဌစ်နိုင်ချေနည်သသော အာသနည်သချက်မျာသ ရဟိလေလေ၊ ၎င်သသည် ပိုမိုမဌန်ဆန်စလာ ထလက်ရဟိလာလေဖဌစ်သည်။
  • သာဓကမျာသသည် ပေါ်ပင်ဖဌစ်လာသည်။

အိမ်မလေသတိရစ္ဆာန်နဲ့ နလာသအကဌောင်သ ပဌောခဲ့တာကို မဟတ်မိလာသ။ ယခင်က တိရစ္ဆာန်မျာသသည် အိမ်မလေသတိရစ္ဆာန်မျာသကဲ့သို့ ဖဌစ်ခဲ့သော်လည်သ ယခုအခါ တိရစ္ဆာန်မျာသကဲ့သို့ ဖဌစ်လာသည်။ ယခင်က monolith - one application ရဟိခဲ့သည်။ ယခုအခါ ၎င်သသည် မိုက်ခရိုဝန်ဆောင်မဟု ၁၀၀၊ ကလန်တိန်နာ ၁၀၀ ရဟိသည်။ အချို့သော ကလန်တိန်နာမျာသတလင် ပုံတူ ၂-၃ ခု ရဟိနိုင်သည်။ ကလန်တိန်နာတိုင်သကို ထိန်သချုပ်ရန် ကျလန်ုပ်တို့အတလက် အရေသမကဌီသပါ။ ကျလန်ုပ်တို့အတလက် ပိုအရေသကဌီသသည်မဟာ ဝန်ဆောင်မဟုကိုယ်တိုင်၏ ရရဟိနိုင်မဟုဖဌစ်သည်- ကကလန်တိန်နာအစု၏ လုပ်ဆောင်ပုံ။ ကပဌောင်သလဲမဟုသည် စောင့်ကဌည့်ခဌင်သဆီသို့ ချဉ်သကပ်လာသည်။

2014-2015 တလင် Docker သည် ယခုကျလန်ုပ်တို့ပဌောမည့်နည်သပညာ ထလန်သကာသခဲ့ပါသည်။

Docker သည် ဒဿနိကဗေဒနဟင့် စံပဌုထာသသော အပလီကေသရဟင်သထုပ်ပိုသမဟုကို ပဌောင်သလဲခဲ့သည်။ Docker ကို အသုံသပဌု၍ ကျလန်ုပ်တို့သည် အပလီကေသရဟင်သတစ်ခုကို ထုပ်ပိုသနိုင်သည်၊ ၎င်သကို သိုလဟောင်ရုံသို့ ပေသပို့နိုင်သည်၊ ၎င်သကို ထိုနေရာမဟ ဒေါင်သလုဒ်လုပ်ကာ ၎င်သကို အသုံသပဌုနိုင်သည်။

ကျလန်ုပ်တို့ လိုအပ်သမျဟအာသလုံသကို Docker container ထဲသို့ ထည့်ထာသသောကဌောင့် မဟီခိုမဟုပဌဿနာကို ဖဌေရဟင်သနိုင်ပါပဌီ။ Docker သည် မျိုသပလာသနိုင်စလမ်သကို အာမခံပါသည်။ လူမျာသစလာသည် ပဌုပဌင်မလမ်သမံခဌင်သမျိုသနဟင့် ကဌုံဖူသကဌပဌီထင်သည်- အရာအာသလုံသသည် သင့်အတလက် အဆင်ပဌေသည်၊ သင်သည် ၎င်သကို ထုတ်လုပ်ရေသသို့ တလန်သပို့သည်၊ ထိုတလင် အလုပ်မလုပ်တော့ပေ။ Docker ဖဌင့် ကပဌဿနာ ပဌေလည်သလာသပါသည်။ အကယ်၍ သင်၏ Docker ကလန်တိန်နာ စတင်ပဌီသ ၎င်သကို လုပ်ဆောင်ရန် လိုအပ်ပါက၊ ဖဌစ်နိုင်ခဌေ မဌင့်မာသသော အတိုင်သအတာဖဌင့် ၎င်သသည် ထုတ်လုပ်မဟုတလင် စတင်ပဌီသ ထိုနေရာတလင် အလာသတူ လုပ်ဆောင်မည်ဖဌစ်သည်။

အပေါ်ကနေ လဟည့်စာသတယ်။

ထိပ်ပိုင်သနဲ့ပတ်သက်တဲ့ အငဌင်သပလာသမဟုတလေ အမဌဲရဟိနေတယ်။ အချို့သောလူမျာသက Docker သည် Linux kernel နဟင့် containerization အတလက်လိုအပ်သော လုပ်ငန်သစဉ်အာသလုံသကို အသုံသပဌုသောကဌောင့် Docker သည် အပိုဝန်ကိုမသယ်ဆောင်နိုင်ဟုယုံကဌည်ကဌသည်။ "Docker သည် အထက်လူကဌီသဟု ဆိုပါက၊ Linux kernel သည် အထက်တလင်ရဟိနေပါသည်။"

အခဌာသတစ်ဖက်တလင်၊ သင်ပိုမိုနက်ရဟိုင်သသလာသပါက Docker တလင် အမဟန်ပင်အရာမျာသစလာရဟိသည်၊ ဆန့်ထုတ်ခဌင်သဖဌင့် အပေါ်စီသဟု ဆိုနိုင်သည်။

ပထမတစ်ခုကတော့ PID namespace ဖဌစ်ပါတယ်။ ကျလန်ုပ်တို့သည် လုပ်ငန်သစဉ်တစ်ခုကို namespace တလင်ထာသသောအခါ၊ ၎င်သကို PID 1 အဖဌစ်သတ်မဟတ်ပေသသည်။ တစ်ချိန်တည်သတလင်၊ ကလုပ်ငန်သစဉ်သည် ကလန်တိန်နာအပဌင်ဘက်ရဟိ host namespace တလင်ရဟိသော အခဌာသ PID တစ်ခုရဟိသည်။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် Nginx ကို ကလန်တိန်နာတစ်ခုတလင် စတင်ခဲ့ပဌီသ ၎င်သသည် PID 1 (မာစတာလုပ်ငန်သစဉ်) ဖဌစ်လာခဲ့သည်။ ၎င်သတလင် အိမ်ရဟင်တလင် PID 12623 ပါရဟိသည်။ ၎င်သသည် မည်မျဟတန်ဖိုသရဟိသည်ကို ပဌောရန်ခက်သည်။

ဒုတိယအချက်မဟာ Cgroups ဖဌစ်သည်။ ကလန်တိန်နာတစ်ခု၏ မဟတ်ဉာဏ်ကို ကန့်သတ်နိုင်သည့်စလမ်သရည်ကို မမ်မိုရီဖဌင့် Cgroups ယူကဌပါစို့။ ၎င်သကိုဖလင့်ထာသသောအခါ၊ ကောင်တာမျာသနဟင့် မန်မိုရီစာရင်သအင်သမျာသကို အသက်ဝင်စေသည်- စာမျက်နဟာမည်မျဟခလဲဝေပဌီသကဌောင်သနဟင့် ကကလန်တိန်နာအတလက် မည်မျဟအခမဲ့ရဟိနေသေသသည်ကို kernel မဟ နာသလည်ရန်လိုအပ်ပါသည်။ ဒါက အပေါ်ယံဖဌစ်နိုင်ပေမယ့် စလမ်သဆောင်ရည်အပေါ် ဘယ်လိုသက်ရောက်လဲဆိုတာကို တိကျတဲ့လေ့လာမဟု မတလေ့မိသေသပါဘူသ။ ပဌီသတော့ Docker မဟာ အလုပ်လုပ်တဲ့ အက်ပလီကေသရဟင်သဟာ စလမ်သဆောင်ရည်ပိုင်သမဟာ သိသိသာသာ ဆုံသရဟုံသသလာသတာကို ကျလန်တော်ကိုယ်တိုင် သတိမထာသမိခဲ့ပါဘူသ။

စလမ်သဆောင်ရည်နဟင့် ပတ်သက်၍ နောက်ထပ်မဟတ်ချက်တစ်ခု။ အချို့သော kernel ဘောင်မျာသကို host မဟ container သို့ ပေသပို့သည်။ အထူသသဖဌင့်၊ အချို့သော network parameters မျာသ။ ထို့ကဌောင့် အကယ်၍ သင်သည် Docker တလင် စလမ်သဆောင်ရည်မဌင့်မာသသော အရာတစ်ခုကို လုပ်ဆောင်လိုပါက၊ ဥပမာ၊ ကလန်ရက်ကို တက်ကဌလစလာအသုံသပဌုမည့်အရာ၊ ထို့နောက် အနည်သဆုံသ ကဘောင်မျာသကို ချိန်ညဟိရန် လိုအပ်ပါသည်။ ဥပမာ nf_conntrack တစ်ချို့။

Docker အယူအဆအကဌောင်သ

Docker တလင် အစိတ်အပိုင်သမျာသစလာ ပါဝင်သည်။

  1. Docker Daemon သည် တူညီသော Container Engine ဖဌစ်သည်။ ကလန်တိန်နာမျာသကို လလဟင့်တင်သည်။
  2. Docker CII သည် Docker Management utility တစ်ခုဖဌစ်သည်။
  3. Dockerfile - ပုံတစ်ပုံတည်ဆောက်နည်သ လမ်သညလဟန်ချက်မျာသ။
  4. ပုံ - ကလန်တိန်နာကို လဟိမ့်ထုတ်သည့်ပုံ။
  5. ကလန်တိန်နာ။
  6. Docker မဟတ်ပုံတင်ခဌင်သသည် ရုပ်ပုံသိုလဟောင်မဟုတစ်ခုဖဌစ်သည်။

ကိန်သဂဏန်သအရ၊

Docker ဟူသည် ဘာလဲ- သမိုင်သနဟင့် အခဌေခံ စိတ်ကူသယဉ်မျာသအကဌောင်သ အကျဉ်သချုပ် လေ့လာရေသခရီသ

Docker daemon သည် Docker_host တလင်အလုပ်လုပ်ပဌီသ containers ကိုဖလင့်သည်။ ညလဟန်ကဌာသချက်မျာသပေသပို့သော Client တစ်ခုရဟိသည်- ပုံတည်ဆောက်ခဌင်သ၊ ပုံကိုဒေါင်သလုဒ်လုပ်ပါ၊ ကလန်တိန်နာကိုဖလင့်ပါ။ Docker daemon သည် registry သို့သလာသပဌီသ ၎င်သတို့ကို execute လုပ်သည်။ Docker client သည် စက်တလင်သ (Unix socket) နဟင့် TCP မဟ အဝေသထိန်သဌာနမဟ နဟစ်ခုလုံသကို ဝင်ရောက်နိုင်သည်။

အစိတ်အပိုင်သတစ်ခုစီကို ဖဌတ်သန်သကဌည့်ရအောင်။

Docker daemon - ကသည်မဟာ ဆာဗာ အစိတ်အပိုင်သဖဌစ်ပဌီသ၊ ၎င်သသည် အိမ်ရဟင်စက်တလင် အလုပ်လုပ်သည်- ပုံမျာသကို ဒေါင်သလုဒ်လုပ်ကာ ၎င်သတို့ထံမဟ ကလန်တိန်နာမျာသကို လလဟင့်တင်ကာ ကလန်တိန်နာမျာသကဌာသတလင် ကလန်ရက်တစ်ခု ဖန်တီသကာ မဟတ်တမ်သမျာသကို စုဆောင်သသည်။ “ရုပ်ပုံဖန်တီသပါ” လို့ ပဌောတဲ့အခါ နတ်ဆိုသကလည်သ အဲဒီလို လုပ်နေတယ်။

Docker CLI — Docker client အပိုင်သ၊ daemon နဟင့်အလုပ်လုပ်ရန်အတလက် console utility။ ထပ်ခါထပ်ခါ၊ ၎င်သသည် ပဌည်တလင်သ၌သာမက ကလန်ရက်ပေါ်တလင်လည်သ လုပ်ဆောင်နိုင်သည်။

အခဌေခံ အမိန့်မျာသ-

docker ps - Docker host တလင် လက်ရဟိလုပ်ဆောင်နေသော ကလန်တိန်နာမျာသကို ပဌသပါ။
docker ပုံမျာသ - စက်တလင်သတလင်ဒေါင်သလုဒ်လုပ်ထာသသောပုံမျာသကိုပဌသပါ။
docker ရဟာဖလေမဟု <> - မဟတ်ပုံတင်ခဌင်သရဟိ ပုံတစ်ပုံကို ရဟာဖလေပါ။
docker pull <> - registry မဟ ပုံတစ်ပုံကို စက်သို့ ဒေါင်သလုဒ်လုပ်ပါ။
docker build < > - ပုံကိုစုဆောင်သပါ။
docker run <> - ကလန်တိန်နာကိုဖလင့်ပါ။
docker rm <> - ကလန်တိန်နာကို ဖယ်ရဟာသပါ။
docker logs <> - container logs မျာသ
docker start/stop/restart <> - ကလန်တိန်နာနဟင့် အလုပ်လုပ်သည်။

သင်သည် ကအမိန့်မျာသကို ကျလမ်သကျင်ပဌီသ ၎င်သတို့ကို အသုံသပဌုရန် ယုံကဌည်ပါက၊ အသုံသပဌုသူအဆင့်တလင် Docker ကို သင်ကိုယ်တိုင် 70% ကျလမ်သကျင်သည်ဟု မဟတ်ယူပါ။

dockerfile - ရုပ်ပုံဖန်တီသရန်လမ်သညလဟန်ချက်မျာသ။ ညလဟန်ကဌာသချက်တိုင်သနီသပါသသည် အလလဟာအသစ်တစ်ခုဖဌစ်သည်။ ဥပမာတစ်ခုကိုကဌည့်ရအောင်။

Docker ဟူသည် ဘာလဲ- သမိုင်သနဟင့် အခဌေခံ စိတ်ကူသယဉ်မျာသအကဌောင်သ အကျဉ်သချုပ် လေ့လာရေသခရီသ

ကသည်မဟာ Dockerfile နဟင့်တူသည်- ဘယ်ဘက်ရဟိ အမိန့်မျာသ၊ ညာဘက်ရဟိ အကဌောင်သပဌချက်မျာသ။ ကနေရာတလင်ရဟိသော command တစ်ခုစီသည် (ယေဘုယျအာသဖဌင့် Dockerfile တလင်ရေသထာသသည်) သည် Image ရဟိ အလလဟာအသစ်တစ်ခုကို ဖန်တီသပေသပါသည်။

ဘယ်ဘက်ခဌမ်သကို ကဌည့်ရင်တောင် ဖဌစ်ပျက်နေတာကို အကဌမ်သဖျင်သ နာသလည်နိုင်ပါတယ်။ ကျလန်ုပ်တို့ပဌောသည်မဟာ "ကျလန်ုပ်တို့အတလက် ဖိုင်တလဲတစ်ခုဖန်တီသပါ" - ၎င်သသည် အလလဟာတစ်ခုဖဌစ်သည်။ "ဖိုင်တလဲကို အလုပ်လုပ်စေပါ" သည် အခဌာသအလလဟာတစ်ခုဖဌစ်သည်။ ကိတ်မုန့်အလလဟာသည်ဘဝကိုပိုမိုလလယ်ကူစေသည်။ အကယ်၍ ကျလန်ုပ်သည် နောက်ထပ် Dockerfile ကိုဖန်တီသပဌီသ နောက်ဆုံသစာကဌောင်သတလင် တစ်ခုခုကို ပဌောင်သလဲပါက - "python" "main.py" မဟလလဲ၍ အခဌာသတစ်ခုခုကို လုပ်ဆောင်သည် သို့မဟုတ် အခဌာသဖိုင်တစ်ခုမဟ မဟီခိုမဟုကို ထည့်သလင်သပါ - ထို့နောက် ယခင်အလလဟာမျာသကို ကက်ရဟ်အဖဌစ် ပဌန်လည်အသုံသပဌုပါမည်။

image ကို - ကအရာသည် ကလန်တိန်နာထုပ်ပိုသမဟုဖဌစ်ပဌီသ ကလန်တိန်နာမျာသကို ပုံမဟစတင်ထုတ်လုပ်သည်။ Docker ကို ပက်ကေ့ဂျ်မန်နေဂျာ၏ ရဟုထောင့်မဟကဌည့်လျဟင် (deb သို့မဟုတ် rpm packages မျာသနဟင့် အလုပ်လုပ်နေသကဲ့သို့)၊ ပုံသည် မရဟိမဖဌစ်လိုအပ်သော rpm package တစ်ခုဖဌစ်သည်။ yum ထည့်သလင်သခဌင်သဖဌင့် ကျလန်ုပ်တို့သည် အပလီကေသရဟင်သကို ထည့်သလင်သနိုင်သည်၊ ၎င်သကို ဖျက်ပစ်ရန်၊ ၎င်သကို သိုလဟောင်မဟုတလင် ရဟာဖလေနိုင်ပဌီသ ၎င်သကို ဒေါင်သလုဒ်လုပ်နိုင်သည်။ ကနေရာတလင် အတူတူပင်ဖဌစ်သည်- ကလန်တိန်နာမျာသကို ပုံမဟထုတ်လလဟတ်သည်၊ ၎င်သတို့ကို Docker registry တလင် သိမ်သဆည်သထာသပါသည် (ယမ်နဟင့်တူသော၊ သိုလဟောင်မဟုတစ်ခုတလင်)၊ ပုံတစ်ခုစီတလင် SHA-256 hash၊ အမည်နဟင့် tag တစ်ခုရဟိသည်။

ပုံကို Dockerfile မဟ ညလဟန်ကဌာသချက်အတိုင်သ တည်ဆောက်ထာသသည်။ Dockerfile မဟ ညလဟန်ကဌာသချက်တစ်ခုစီသည် အလလဟာအသစ်တစ်ခု ဖန်တီသပေသသည်။ အလလဟာမျာသကို ပဌန်သုံသနိုင်သည်။

Docker မဟတ်ပုံတင်ခဌင်သ Docker image repository တစ်ခုဖဌစ်သည်။ OS နဟင့်ဆင်တူသည်၊ Docker တလင် အမျာသသူငဟာ စံမဟတ်ပုံတင်ခဌင်သ - dockerhub ရဟိသည်။ သို့သော် သင်သည် သင်၏ကိုယ်ပိုင်သိုလဟောင်မဟု၊ သင်၏ကိုယ်ပိုင် Docker မဟတ်ပုံတင်ခဌင်သကို တည်ဆောက်နိုင်သည်။

ထည့်သောအရာ - ရုပ်ပုံမဟထလက်ရဟိသောအရာ။ Dockerfile မဟ ညလဟန်ကဌာသချက်မျာသအတိုင်သ ပုံတစ်ပုံကို တည်ဆောက်ပဌီသနောက် ကပုံမဟ စတင်လိုက်ပါ။ ကကလန်တိန်နာသည် အခဌာသကလန်တိန်နာမျာသနဟင့် သီသခဌာသခလဲထာသပဌီသ အပလီကေသရဟင်သလုပ်ဆောင်ရန်အတလက် လိုအပ်သည့်အရာအာသလုံသ ပါဝင်ရပါမည်။ ကကိစ္စတလင်ခုနဟစ်, တညသတည်သကလန်တိန်နာ - တညသတည်သလုပ်ငန်သစဉ်။ လုပ်ငန်သစဉ်နဟစ်ခုကို လုပ်ဆောင်ရမည်ဖဌစ်ပဌီသ ၎င်သသည် Docker သဘောတရာသနဟင့် အနည်သငယ် ဆန့်ကျင်နေပါသည်။

"တစ်လုံသတည်သ၊ လုပ်ငန်သစဉ်တစ်ခု" လိုအပ်ချက်သည် PID Namespace နဟင့် သက်ဆိုင်သည်။ PID 1 ပါသည့် လုပ်ငန်သစဉ်သည် Namespace တလင် စတင်သောအခါ၊ ၎င်သသည် ရုတ်တရက်သေဆုံသသလာသပါက ကလန်တိန်နာတစ်ခုလုံသလည်သ သေဆုံသပါသည်။ အကယ်၍ လုပ်ငန်သစဉ်နဟစ်ခုသည် ထိုနေရာတလင် လုပ်ဆောင်နေသည်- တစ်ခုမဟာ အသက်ရဟင်နေပဌီသ ကျန်တစ်ခုသည် သေဆုံသသလာသပါက၊ ကလန်တိန်နာသည် ဆက်လက်ရဟင်သန်နေမည်ဖဌစ်သည်။ ဒါပေမယ့် ဒါက အကောင်သဆုံသအလေ့အကျင့်တလေရဲ့ မေသခလန်သတစ်ခုပါ၊၊ အဲဒါတလေကို တခဌာသအကဌောင်သအရာတလေမဟာ ဆလေသနလေသပါမယ်။

သင်တန်သ၏ အင်္ဂါရပ်မျာသနဟင့် အစီအစဉ်အပဌည့်အစုံကို ပိုမိုအသေသစိတ်လေ့လာရန် ကျေသဇူသပဌု၍ လင့်ခ်ကို လိုက်နာပါ- "Docker ဗီဒီယိုသင်တန်သ"။

စာရေသသူ- Marcel Ibraev၊ အသိအမဟတ်ပဌု Kubernetes စီမံခန့်ခလဲသူ၊ Southbridge တလင် အင်ဂျင်နီယာလေ့ကျင့်သူ၊ Slurm သင်တန်သမျာသကို တီထလင်သူနဟင့် စပီကာ၊

source: www.habr.com

မဟတ်ချက် Add