အားလုံးဘဲ မင်္ဂလာပါ ခင်ဗျ။ ကျွန်တော်ကတော့ Spiceworks Myanmar မှ System Developer အောင်ညီသစ် ဖြစ်ပါတယ်ခင်ဗျ။ ဒီတစ်ခါ sharing လုပ်ပေးချင်တဲ့ အကြောင်းအရာကတော့ docker ဆိုတဲ့ open source platform လေးပဲ ဖြစ်ပါတယ်။ ဒီနေရာမှာ docker ဟာ ကျယ်ပြန့်တဲ့ နည်းပညာတစ်ခုဖြစ်ပြီး ဘာသာရပ်တစ်ခုအနေနဲ့ လေ့လာမှသာ ပြည့်စုံမှာဖြစ်တဲ့အတွက် ကျွန်တော်ကတော့ စာဖတ်သူတို့ကို မိတ်ဆက်ပေးတဲ့အနေနဲ့ ပြောပြပေးသွားမှာ ဖြစ်ပါတယ်။
ကျွန်တော်တို့က web application တွေ software တွေကို development machine မှာဘဲဖြစ်ဖြစ် production server ပေါ်မှာဘဲဖြစ်ဖြစ် develop လုပ်တော့မယ်ဆိုရင် သင့်တော်တဲ့ development environment တစ်ခု ရှိဖို့လိုအပ်ပါတယ်။ အဲ့ဒီလို environment တစ်ခုရှိမှ ကျွန်တော်တို့ application တွေက ကောင်းကောင်း အလုပ်လုပ်မှာဖြစ်ပါတယ်။ Application တွေကို development လုပ်ပြီးရင်လည်း production level မှာကောင်းကောင်း အလုပ်လုပ်ဖို့အတွက် production environment ကို ပြန်လည်တည်ဆောက်ပေးရပါတယ်။ နောက်ပြီး application တစ်ခုမှာ multiple services တွေ ရှိတယ်ဆိုပါစို့၊ အဲ့ဒီ service တစ်ခုချင်းစီအတွက် မတူညီတဲ့ server dependencies နဲ့ package dependencies တွေကို production server မှာ အလွယ်တကူ deploy လုပ်နိုင်ဖို့အတွက် နှင့် အဲ့လို လိုအပ်တဲ့ dependencies တွေကို local မှာ တစ်ခါ setup လုပ်လိုက် server ပေါ်မှာတစ်ခါ setup လုပ်လိုက်နဲ့ ထပ်ခါထပ်ခါ လုပ်နေမယ့် အစား application လိုအပ်ချက်ပေါ်မူတည်ပြီး ပေးလိုက်တဲ့ configuration အတိုင်း အလိုအလျောက် setup လုပ်သွားနိုင်တဲ့ containerization နည်းပညာတစ်ခု လိုအပ်လာပါတယ်။ Docker ကတော့ အဲ့လို နည်းပညာတွေထဲက popular အဖြစ်ဆုံး နည်းပညာတစ်ခုဖြစ်လာပါတယ်။ ဒီထက်လွယ်ကူအောင်ပြောရရင် Logistic နယ်ပယ်မှာ container ဆိုတာ ကုန်ပစ္စည်းတွေကို တစ်နေရာနဲ့တစ်နေရာ shipping လုပ်ဖို့အတွက်အသုံးပြုကြပါတယ်။ အဲ့လို့ container တွေနဲ့ shipping လုပ်လာတဲ့အတွက် Import/Export လုပ်သူတွေက ပစ္စည်းတွေ အလွယ်တကူ ရွှေ့ပြောင်းလို့ရလာတယ်၊ အချိန်ကုန်သက်သာလာတယ်၊ စနစ်တကျဖြစ်လာတယ် အစရှိတဲ့ အကျိုးကျေးဇူးတွေရရှိလာပါတယ်။ အဲ့လိုသဘောတရားတွေကိုကြည့်ပြီးတော့ Solomon Hykes ဆိုတဲ့သူက သူ့ရဲ့ပြင်သစ်ကုမ္ပဏီဖြစ်တဲ့ dotCloud မှာရှိတဲ့ application ပေါင်းများစွာ deploy လုပ်တဲ့နေရာမှာ သုံးဖို့အတွက် docker ကို တီထွင်ပြီး အစပိုင်းမှာ ကုမ္ပဏီအတွက်ပဲ အသုံးပြုခဲ့ပေမယ့် နောက်ပိုင်း open source အနေနဲ့ မိတ်ဆက်ပေးခဲ့ပါတယ်။
နောက်ထပ်အနေနဲ့ docker ဟာဆိုရင် linux container ပေါ်မှာ အခြေခံထားတာဖြစ်ပါတယ်။ Linux container ဆိုတာက virtualization နည်းပညာတစ်ခုဖြစ်ပါတယ်။ Virtual Machine တွေဟာ Operating System တစ်ခုပေါ်မှာ နောက်ထပ် OS တစ်ခုတင်သုံးတဲ့ သဘောဖြစ်ပါတယ်။ ဥပမာ – Window ပေါ်မှာ Linux တင်သုံးတဲ့ ပုံစံမျိူးပါ။ Docker Container ကတော့ Linux Kernel ပေါ်မှာ အခြား Linux OS တွေထပ်သွင်းပါတယ်။ အဲ့လို ထပ်သွင်းလိုက်တဲ့ OS တွေကို OS Image လို့ ခေါ်ပြီး အဲ့ OS Image တွေကို run ပေးတဲ့နည်းပညာကိုတော့ container လို့ခေါ်ပါတယ်။ အောက်ပါပုံမှာ လေ့လာကြည့်နိုင်ပါတယ်။
Virtual Machine vs Docker container
နောက်ထပ်အနေနဲ့ docker မှာ docker host (docker engine) ရှိပါတယ်။ docker ဟာ command line interface ကို အသုံးပြုပြီး လုပ်ဆောင်နိုင်တာဖြစ်တဲ့အတွက် ပေးတဲ့ command တွေ docker engine က လက်ခံပြီး docker image တွေ create လုပ်တာ၊ container တွေ run လုပ်တာ စသည်တို့ကို လုပ်ဆောင်ပေးပါတယ်။ Docker Image ကတော့ OS တစ်ခုလည်းဖြစ်နိုင်သလို မိမိ application မှာလိုအပ်တဲ့ dependencies တစ်ခုလည်းဖြစ်နိုင်ပါတယ်။ ဥပမာ – web application တစ်ခု run ဖို့အတွက် လိုအပ်တဲ့ web server, php, mysql တို့ကို Image တစ်ခုပြုလုပ်ထားပြီး docker registries ပေါ်မှာ သိမ်းထားလို့ရပါတယ်။ လိုအပ်တဲ့အချိန် အလွယ်တကူ pull လုပ်ပြီး container ပေါ်တင် run လို့ရပါတယ်။ Docker registries (docker hub) ကတော့ ရှင်းရှင်းပြောရရင် github သဘောပါဘဲ docker file တွေကို သိမ်းထားပေးတဲ့ နေရာတစ်ခုဖြစ်ပါတယ်။ Docker Hub ဆိုပြီး browser ကနေဝင်လိုက်ရင် public တင်ပေးထားတဲ့ docker file တွေကို တွေ့ရမှာဖြစ်ပါတယ်။ Docker container ကတော့ application container တစ်ခုဖြစ်ပါတယ်။ ခုနက Docker Image တွေ စုစည်းပေးထားပြီး build, shipping and deploy လုပ်တဲ့နေရာမှာ အလွယ်ကူဆုံးဖြစ်အောင် လုပ်ပေးပါတယ်။
Docker Architecture
ဒီလောက်ဆိုရင် docker အကြောင်းနည်းနည်း သဘောပေါက်လောက်ပြီးလို့ထင်ပါတယ်။ စတင်စမ်းဖို့အတွက် လိုအပ်တဲ့ requirement လေးတွေထပ်ပြောမှာ ဖြစ်ပါတယ်။
Docker ဟာ linux ပေါ်မှာအလုပ်လုပ်တဲ့အတွက် မိမိစက်ဟာ linux OS ဖြစ်ရင်ပိုကောင်းပါတယ်။ တကယ်လို့ window os ဖြစ်တယ်ဆိုရင်လည်း Microsoft ရဲ့ window subsystem for linux ကို install လုပ်ပြီး စမ်းကြည့်လို့ အဆင်ပြေပါတယ်။ Install လုပ်နည်းကို ဒီနေရာမှာ လေ့လာနိုင်ပါတယ်။
နောက်ပြီး docker ကို မိမိ OS ပေါ်မူတည်ပြီး install လုပ်လို့ရပါသေးတယ်။ ဒီနေရာမှာ လေ့လာနိုင်ပါတယ်။ Docker ကို မိမိစက်မှာ install လုပ်ပြီးပြီဆိုရင် docker command ကိုစပြီး အသုံးပြုလို့ရပြီ ဖြစ်ပါတယ်။
Docker command ရမရသိချင်ရင် အောက်က command ဖြင့်သိနိုင်ပါတယ်။ docker version ကို ဖော်ပြပေးမှာဖြစ်ပါတယ်။
Ubuntu OS Image ကို docker hub ကနေ Install လုပ်ချင်ရင် docker pull command ကို အသုံးပြုနိုင်ပါတယ်။
Github or npm လို version အလိုက် Install လုပ်လို့လည်း ရနိုင်ပါသေးတယ်။
မိမိ လိုချင်တဲ့ docker Image စာရင်းကို ဒီနေရာမှာ သွားရောက်ရှာနိုင်ပါတယ်။ Docker command နဲ့ ရှာလို့လည်း ရနိုင်ပါသေးတယ်။
အခုလို့ php install လုပ်ပြီးသား အသင့်အသုံးပြုနိုင်တဲ့ image list တွေကို မြင်ရမှာဖြစ်ပါတယ်။ မိမိစက်ထဲမှာ create လုပ်ပြီးသား images တွေကို ကြည့်ချင်တယ်ဆိုရင်တော့ docker images ကိုအသုံးပြုရမှာဖြစ်ပါတယ်။
ဒီမှာဆိုရင် php_mv ဆိုတဲ့ image တစ်ခုနဲ့ mysql တင်ထားတဲ့ image တစ်ခုကိုတွေ့ရမှာဖြစ်ပါတယ်။ docker container list ကို စစ်ကြည့်ချင်ရင်တော့ docker ps ကို သုံးရမှာဖြစ်ပါတယ်။
ကျွန်တော် ဘာမှမ run ထားတဲ့အတွက် ဘာမှပေါ်လာသေးမှာမဟုတ်ပါဘူး။ ဒီနေရာမှာ ကျွန်တော် docker hub ကနေ image တစ်ခုကို install လုပ်ပြမှာဖြစ်ပါတယ်။ အောက်က command ကို အသုံးပြုမှာဖြစ်ပါတယ်။
ဒီလို result ထွက်လာပါလိုက်မယ်။ docker images ကိုသုံးပြီး Image list ကို စစ်ကြည့်ပါမယ်။
ကျွန်တော် install လုပ်လိုက်တဲ့ “docker/getting-started” ဆိုတဲ့ image လေးထွက်လာပါမယ်။ အဲ့ဒီ image ကို run ကြည့်မယ်ဆိုရင် docker run command ကိုသုံးပြီး run နိုင်ပါတယ်။
ဒီ command မှာဆိုရင် options လေးတွေပါလာပါတယ်။ (-d) ကတော့ detached mode ဖြစ်ပါတယ်။ docker container ကို background မှာ run စေချင်လို့ ထည့်တာဖြစ်ပါတယ်။ နောက်တစ်ခုကတော့ (-p 80:80) ကတော့ publish port 80 မှာ run စေချင်လို့ပါ။ အဲ့ဆို ကျွန်တော်တို့ container list ကို စစ်ကြည့်လို့ရပါပြီ။
ဒီမှာ docker container တစ်ခု run နေတာမြင်ရမှာဖြစ်ပြီး image နေရာမှာတော့ docker/getting-started” ဖြစ်ပါတယ်။ နောက်ပြီး localhost မှာ run ထားတာဖြစ်တဲ့အတွက် browser မှာ ခေါ်ကြည့်ရင် ဒီတိုင်းမြင်နေရမှာဖြစ်ပါတယ်။
ကျွန်တော်တို့ run ထားတဲ့ container ကို ရပ်ချင်ရင်တော့ docker container stop condainer_id ကိုသုံးရပါမယ်။
Container ကို ရပ်လိုက်တဲ့အတွက် docker ps လို့ ခေါ်လိုက်ရင် run ထားတာ မရှိတဲ့အတွက် ဘာမှမမြင်ရပေမယ့် docker ps -a လို့ ခေါ်လိုက်ရင်တော့ ဆောက်ထားတဲ့ container ကတော့ ရှိနေမှာဖြစ်ပါတယ်။ Docker ကို အခုလို image တစ်ခုချင်းစီ setup လုပ်ပြီး အသုံးပြုလို့ရသလို့ docker compose ဆိုတဲ့ နည်းပညာကိုသုံးပြီးတော့ ကိုယ်လိုအပ်တဲ့ dependencies တွေကို Dockerfile နဲ့ YAML တို့ထဲမှာ အစထဲက configuration လုပ်ထားလို့ရပါသေးတယ်။ ဒီနည်းနဲ့ဘဲ နောက်ပိုင်းမှာ server setup automation တွေ လုပ်လာကြတာဖြစ်ပါတယ်။
Docker compose နဲ့ config လုပ်ထားတဲ့ project မှာ အခုလို docker-compose up -d ဆိုပြီး run ပေးလိုက်တာနဲ့ လိုအပ်တဲ့ Image နဲ့ container တွေ auto install လုပ်သွားပါတယ်။ ဒီမှာဆိုရင် container နှစ်ခုထွက်လာပါတယ်။ ပထမ တစ်ခုမှာဆိုရင် php_mvc project ကို php server ပေါ်မှာ run ပေးထားပြီးတော့ နောက် container မှာဆိုရင် mysql:8 ကို run ပေးထားတာဖြစ်ပါတယ်။ ဒီ project ကိုဘဲ docker တင်ထားတဲ့ ဘယ် device မှာမဆို command တစ်ကြောင်းထဲနဲ့ အလွယ်တကူ deploy လုပ်လို့ ရသွားမှာဖြစ်ပါတယ်။
Docker က ကျယ်ပြန့်တဲ့ နည်းပညာဖြစ်တဲ့အတွက် ကျွန်တော့အနေနဲ့ကတော့ မိတ်ဆက်အနေနဲ့ ဒီလောက်နဲ့ရပ်လိုက်မှာဖြစ်ပါတယ်။ စာဖတ်သူတို့ ဆက်ပြီးလေ့လာချင်တယ်ဆိုရင်တော့ အောက်မှာပေးထားတဲ့ link တွေက တစ်ဆင့် ဆက်ပြီးလေ့လာလို့ရနိုင်မှာ ဖြစ်ပါတယ်။ မြန်မာမှာဆိုရင်လည်း docker community အားကောင်းတဲ့အတွက် မြန်မာလို လေ့လာလို့ရတဲ့ နေရာတွေကို ဖော်ပြပေးလိုက်ပါတယ် အားလုံးကိုကျေးဇူးတင်ပါတယ်။
Ref Link:
https://docs.docker.com/engine/reference/run (Docker CLI)
https://devops-myanmar.gitbook.io/docker-quick-start (Docker Myanmar)
https://my.itmatic101.com/linuxbsd/docker-intro-part1 (Docker မိတ်ဆက်)
https://eimaung.com/rockstar-developer (Deployment and scaling)