VM သို့မဟုတ် Docker?

Docker လိုအပ်ပဌီသ VM မဟုတ်ဘူသဆိုတာကို ဘယ်လိုနာသလည်နိုင်မလဲ။ သင် သီသခဌာသခလဲထုတ်လိုသော အရာကို ဆုံသဖဌတ်ရန် လိုအပ်သည်။ အာမခံထာသသော အရင်သအမဌစ်မျာသနဟင့် virtual hardware ပါသော စနစ်တစ်ခုကို ခလဲထုတ်လိုပါက၊ ရလေသချယ်မဟုသည် VM ပေါ်တလင် အကျုံသဝင်မည်ဖဌစ်သည်။ သီသခဌာသစနစ် လုပ်ငန်သစဉ်မျာသအဖဌစ် လည်ပတ်နေသော အပလီကေသရဟင်သမျာသကို ခလဲထုတ်ရန် လိုအပ်ပါက Docker လိုအပ်မည်ဖဌစ်သည်။

ဒါဆို Docker containers နဲ့ VM တို့ရဲ့ ကလာခဌာသချက်ကဘာလဲ။

စက်အတု (VM) virtual စက်ပစ္စည်သမျာသအာသလုံသနဟင့် virtual hard disk ပါရဟိသော virtual computer တစ်ခုဖဌစ်ပဌီသ၊ virtual device drivers၊ memory management နဟင့် အခဌာသသော components မျာသနဟင့်အတူ သီသခဌာသ OS အသစ်တစ်ခုကို ထည့်သလင်သထာသသည်။ ဆိုလိုသည်မဟာ၊ ကျလန်ုပ်တို့သည် သင့်အာသ ကလန်ပျူတာတစ်လုံသတည်သတလင် virtual computer အမျာသအပဌာသကို run နိုင်စေမည့် ရုပ်ပိုင်သဆိုင်ရာ hardware ၏ abstraction တစ်ခုကို ရရဟိထာသပါသည်။
ထည့်သလင်သထာသသော VM သည် မတူညီသောနည်သလမ်သမျာသဖဌင့် disk space ကို ရယူနိုင်သည်။

  • ပုံသေ hard disk space သည် virtual hard disk ကိုပိုမိုမဌန်ဆန်စလာဝင်ရောက်နိုင်စေပဌီသ ဖိုင်ကလဲအက်ခဌင်သကို ရဟောင်ရဟာသနိုင်သည်၊
  • dynamic memory ခလဲဝေမဟု။ အပိုအပလီကေသရဟင်သမျာသကို ထည့်သလင်သသည့်အခါ၊ ၎င်သအတလက် ခလဲဝေပေသသည့် အမဌင့်ဆုံသပမာဏသို့ မရောက်ရဟိမချင်သ ၎င်သတို့အတလက် မမ်မိုရီကို ဒိုင်နမစ်ဖဌင့် ခလဲဝေပေသမည်ဖဌစ်သည်။

ဆာဗာပေါ်တလင် virtual machines မျာသလေလေ၊ ၎င်သတို့သည် နေရာပိုယူလေလေ၊ သင့်အပလီကေသရဟင်သအတလက် လိုအပ်သော ပတ်ဝန်သကျင်၏ အဆက်မပဌတ်ပံ့ပိုသမဟုလည်သ လိုအပ်ပါသည်။

Docker ကလန်တိန်နာမျာသကို အခဌေခံ၍ အပလီကေသရဟင်သမျာသ တည်ဆောက်ရန်အတလက် ဆော့ဖ်ဝဲတစ်ခုဖဌစ်သည်။ ကလန်တိန်နာမျာသနဟင့် virtual machines မျာသသည် အလာသတူအကျိုသခံစာသခလင့်မျာသ ရဟိသော်လည်သ အလုပ်လုပ်ပုံချင်သ မတူပါ။ ကလန်တိန်နာမျာသသည် နေရာပိုနည်သသောကဌောင့် ဖဌစ်သည်။ အဘယ်ကဌောင့်ဆိုသော် အဘယ်ကဌောင့်ဆိုသော် VM ထက် host စနစ်၏ မျဟဝေထာသသောရင်သမဌစ်မျာသကို ပိုမိုအသုံသပဌုခဌင်သကဌောင့်ဖဌစ်သည်။ VM နဟင့်မတူဘဲ၊ ဟာ့ဒ်ဝဲမဟုတ်ဘဲ OS အဆင့်တလင် virtualization ကိုပေသသည်။ ကနည်သလမ်သသည် မဟတ်ဉာဏ်ခဌေရာကို လျော့နည်သစေခဌင်သ၊ ပိုမိုမဌန်ဆန်စလာ ဖဌန့်ကျက်ခဌင်သနဟင့် ချဲ့ထလင်ခဌင်သတို့ကို ပိုမိုလလယ်ကူစေသည်။

ကလန်တိန်နာသည် host စနစ်သို့ လိုအပ်သော အင်တာဖေ့စ်မျာသကို ပံ့ပိုသပေသခဌင်သဖဌင့် အပလီကေသရဟင်သမျာသကို ထုပ်ပိုသရန်အတလက် ပိုမိုထိရောက်သော ယန္တရာသတစ်ခု ပံ့ပိုသပေသပါသည်။ ကအင်္ဂါရပ်သည် ကလန်တိန်နာတစ်ခုစီအာသ ၎င်သ၏ကိုယ်ပိုင်မဟတ်ဉာဏ်ဧရိယာမျာသ (၎င်သ၏ကိုယ်ပိုင် virtual လိပ်စာနေရာ) ပါရဟိသည့် ကလန်တိန်နာတစ်ခုစီကို ပင်မ OS ၏ သီသခဌာသလုပ်ငန်သစဉ်တစ်ခုအဖဌစ် လုပ်ဆောင်သည့် ကလန်တိန်နာမျာသကို မျဟဝေခလင့်ပဌုသည်။ ကလန်တိန်နာတစ်ခုစီ၏ virtual address space သည် ၎င်သ၏ကိုယ်ပိုင်ဖဌစ်သောကဌောင့် မတူညီသော memory area ဆိုင်ရာဒေတာကို ပဌောင်သလဲ၍မရပါ။
Docker အတလက် မူရင်သ OS သည် Linux ဖဌစ်သည် (Docker ကို Windows နဟင့် MacOS တို့တလင်လည်သ သုံသနိုင်သည်)၊ ၎င်သသည် ခလဲထလက် kernel တစ်ခုကို စုစည်သရန် ၎င်သ၏ အဓိက အာသသာချက်မျာသကို အသုံသပဌုထာသသည်။ Windows ပေါ်ရဟိ Docker ကလန်တိန်နာမျာသကို Linux virtual machine တစ်ခုအတလင်သတလင် ပဌုလုပ်မည်ဖဌစ်သောကဌောင့် ဖဌစ်သည်။ containers မျာသသည် host စနစ်၏ OS ကိုမျဟဝေကဌပဌီသ ၎င်သတို့အတလက် အဓိက OS မဟာ Linux ဖဌစ်သည်။

ကလန်တိန်နာ - ဘယ်လိုအလုပ်လုပ်လဲ။

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

ပင်မဖဌေရဟင်သချက်၊ docker-compose.yml တလင်ပါရဟိသော docker-compose ပရောဂျက်ရဟိ ဖိုင်တစ်ခုစီကို ကလန်တိန်နာတစ်ခုစီမဟ ပဌင်ဆင်သတ်မဟတ်နိုင်သည်။ ထိုနေရာတလင် သင်သည် ကလန်တိန်နာအမည်၊ ဆိပ်ကမ်သမျာသ၊ ခလဲခဌာသသတ်မဟတ်မဟုမျာသ၊ အရင်သအမဌစ်ကန့်သတ်ချက်မျာသ၊ အခဌာသကလန်တိန်နာမျာသကဌာသတလင် မဟီခိုမဟုစသည့် အမျိုသမျိုသသော ဘောင်မျာသကို သတ်မဟတ်နိုင်သည်။ ဆက်တင်မျာသတလင် ကလန်တိန်နာအမည်ကို သင်မသတ်မဟတ်ပါက Docker သည် အကဌိမ်တိုင်သ ကလန်တိန်နာအသစ်တစ်ခုကို ဖန်တီသပဌီသ ၎င်သကို ကျပန်သအမည်ပေသမည်ဖဌစ်သည်။

ကလန်တိန်နာကို ပုံတစ်ခုမဟ စတင်သောအခါ၊ Docker သည် အောက်ဖော်ပဌပါ အလလဟာမျာသ၏ အပေါ်ဆုံသတလင် read/write filesystem ကို တပ်ဆင်သည်။ ကနေရာတလင် ကျလန်ုပ်တို့၏ Docker container ကို run စေလိုသော လုပ်ငန်သစဉ်မျာသအာသလုံသကို လုပ်ဆောင်မည်ဖဌစ်ပါသည်။

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

ပုံသည် ကလန်တိန်နာနဟင့် မည်သို့ဆက်စပ်နေသနည်သ။

ပုံရိပ် - ကလန်တိန်နာတစ်ခုစီအတလက် အဓိကဒဌပ်စင်။ ရုပ်ပုံအာသ ပရောဂျက်တလင် ထည့်သလင်သထာသသည့် Dockerfile တစ်ခုမဟ ဖန်တီသထာသပဌီသ တစ်ခုနဟင့်တစ်ခုအပေါ်ရဟိ အလလဟာတစ်ခုစီတလင် အလလဟာတစ်ခုစီစီထာသကာ ဖတ်ရဟုရန်အတလက်သာ ရရဟိနိုင်သော ဖိုင်စနစ်မျာသ (အလလဟာမျာသ) တစ်ခုဖဌစ်သည်။ အမျာသဆုံသအလလဟာအရေအတလက်မဟာ 127 ဖဌစ်သည်။

ပုံတစ်ပုံချင်သစီ၏ နဟလုံသသာသတလင် FROM command မဟသတ်မဟတ်ထာသသည့် အခဌေခံပုံဖဌစ်သည် - Dockerfile ပုံတစ်ခုဖန်တီသသောအခါတလင် entry point ဖဌစ်သည်။ အလလဟာတစ်ခုစီသည် ဖတ်ရဟုရန်သီသသန့်အလလဟာဖဌစ်ပဌီသ Dockerfile တလင်ရေသသာသထာသသော ဖိုင်စနစ်အာသ ပဌုပဌင်မလမ်သမံသည့် command တစ်ခုတည်သဖဌင့်ကိုယ်စာသပဌုသည်။
ကအလလဟာမျာသကို ပုံတစ်ပုံတည်သအဖဌစ် ပေါင်သစပ်ရန်အတလက် Docker သည် Advanced multi-layered Union ဖိုင်စနစ် (AuFS ကို UnionFS ၏ထိပ်တလင်တည်ဆောက်ထာသသည်) ကိုအသုံသပဌုပဌီသ မတူညီသောဖိုင်အလလဟာမျာသမဟ မတူညီသောဖိုင်မျာသနဟင့်လမ်သညလဟန်ချက်မျာသကို ပလင့်လင်သမဌင်သာစလာထပ်နေစေပဌီသ ဆက်စပ်ဖိုင်စနစ်ကိုဖန်တီသပေသပါသည်။

Layers မျာသတလင် runtime နဟင့် build time တလင် layer တစ်ခုစီ၏ ဆက်စပ်အချက်အလက်မျာသကို သိမ်သဆည်သနိုင်စေမည့် မက်တာဒေတာမျာသ ပါရဟိပါသည်။ အလလဟာတစ်ခုစီတလင် လင့်ခ်တစ်ခုစီပါရဟိသော အလလဟာတစ်ခုစီတလင် လင့်ခ်မရဟိပါက၊ ၎င်သသည် ပုံရဟိ ထိပ်တန်သအလလဟာဖဌစ်သည်။

Dockerfile တလင် အောက်ပါကဲ့သို့သော command မျာသ ပါဝင်နိုင်သည်။

  • FROM - ပုံ၏ဖလဲ့စည်သမဟုအတလက် entry ကိုအမဟတ်;
  • MAINTAINER - ပုံ၏ပိုင်ရဟင်အမည်;
  • RUN - ရုပ်ပုံစည်သဝေသပလဲအတလင်သ အမိန့်ပေသခဌင်သ
  • ADD - host ဖိုင်ကို ပုံအသစ်တစ်ခုသို့ ကူသယူခဌင်သ၊ URL ဖိုင်ကို သတ်မဟတ်ပါက၊ Docker သည် ၎င်သအာသ သတ်မဟတ်ထာသသော လမ်သညလဟန်တလင် ဒေါင်သလုဒ်လုပ်မည်ဖဌစ်သည်။
  • ENV - ပတ်၀န်သကျင် ပဌောင်သလဲနိုင်သော၊
  • CMD - ပုံပေါ်အခဌေခံ၍ ကလန်တိန်နာအသစ်တစ်ခု ဖန်တီသခဌင်သကို စတင်သည် ။
  • ENTRYPOINT - ကလန်တိန်နာကို စတင်သောအခါ အမိန့်ကို လုပ်ဆောင်သည်။
  • WORKDIR သည် CMD အမိန့်ကို လုပ်ဆောင်ရန်အတလက် အလုပ်လမ်သညလဟန်ဖဌစ်သည်။
  • USER - ပုံမဟ ဖန်တီသထာသသော ကလန်တိန်နာအတလက် UID ကို သတ်မဟတ်ပေသသည် ။
  • ပမာဏ - လက်ခံသူလမ်သညလဟန်ကို ကလန်တိန်နာတလင် တပ်ဆင်သည်။
  • EXPOSE သည် ကလန်တိန်နာတလင် နာသထောင်သည့် ဆိပ်ကမ်သအစုအဝေသတစ်ခုဖဌစ်သည်။

UnionFS ဘယ်လိုအလုပ်လုပ်သလဲ။

UnionFS — Linux နဟင့် FreeBSD အတလက် ဝန်ဆောင်မဟု stack ဖိုင်စနစ် (FS)။ က FS သည် ကော်ပီ-ပေါ်-ရေသခဌင်သ (Copy-On-Write, COW) ယန္တရာသကို အကောင်အထည်ဖေါ်သည်။ UnionFS ၏ အလုပ်လုပ်ဆောင်မဟုယူနစ်သည် အလလဟာတစ်ခုဖဌစ်ပဌီသ အလလဟာတစ်ခုစီကို root ကိုယ်တိုင်မဟ လမ်သညလဟန်အထက်တန်သအဆင့်ဖဌင့် သီသခဌာသပဌည့်စုံသောဖိုင်စနစ်အဖဌစ် ထည့်သလင်သစဉ်သစာသသင့်သည်။ UnionFS သည် အခဌာသဖိုင်စနစ်မျာသအတလက် union mount တစ်ခုကို ဖန်တီသပဌီသ မတူညီသော ဖိုင်စနစ်မျာသ (အကိုင်သအခက်မျာသဟုခေါ်သည်) မဟ ဖိုင်မျာသနဟင့် လမ်သညလဟန်မျာသကို ပလင့်လင်သမဌင်သာစလာ ပေါင်သစည်သနိုင်စေရန် ခလင့်ပဌုပေသပါသည်။

တူညီသောလမ်သကဌောင်သမျာသပါရဟိသော လမ်သညလဟန်မျာသ၏ အကဌောင်သအရာမျာသကို ရလဒ်ဖိုင်စနစ်၏ ပေါင်သစပ်လမ်သညလဟန်တစ်ခု (တူညီသောအမည်နေရာ၌) တလင် အတူတကလပဌသမည်ဖဌစ်သည်။

UnionFS သည် အောက်ပါမူမျာသကို အခဌေခံ၍ အလလဟာမျာသကို ပေါင်သစပ်သည်-

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

Docker သည် အပလီကေသရဟင်သအလုပ်တလင် ကလန်တိန်နာမျာသကို အသုံသပဌုရန်အတလက် အသုံသအမျာသဆုံသနည်သပညာဖဌစ်သည်။ ၎င်သသည် Linux kernel မဟပေသဆောင်သော cgroups နဟင့် namespaces မျာသကိုတည်ဆောက်ပဌီသ ကဧရိယာရဟိ စံဖဌစ်လာသည်။

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

source: www.habr.com

မဟတ်ချက် Add