An Overview of Docker
It is work in my machine!!

Devတွေတော်တော်များများကြားဖူးတဲ့ ပြောဖူးတဲ့ စကားတစ်ခွန်းရှိပါတယ်။ ကို့ Device မှာကျတော့ အလုပ်လုပ်တယ်။ တခြား Device တွေမှာကျ ဘာလို့အလုပ်မလုပ်တာလဲ။ ဒါမှမဟုတ် တစ်ခြား Device တွေမှာကျတော့ အလုပ်လုပ်ပြီး ကို့ Device မှာကျ ဘာလို့ အလုပ်မလုပ်တာလဲ။ ကို့ Pc ကြီးက စုတ်နေလို့လားပေါ့။ တကယ်တမ်းမှာတော့ တကယ့်ပြဿနာတွေက operating system မတူညီတာတွေ။ ဥပမာ* ကို့စက်က window ဖြစ်ပြီး တစ်ခြားစက်က Mac , Linux ဖြစ်နေတာမျိုးတွေ၊ နောက်ထပ်ကတော့ Environment Setups ခြင်းမတူတာတွေကြောင့် အဖြစ်များပါတယ်။ သူ့ကို ဥပမာပေးရမယ်ဆိုရင်* ကို့ Device မှာက Node Version 20.10 ကို အသုံးပြုထားပြီး application တစ်ခုကို Create Deploy Run ပြုလုပ်တယ်ဆိုပါတော့။ ( ဒီနေရာမှာ Create Deploy Run လို့ သုံးခါရေးရတာ ရှည်တာမို့ တည်ဆောက်တယ် လို့ပဲ နောက်ပိုင်းမှာ ရေးသားပါမယ်။ ) ဒါပေမဲ့ ဒီ Application ကိုပဲ တခြား Device တစ်ခုမှာ တည်ဆောက်မယ်ဆိုရင် တခြား Device က Node Version 20.10 ကိုပဲ သုံးထားတာ ဟုတ်ချင်မှ ဟုတ်မှာပါ။ Version နိမ့်နေတာ မျိုးလဲ ဖြစ်နိုင်ပါတယ်။ ဒီလိုနေရာမှာ ကို့ application မတည်ဆောက်နိုင်တဲ့ Node Version ဖြစ်နေမယ်ဆိုရင်တော့ အပေါ်က ပြောသလို တခြားစက်မှာကျ အလုပ်လုပ်တယ် ဒီစက်မှာကျ ဘာလို့ အလုပ်မလုပ်တာလဲဆိုတဲ့ ပြဿနာတွေ ရှိသွားနိုင်ပါတယ်။ ဒါကြောင့် ဒီလိုပြဿနာတွေ မဖြစ်အောင် Dev တိုင်းသိထားသင့်တဲ့ Docker အကြောင်းပြောပြပေးထားပါတယ်။
Docker ဆိုတာ ဘာလဲ။
Docker ဆိုတာက ကျွန်တော်တို့ရဲ့ application တွေကို Container တွေထဲမှာ Create လုပ်ဖို့ ဒါမှမဟုတ် Deploy လုပ်ဖို့ ဒါမှမဟုတ် Run ဖို့အတွက် Platform တစ်ခုဖြစ်ပါတယ်။
Container ထဲမှာ Run တယ်ဆိုတော့ Container ဆိုတာကရော ဘာလဲ။
Container ဆိုတာက အလွယ်ဆုံးပြောရရင် ကျွန်တော်တို့ရဲ့ application ထဲမှာ ပါတဲ့ Dependencies, Libraries, settings တွေကို သိမ်းထားပေးတဲ့ lightweight portable unit တစ်ခုဖြစ်ပါတယ်။
ထပ်ရှင်းပြရရင် အရင်ကဆို ကျွန်တော်တို့ တည်ဆောက်မဲ့ application အတွက် လိုအပ်တဲ့ Dependencies တွေ Libraries တွေ စတဲ့ Environment Setups တွေကို ကျွန်တော်တို့ Device ထဲမှာ ပြုလုပ်ခဲ့တဲ့ အစား Container တစ်ခုထဲမှာ setup ပြုလုပ်ပေးလိုက်တာပဲ ဖြစ်ပါတယ်။
ဒီနည်းအားဖြင့် ကျွန်တော်တို့ application အတွက် လိုအပ်တဲ့ setup တစ်ခုလုံးကို container တစ်ခုထဲမှာ သိမ်းဆည်းပြီး တကယ်လို့ ဒီ application ကို တစ်ခြားသူရဲ့ စက်ထဲမှာ ပြောင်းလဲပြီး တည်ဆောက်ချင်တယ်ဆိုရင်လဲ Container လေးကို အသုံးပြုပြီး တည်ဆောက်ရုံပဲ ဖြစ်ပါတယ်။
အနှစ်ချုပ်ရမယ်ဆို Container တွေကို အသုံးပြုပြီး application တွေကို ဘယ် system ဘယ် device မှာမဆို တူညီတဲ့ environment setup နဲ့ တည်ဆောက်နိုင်မှာ ဖြစ်ပါတယ်။ ဒီနည်းအားဖြင့် ကို့ Device မှာ အလုပ်လုပ်ပြီး တစ်ခြား Device တွေမှာ အလုပ်မလုပ်တဲ့ ပြဿနာတွေကို ဖြေရှင်းနိုင်မှာ ဖြစ်ပါတယ်။ Container တွေက တစ်ခုထက်ပိုပြီး တည်ဆောက်နိုင်ပါတယ်။ ဒီလောက်ဆိုရင်တော့ အကြမ်းဖျင်းမြင်သွားလောက်ပြီ ထင်ပါတယ်။
Docker ကို သုံးသင့်တဲ့ တခြားအချက်တွေအနေနဲ့ကတော့
Isolation:
container တွေကို တစ်ချိန်ထဲမှာ တစ်ခုထက်ပိုပြီး အသုံးပြုနိုင်ပါတယ်။
Efficiency:
Container တွေကိုပဲ အသုံးပြုပြီး Device တစ်ခုထဲမှာ မတူညီတဲ့ Environment Setup တွေကို ပြုလုပ်နိုင်တာမဟုတ်ပါဘူး။ တခြား Virtual Machine တွေကို အသုံးပြုပြီး တည်ဆောက်နိုင်ပါသေးတယ်။
ဥပမာ အားဖြင့် Dual boost လိုမျိုး device တစ်ခုထဲမှာ Linux နဲ့ Window နှစ်ခုအသုံးပြုမယ်။ Linux မှာ Environment Setups တစ်ခု Window အတွက် Environment Setups တစ်ခုဆိုပြီးလဲ တည်ဆောက်နိုင်ပါသေးတယ်။ နောက်ထပ်လဲ Virtualbox ထဲမှာ လိုအပ်သလောက် Virtual OS တွေ ပွားမယ်။ Environment Setups တွေပြုလုပ်နိုင်ပါသေးတယ်။ ဒါပေမဲ့ ဒါက ကောင်းမွန်တဲ့ ဖြေရှင်းနည်းမဟုတ်ပါဘူး။ အကြောင်းရင်းကတော့ ပထမဆုံး OS တစ်ခုနဲ့ တစ်ခု ချိန်းဖို့ အချိန်ကြာပါတယ်။ OS တစ်ခုချင်းစီအတွက် System ထဲက ယူသုံးတာမို့ များများ Run ရင် System ကို များများအသုံးပြုမှာဖြစ်ပါတယ်။ ဒါကြောင့် Ram 8 laptop လေးတွေ အနေနဲ့ အများကြီးတိုင်ပတ်မှာဖြစ်ပါတယ်။ ဒါပေမဲ့ Container တွေကတော့ OS ရဲ့ Kernel ကို share ပြီးအသုံးပြုတာဖြစ်လို့ အများကြီးပေါ့ပါးပါတယ်။ Start လုပ်ဖို့ကလဲ အများကြီး ပိုမို မြန်ဆန်ပါတယ်။
ဒီနေရာမှာ Kernel ဆိုတာက ဘာလဲဆိုတာမျိုးမေးစရာရှိပါသေးတယ်။
Kernel ဆိုတာက Operating System တစ်ခုရဲ့ core component ဖြစ်ပြီး system resources တွေကို manage ပြုလုပ်ပေးတာဖြစ်ပါတယ်။ device hardware နဲ့ software application တွေရဲ့ memory management, process scheduling, device management စတဲ့ မတူညီတဲ့ process management တွေကို တစ်ခုနဲ့ တစ်ခု မထိခိုက်ဘဲ ချောချောမွေ့မွေ့ အလုပ်လုပ်နိုင်အောင် ကြားခံအနေနဲ့ ပြုလုပ်ပေးတာမျိုးဖြစ်ပါတယ်။ ဒီလောက်ဆိုရင်တော့ Docker နဲ့ပက်သက်ပြီးတော့ရော သူရဲ့ နောက်ကွယ်က နည်းပညာတစ်ချို့ အကြောင်းကော အကြမ်းဖျင်းသိသွားလောက်ပြီထင်ပါတယ်။