Wednesday, May 27, 2020

What I learned about container - EP1 (Intro to containerization technology)

                Container အကြောင်းလေးနောက်ဆုံးတော့ရောက်လာပါပြီ။ တစ်ကယ်တမ်း ကျွန်တော် container ပိုင်း automation ပိုင်းတွေနဲ့ အတွေ့အကြုံအရမ်းနည်းနေပါသေးတယ်။ အခု ဒီ article ကိုလဲ Covid ကာလမှာ docker container တို့ K8s ပိုင်းတွေ self-learning လုပ်ဖြစ်တာလေး တွေ ကို ပြန်မှတ်မိအောင် တက်နိုင်သလောက် ပြန်ရှင်းပြထားတာဖြစ်ပါတယ်။

So, What is containerization technology?


           ဒီကနေပဲစကြတာပေါ့။ Container ဆိုတာက  ကျွန်တော်တို့ application တွေ service တွေရှိတယ်ပေါ့ဥပမာ web service, database service,  လုပ်ငန်းသုံး application တွေရှိမယ် စတာတွေကို ကျွန်တော်တို့ installation လုပ်ရမယ် deploy လုပ်ရမယ်ဆိုရင် traditional နည်းလမ်းအရ physical host မှာဖြစ်ရင်ဖြစ်မယ် ဒါမဟုတ် VMware တို့လိုမျိုး Virtualization platform ပေါ်မှာ VM တွေဆောက်ပြီး deploy လုပ်ကြရပါတယ်။



image ref: google-image


             အဲ့အတွက် သူတို့ရဲ့ တည်ဆောက်ပုံက ဘယ်လိုဖြစ်သွားလဲဆိုတော့ underlying layer ဖြစ်တဲ့ physical node က သတ်သတ် အဲ့အပေါ်မှာမှ service တွေ app တွေထားတဲ့ VM instance တွေက သတ်သတ် အဲ့လိုပုံစံမျိုးနဲ့သွားပါတယ်။  သူတို့အချင်းချင်း ကြားမှာလဲ ဒီ physical layer နဲ့ app တွေ run ထားတဲ့ VM layer တို့ဟာ ဒီ application တစ်ခု run ဖို့အတွက် တစ်ခုနဲ့တစ်ခု မှီခိုချင်းမရှိပဲ အလုပ်လုပ်ကြပါတယ်။ ပြောချင်တာက ဒီ application ရဲ့ လိုအပ်တဲ့ library files တွေ dependencies တွေက physical node ကနေ မှီခိုထားတာ မဟုတ်ပဲ သူတို့ လက်ရှိ run ထားတဲ့ VM instance ရဲ့ OS ကနေ support ပေးတာဖြစ်ပါတယ်။ အဲ့အတွက် app တစ်ခု အတွက်  VM တစ်ခု ပုံစံသွားပါတယ်။

            အခု ဒီ containerization technology မှာကျတော့ virtualization technology မှာသုံးသလိုမျိုး Hardware layer -> Hypervisor -> Virtual Machine -> Application layer ဆိုပြီး အဆင့်တွေအများကြီး မရှိတော့ပဲ Hardware layer -> Physical OS -> Containerization layer ဆိုပြီး ဖြစ်သွားပါတယ်။ အဲ့အတွက်ကြောင့် ဘာတွေအားသာသွားလဲဆိုတော့ deployment တွေလုပ်တဲ့နေရာမှာ အရင်ကထက်ပိုပြီး တည်ဆောက်ရတဲ့ အဆင့်တွေမများတော့ပဲ မြန်ဆန်လာတယ် App တစ်ခု အတွက် VM instance တစ်ခုပုံစံတွေလုပ်ပေးစရာမလိုတော့ပဲ ဖြစ်သွားပါတယ်။ ဒီနေရာမှာ VM instance ကြားထဲမှာ မပါတော့ပေမယ့် သူ့ ရဲ့အလုပ်လုပ်ပုံက ကိုယ်ပိုင် library ကိုယ်ပိုင် dependencies နဲ့ပဲ သွားနေပြီး physical OS ရဲ့ libraries, dependencies တွေကိုမမှီခိုဘူး အဲ့အတွက် ဥပမာ UAT ကနေ Production ပြောင်းတဲ့အချိန်မှာ အရင်ကလို developer စက်ကနေ server type platform ပြောင်းတဲ့အခါ server underlying OS ပေါ်မှာ မမှီခိုတော့တဲ့အတွက် platform related issue တွေမရှိတော့ပဲ မြန်မြန်ဆန်ဆန် deploy လုပ်နိုင်ပီး  productivity ဖြစ်လာပါတယ်။ အဲ့တော့ ဒီနေရာမှာ containerization technology သည် underlying OS (kernel) ကိုပဲ share ယူသုံးပြီး Application တစ်ခုအတွက် လိုအပ်တဲ့ libraries , dependencies တွေကိုတော့ ကိုယ်ပိုင်အနေနဲ့ပဲ ထားပြီးအသုံးပြုတာဖြစ်ပါတယ်။

What are the container image and containers?

          Container image ဆိုတာကတော့ ကျွန်တော်တို့ container တစ်ခု run ဖို့အတွက် လိုအပ်တဲ့ ဥပမာ libraries တွေ dependencies  တွေကို  package တစ်ခုအနေနဲ့ တည်ဆောက်ပေးထားတဲ့ image file တွေဖြစ်ပါတယ်။ အဲ့အတွက် container တစ်ခု run တဲ့အခါ ဥပမာ nginx web service container တစ်ခု run ဖို့အတွက် nginx web service အတွက် လိုအပ်တဲ့ setting တွေ configuration တွေကို container image မှာ အရင်တည်ဆောက်ရပါတယ် ပြီးမှသာ အဲ့ဒီ container image ကိုသုံးပြီး nginx container တစ်ခု run နိုင်တာဖြစ်ပါတယ်။ ဒီနေရာမှာ container image တွေသည် static file အမျိုးအစားဖြစ်သည့်အတွက် အဲ့ဒီ image ကို သုံးပြီး container တစ်ခု run လိုက်လျှင် ပြန်ပြင်လို့မရတော့ပဲ container ကို delete ပြန်လုပ်ပြီးမှသာ image file ကို ပြန်ပြင်ဆင်နိုင်တာဖြစ်ပါတယ်။

How does container work?

         Container ဘယ်လိုအလုပ်လုပ်လဲဆိုတော့  သူ့မှာ အဓိက main process (single service), isolated network, ကိုယ်ပိုင် mount point စသည်တို့ဖြင့်တည်ဆောက်ထားတယ်။ Main process ဆိုတာက အပေါ်မှာ ဥပမာပေးခဲ့သလိုပဲ ဒီ container သည် Nginx service run မည့် container ဆိုရင် Nginx နဲ့ပတ်သက်တဲ့ process တွေမှလွဲ၍ ကျန်တာတွေပါ၀င်မှာမဟုတ်ပဲ own isolated environment တစ်ခုအနေနဲ့ အလုပ်လုပ်သွားမှာဖြစ်ပြီး underlying OS (kernel) ကိုသာ container ထားဖို့အတွက် share အသုံးပြုသွားမှာဖြစ်ပါတယ်။

What is a container engine?

         ကျွန်တော်တို့ အခု ဒီ container တွေ run ဖို့အတွက် container engine တစ်ခု ရှိဖို့လိုအပ်ပါတယ်။ လက်ရှိ အသုံးများဆုံး popular အဖြစ်ဆုံးကတော့ "Docker engine" ပဲဖြစ်ပြီး ကျန်တဲ့  အမျိုးအစားတွေဖြစ်တဲ့ rkt, mesos, LXC စတဲ့ container engines တွေလဲ ရှိပါတယ်။
image ref: google-image


 Docker က LXC ကိုအခြေခံပြီး အသုံးပြုရ ပိုမိုလွယ်ကူအောင်တည်ဆောက်ထားတာဖြစ်ပါတယ်။ Docker engine ကို ကျွန်တော်တို့ Ubuntu, CentOS, Debian, etc.. စသည့် Linux OS platform တွေပေါ်မှာ အသုံးပြုနိုင်ပါတယ်။ 
Episode-1 ကိုတော့ ဒီလောက်နဲ့ပဲရပ်ထားလိုက်ပါမယ်။ :) 

Share:

0 comments:

Post a Comment