လွယ်လွယ်ပြောရရင် Docker ဆိုတာ app တစ်ခုလုံးကို သူ့ပတ်ဝန်းကျင်နဲ့အတူ ထုပ်ပိုးပေးတဲ့ ကိရိယာပါ။

Developer တွေ ခဏခဏ ပြောတဲ့ စကားတစ်ခွန်း ရှိတယ် — “ကျွန်တော့် စက်မှာတော့ run တယ်” (“It works on my machine”)။ အဓိပ္ပာယ်က သူ့ laptop မှာ code က အကောင်းဆုံး run တယ်။ ဒါပေမဲ့ တခြားသူစက်၊ ဒါမှမဟုတ် server ပေါ် တင်လိုက်တော့ ပျက်တယ်။ ဘာလို့လဲ။ သူ့စက်မှာ install လုပ်ထားတဲ့ library version တွေ၊ setting တွေ၊ OS ကွာခြားချက်တွေကြောင့်ပဲ။ ဒီပြဿနာကို ဖြေရှင်းဖို့ ပေါ်လာတာက Docker ပဲ။

ဥပမာနဲ့ ရှင်းမယ်။ သူငယ်ချင်းကို မုန့်ဟင်းခါး ချက်နည်းပေးချင်တယ်ဆိုပါစို့။ နည်းလမ်းနှစ်မျိုး ရှိတယ်။

ပထမနည်း — ချက်နည်းစာရွက် ပေးလိုက်တယ်။ သူငယ်ချင်းက သူ့အိမ်မှာ သူ့အိုးသူ့ဒယ်နဲ့ ချက်တယ်။ ဒါပေမဲ့ သူ့ငါးက မင်းငါးနဲ့ မတူဘူး၊ သူ့မီးဖိုက မင်းမီးဖိုနဲ့ မတူဘူး — အရသာ ကွာသွားတယ်။ ဒါက ရိုးရိုး code ပေးလိုက်တာနဲ့ တူတယ်။ ပတ်ဝန်းကျင် ကွာရင် ရလဒ် ကွာတယ်။

ဒုတိယနည်း — ချက်ပြီးသား မုန့်ဟင်းခါးတစ်အိုးလုံးကို အဖုံးအုပ်ပြီး ပို့လိုက်တယ်။ သူငယ်ချင်း လုပ်စရာက အဖုံးဖွင့်ပြီး စားရုံပဲ။ ဘယ်အိမ်မှာ ဖွင့်ဖွင့် အရသာ အတူတူပဲ။

Docker container လည်း ဒီအတိုင်းပါပဲ။ Container ဆိုတာ app + လိုအပ်တဲ့ library တွေ + setting တွေ အကုန် တစ်ထုပ်တည်း ထုပ်ထားတာ။ ဘယ် server ပေါ် တင်တင် အတူတူ run တယ်။

“Container ဆိုတာ virtual machine (VM) နဲ့ တူတူပဲလား” — မေးတတ်တယ်။ ဆင်တယ်၊ ဒါပေမဲ့ မတူဘူး။ VM ဆိုတာ ကွန်ပျူတာအတုတစ်လုံး အပြည့်အဝ ဖန်တီးတာ — OS အပါအဝင်။ အိမ်တစ်လုံး ဆောက်သလိုပဲ — အခန်းတွေ၊ မီးဖို၊ ရေပိုက် အကုန် သီးသန့်။ လေးတယ်၊ စဖို့ အချိန်ကြာတယ်။ Container ကျ OS ကို အတူတူ သုံးတယ် — app အတွက် လိုအပ်တဲ့ အပိုင်းလေးပဲ ခွဲထားတာ။ တိုက်ခန်းတစ်ခန်းလိုပဲ — အဆောက်အအုံ (OS) က အတူတူ၊ အခန်းထဲက ပစ္စည်းတွေပဲ ကိုယ့်ဟာကိုယ်။ ပေါ့တယ်၊ စက္ကန့်ပိုင်းနဲ့ စတယ်။ ဒါကြောင့် server တစ်လုံးပေါ်မှာ VM ၅ လုံး run ရင် ဝန်လေးပေမဲ့ container အခု ၅၀ run ရင်တောင် ပေါ့ပေါ့ပါးပါးပဲ။

နာမည်နှစ်ခု ရောတတ်တယ် — image နဲ့ container။ Image = ချက်နည်းစာရွက် + ပါဝင်ပစ္စည်းစာရင်း။ တည်ဆောက်ပုံ အသေချာမှတ်ထားတာ။ Container = အဲဒီ image ကနေ ချက်လိုက်တဲ့ မုန့်ဟင်းခါးအိုး အရှင် — run နေတဲ့ အရာ။ Image တစ်ခုကနေ container အများကြီး ပွားလို့ရတယ်။ Image ကို Docker Hub ဆိုတဲ့ အများသုံး စာကြည့်တိုက်မှာ တင်ထားလို့ရတယ် — တစ်ကမ္ဘာလုံးက ဆွဲယူသုံးလို့ရတယ်။

တကယ့်ဥပမာနဲ့ ပြောရရင် — “ကျွန်တော် WordPress site တစ်ခု လိုချင်တယ်” ဆိုရင် Docker Hub က WordPress image ကို ဆွဲ၊ command တစ်ကြောင်း run လိုက် — ပြီးပြီ။ MySQL database တောင် တစ်ခါတည်း ပါလာတယ်။ အရင်တုန်းက နာရီချီ install လုပ်ရတဲ့ အလုပ်က အခု မိနစ်ပိုင်းပဲ။

လက်တွေ့မှာ ဘယ်သူတွေ သုံးနေလဲ။

  • Developer တွေ — “ကျွန်တော့်စက်မှာ run တယ်” ပြဿနာ ပျောက်တယ်။ Team တစ်ခုလုံး အတူတူ ပတ်ဝန်းကျင်နဲ့ code ရေးလို့ရတယ်။
  • ကုမ္ပဏီကြီးတွေ — Netflix, Spotify, PayPal တို့လို ကုမ္ပဏီတွေ server ထောင်ချီမှာ container သောင်းချီ run တယ်။
  • Cloud — AWS, Google Cloud ပေါ်မှာ app တင်တဲ့အခါ Docker က စံဖြစ်နေပြီ။

စမ်းကြည့်ချင်ရင် Docker ကို ကိုယ့်ကွန်ပျူတာမှာ free install လုပ်လို့ရတယ်။ ပြီးရင် ဒီ command တစ်ကြောင်း run ကြည့် — docker run -p 8080:80 nginx။ ဒါက web server တစ်ခု (nginx) ကို container အဖြစ် run ခိုင်းတာ။ ပြီးရင် browser မှာ localhost:8080 ဖွင့်ကြည့် — “Welcome to nginx!” ဆိုတဲ့ စာမျက်နှာ ပေါ်လာလိမ့်မယ်။ Install ဆိုတာ ဘာမှ မလုပ်ခဲ့ရဘူး — Docker က image ဆွဲပြီး run ပေးလိုက်တာပဲ။

Developer ဖြစ်ချင်ရင် Docker ကို မသိမဖြစ် သိရမယ့် ကိရိယာတွေထဲက တစ်ခု။ ဒီနေ့ကစပြီး စမ်းကြည့်လိုက်ပါ။ 🙂