Docker Basic (part 1)

အခေါ်အ၀ေါ်များ

Docker အသုံးပြုပုံတွေစ မလေ့လာခင် အခေါ်အ၀ေါ်တွေကို အရင်ရင်းနှီးအောင် လုပ်လိုက်ကြရအောင် ( containers တွေဘာလို့သုံးရလဲ။ containers တွေက ဘာပြသနာတွေကိုဖြေရှင်းပေးလဲဆိုတာ ရေးထားတာလေးရှိပါတယ်။ ဒီမှာ ဖတ်လို့ရပါတယ်။ အဲ့တာအရင်ဖတ်ပြီးမှ အခု အပိုင်းကိုဖတ်တာပိုကောင်းပါတယ်)

Docker Engine or Docker daemon or Docker Server

Docker ရဲ့အရေးကြီးဆုံး component ဖြစ်ပါတယ်။ images တွေ container တွေကို manage ပေးပါတယ်။

Docker Client

Docker engine ကို ဆက်သွယ်ပြီး ဘာလုပ်မယ် ဘာလုပ်မယ် instructions တွေပေးတဲ့ component ဖြစ်ပါတယ်။

Docker Desktop

Docker engine ရော၊ Docker clients တွေရော၊ အခြား အသုံး၀င်တဲ့ component တွေပါစုစည်းထားတဲ့ application ဖြစ်ပါတယ်။ Docker clients တွေလို့ပြောရတာက command line interface နဲ့ graphical interface ၂ ခုလုံး docker desktop မှာပါလို့ဖြစ်ပါတယ်။ Docker desktop ကို install လိုက်ရင် Docker အတွက် လိုအပ်တာတွေ install ပြီးသားဖြစ်သွားပြီလို့ ယူဆလို့ရပါတယ်။

Docker Image

ကျနော် တို့ image အကြောင်းမပြောခင် လူတိုင်းသိတဲ့ zip file အကြောင်းနဲ့စလိုက်မယ်။ application တစ်ခု မှာ file တွေရှိမယ်။ အဲ့တာ တွေကို zip ချုပ်လိုက်ရင် .zip ဆိုတဲ့ extension နဲ့ single file လေးထွက်လာမယ်။ yes docker image ဆိုတာလည်းအဲ့လိုပဲ။ application တစ်ခုရဲ့ packaged version လို့ယူဆလို့ရတယ်။ ဒါပေမဲ့ .zip file နဲ့မတူပဲ ပိုကြမ်းသွားတာတွေရှိတယ်။ ဘာတွေလဲဆိုတော့

  1. run လို့ရတယ်။ docker image တွေကို ကျနော်တို့ run လို့ရတယ်။ run လိုက်တဲ့ အခါကျ ရင် container ဆိုတဲ့ အားလုံး ready ဖြစ်ပြီးသား user တွေသုံးလို့ရပြီ ဖြစ်တဲ့ environment လေးထွက်လာမယ်။ အဲ့ဒီအကြောင်းကို container အပိုင်းရောက်ရင် အသေးစိတ်ပြန်ပြောပါမယ်။

  2. application run ဖို့လိုအပ်တဲ့ environment တစ်ခုလုံးသူ့မှာပါတယ်။ ဥပမာ ကျနော်တို့ မှာ nodejs application တစ်ခုရှိတယ်ဆိုပါစို့။ သူ့ကို run ဖို့ဆိုရင် application files တွေဖြစ်တဲ့ js files တွေပါမယ်။ node install ထားရမယ်။ npm install ထားရမယ်။ အဲ့တာကို Docker image တည်ဆောက်လိုက်ရင် application အတွက်လိုအပ်တာ အကုန်လုံးပါသွားမှာဖြစ်တယ်။ အကုန် လုံးလို့ပြောတဲ့အခါမှာ application files တွေရော node, npm install ပြီးသားဖြစ်တဲ့ environment တစ်ခုလုံးရောပါသွားလိမ့်မယ်။

  3. လွယ်လွယ်ကူကူ share လို့ရတယ်။ Docker registry လို့ခေါ်တဲ့ image တွေကို စုထားတဲ့ နေရာတွေရှိတယ်။ အဲ့ဒီ ကနေ သူများ တင်ထားတဲ့ image တွေကို pull လို့ရမယ်။ ကိုယ့် image တွေကို push လို့ရမယ်။

Docker Containers

application တစ်ခုကို တကယ် အလုပ်လုပ် စေတဲ့ component ဖြစ်ပါတယ်။ ကျနော်တို့မှာ browser ကနေ access လုပ်လို့ရတဲ့ nodejs calculator application လေးရှိတယ်ဆိုပါစို့။ အဲ့ဒီ nodejs application အတွက်ဆောက်ထားတဲ့ image ကို run လိုက်မယ်ဆို container လေးတစ်ခုထွက်လာလိမ့်မယ်။ အဲ့ဒီ container ကို start ထားမယ်ဆို ကျနော် တို့ browser ကနေ calculator ကို လှမ်း access လို့ရနေတော့မှာဖြစ်တယ်။ containers တွေက image ကို run လိုက်ရင်ရလာတာဖြစ်တဲ့အတွက် “running instance of an image” လို့မှတ်ထားလို့ရတယ်။ တစ်ခုသိထားရမှာက ကျနော် တို့ image တစ်ခုထဲကနေ containers တွေကိုဆောက်ချင်သလောက်ဆောက်လို့ရတယ်။ ဘာလို့လဲဆိုတော့ သူက image ကိုတစ်ခါ run လိုက်တိုင်း container တစ်ခုထွက်လာမှာ မို့လို့ပါ။

Dockerfile

ကျနော်တို့ docker image တွေကို ရနိုင်တဲ့နည်း က ၂နည်း ရှိတယ်။ သူများဆောက်ပြီးသား image ကို download လုပ်တာရယ်၊ ကိုယ်တိုင် image တည်ဆောက်တာရယ်။ ကျနော်တို့ docker image ကိုကိုယ်တိုင် တည်ဆောက်မယ်ဆို Dockerfile ဆိုတဲ့ text file လေးတစ်ခုရေးရတယ်။ သူ့မှာ ဘာ extension မှမပါဘူး(.txt ဆိုတဲ့ extension လည်းမပါ)။ ဒါကြောင့် Dockerfile ဆိုတာ Docker image ရဲ့ defination လို့မှတ်ယူလိုက်လို့ရတယ်။ သူ့မှာ image တည်ဆောက်ဖို့လိုအပ်တဲ့ instruction တွေအကုန်ရေးရမှာ ဖြစ်တယ်။ သူ့ကို ရေးပုံရေးနည်း syntax ရှိပါတယ်။ (စိတ်မပူပါနဲ့ ရေးရတာ အရမ်းလွယ်ပါတယ်။ heavy မဖြစ်ပါ)။

Docker Registries

ကျနော်တို့ mysql container တစ်ခုဆောက်ချင်တယ်ဆိုပါတော့။ ကျနော်တို့ ကိုယ်တိုင် mysql application code တွေရယ် သူအတွက်လိုအပ်တဲ့ env တွေရယ် ကို Dockerfile ရေးပြီး image ဆောက်နေစရာမလိုဘူး။ တခြားလူတွေဆောက်ပြီးသားတွေရှိတယ်။ အဲ့တာတွေကို ယူသုံးလိုက်ရုံပဲ။ အဲ့တာကိုဘယ်က ယူရမလဲဆိုတော့ Docker registries လို့ခေါ်တဲ့ docker image တွေသီးသန့် သိမ်းထားတဲ့ storage system တွေကနေလှမ်းယူလို့ရတယ်။ ကျနော်တို့ create ထားတဲ့ image တွေကိုလည်း လှမ်း push ပေးလို့ရတယ်။ ဒါကြောင့် docker registry ဆိုတာ docker image တွေသီးသန့်အတွက် ပြုလုပ်ထားတဲ့ storage system တွေလို့ယူဆလို့ရတယ်။

Docker Hub

လူသုံးအများဆုံး Docker ရဲ့အဓိက registry ဖြစ်တယ်။ Docker Destop ရဲ့ default registry ကလည်း docker hub ဖြစ်တယ်။ ကျနော်တို့ docker pull nginx လို့ရိုက်လိုက်တယ်ဆိုပါစို့ (docker pull ဆိုတာက image ကို downlaod လုပ်တဲ့ command ဖြစ်ပါတယ်။ usage က docker pull imagename ပါ)။ docker desktop က docker hub registry ကနေ nginx ဆိုတဲ့ image ကိုသွားရှာပြီး download ဆွဲတော့မှာဖြစ်ပါတယ်။