Introduction to Docker

Docker ဆိုသည်မှာ open source containerization platformဖြစ်သည်။
applications များကို containers များအတွင်းထည့်သွင်းပေးပြီး create, deploy, run စသည့် Development နဲ့ Operation process တွေကို၊ ပိုမိုလွယ်ကူစွာ ပြုလုပ်နိုင်ရန်အတွက် Design ပြုလုပ်ထားသော tool တစ်ခုဖြစ်သည်။ Go Programing Language ဖြင့်ရေးသားထားသည်။

Docker Objects

Docker ဖြင့် application တစ်ခုဖြစ်ပေါ်လာရန်အမျိုးမျိုးသော Docker objects ကို အသုံးပြုသည်။ အဓိကကျသော Docker Objects တစ်ချို့တွေကတော့ -

Container

Docker Containerization နည်းပညာသည် application များကို သီးခြားစီ isolate လုပ်ပေးနိုင်‌သော Container များကိုပြုလုပ်ပေးသည့် နည်းပညာတစ်ခုဖြစ်သည်။

ထိုကဲ့သို့ containerization လုပ်ခြင်းအားဖြင့် HostOS တစ်ခုပေါ်တွင် အခြားသော applications များကိုပါ တစ်ပြိုင်နက်တည်း run နိုင်စေသည်။

Container များကို Docker နည်းပညာကိုမသုံးဘဲလည်း တည်ဆောက်နိုင်သည်။ သို့သော်လည်း Docker Platform ကိုသုံးခြင်းအားဖြင့် ပိုမိုလွယ်ကူရိုးရှင်းပြီး၊ ပို၍လုံခြုံမှုရှိသော container များကို အချိန်တိုအတွင်း build, deployed, manage လုပ်နိုင်မည်ဖြစ်သည်။

Container နည်းပညာတွင် cgroup (control group)ကဲ့သို့ process များ ကို hierarchical groups အတွင်း manage စီမံပေးကာ resourcesများကို ရယူ သတ်မှတ်ပေးနိုင်ခြင်း၊ monitoring လုပ်ပေးနိုင်ခြင်းနဲ့ namespace အတွင်း process များ access ပြုလုပ်ခြင်းတို့အတွက် သီးခြားခွဲထားခြင်း (isolate) နဲ့ တခြား resource များနဲ့ systemအကြား visibilityရှိခြင်းကဲ့သို့ သဘောတရားများပါ၀င်သည်။

ထို့အပြင် systemd-nspawnသည်လည်း command သို့ os များကို runပေးနိုင်သော namespace light weight container နည်းပညာဖြစ်သည်။ Systemd-nspawn သည် chrootထက် အဆင့်ပိုမြင့်လာပြီး၊ fully virtualized လုပ်လာနိုင်သည်။ Chrootသည် command များနဲ့ interactive shell များကို run ပေးနိုင်သည့် special root directory ဖြစ်သည်။

Linux နည်းပညာ၏ LXC (Linux kernel containment)သည် container နည်းပညာများအတွက် အခြေခံအုတ်မြစ်တစ်ခုဖြစ်သည်။ Docker အပြင် rkt (rock-it), containerd, etc… ကဲ့သို့ အခြားသော container နည်းပညာများလည်းရှိသည်။

ထို့အပြင် Docker Container သည် application တစ်ခုအတွက် လိုအပ်သော libraries နဲ့ dependencies များကိုပါ၊ container ထဲတွင် package တစ်ခုအဖြစ်တစ်ခါတည်း ထည့်သွင်းထားနိုင်သည်။

Docker vs Virtual Machine

Docker container နည်းပညာသည် Virtual Machine နဲ့ သဘောတရားခြင်း ဆင်တူသော်လည်း၊ ကွဲပြားသည်။

Virtual Machine အတွက် Hypervisor သည် Host ၏ Hardware resources များကို VM တစ်ခုစီအတွက် Virtual layer များကို ဖန်တီးကာ၊ သီးခြားပိုင်းခြားပေးထားသည့် Hardware Virtualization နည်းပညာဖြစ်သည်။ ထို့ကြောင့် VM များသည် Host OS ၏ Kernel နဲ့ Library တို့အပေါ် မှာ မမှီခိုဘဲ၊ ကိုယ်ပိုင် Kernel, Library တို့ဖြင့်တည်ရှိသော OS များဖြစ်ကြသည်။

Container သည် OS Virtualization နည်းပညာဖြစ်သည်။ Container များသည် Host OS အပေါ် တွင် သီးသန့် isolate ဖြစ်သော environment, process, service, network, volume များအဖြစ် run သည်။ Host OS ၏ kernel ကို Docker container interface သည်တိုက်ရိုက် အသုံးပြုသောကြောင့်၊ ကြားခံ simulating virtual hardware layer များမလိုတော့ပေ။ ထို့‌ကြောင့် container နည်းပညာသည် VM ထက် ပိုမို မြန်ဆန်ပြီး ပေါ့ပါးသော နည်းပညာတစ်ခုဖြစ်သည်။

Docker Image

Docker container တွင် Images များသည် read-only layer များအဖြစ်သိုလှောင်ထားသည့် snapshot Layers များဖြစ်သည်။ ၄င်း layers များသည် Application တစ်ခု ကောင်းမွန်စွာ Run စေနိုင်ရန် လိုအပ်သော OS, libraries, Environment Variables, Mount point နှင့် အခြားသော layer များကို file တစ်ခုတွင်ပေါင်းထည့်ထားသည်။ Image တစ်ခုဖြင့် container များစွာကိုပြုလုပ်နိုင်သည်။

Countainer ကို Run လိုက်သောအခါ Docker သည် Docker Image ၏ Layer များကိုဖတ်ပြီး၊ ၄င်းတို့၏အပါ်တွင် R/W layer တစ်ခုထပ်ထည့်ပေးသည်။ Container အတွင်း ပြောင်းလဲမှုများသည်၊ ၄င်း R/W ‌layer တွင်သာဖြစ်ပေါ်သည်။ Container ကိုဖျက်လျှင်၊ အဆိုပါ R/W layer သည်လည်း ပျက်သွားသည်။ Image ထဲတွင် အခြားလိုအပ်သော layer ထပ်ထည့်ခြင်းများကို Dockerfile ဖြင့်ပြုလုပ်နိုင်သည်။

Docker Image များကို Docker hub ကဲ့သို့သော Repository များတွင် share လုပ်နိုင်သည်။ ထို Repository များမှလည်း လိုအပ်သော Docker Image များကို ရယူနိုင်သည်။

Dockerfile

မိမိ လိုအပ်သော Docker Image အတွက် instructions များကို layer အလိုက် Dockerfile တွင်ရေးကာ Docker Image ကို Build လုပ်နိုင်သည်။ Dockerfile တွင်ရေးထားသည့် contents များသည် Single Container တစ်လုံးအဖြစ် Run နိုင်သည်။

Docker Compose

Docker Compose သည် multiple containers များကို run ရန်အတွက်သုံးသည့် Tools တစ်ခုဖြစ်သည်။ Configuration ကို YAML file ဖြင့်ရေးရသည်။

Docker Networking

Docker Default Network နှင့် User Define Network နှစ်မျိုးသတ်မှတ်နိုင်သည်။

Docker Default Network တွင် Default Network Models သုံးမျိုးပါ၀င်သည်။

bridge — Default network driver ဖြစ်သည်။

none — container network ကို disable ပြုလုပ်ရာတွင်သုံးသည်။

host — Docker နဲ့ Host ကြားတွင် Network isolation မရှိတော့၊ Host network ကို container network အဖြစ်တိုက်ရိုက်အသုံးပြုသည်။

User-Defined Network သုံးမျိုးကတော့

Bridge Network — Default bridge network နဲ့တူသည်၊ user define network တွင် container များအချင်းချင်း port-forward မလုပ်ဘဲ၊ ချိတ်ဆက်နိုင်သည်။

Overlay Network — မတူညီသော Host များပေါ်ရှိ Containers များကို peer-to-peer ချိတ်ဆက်လိုသောအခါတွင်သုံးသည်။ Docker Engine ၏ cluster လုပ်ငန်းစဥ်များအတွက် Swarm mode ကို အသုံးပြုရသည်။

Macvlan Network — container ကို MAC address များသတ်မှတ် သည့်အခါသုံးသည်။

Docker Volume

Data များကို container ၏ R/W layer တွင် သိမ်းထားနိုင်သော်လည်း Persistent မဖြစ်ပေ။ Data များကို persistent သိမ်းထားနိုင်ရန်သုံးသည်။

Docker Engine

Docker Engine သည် client-Server ကဲ့သို့ အလုပ်လုပ်သော နည်းပညာဖြစ်သည်။

Docker Daemon သည် Docker Images, Containers, Networks, နဲ့ Storage Volumes စသောDaemon process လုပ်ငန်းစဥ် များကို ထိန်းချုပ်မောင်းနှင်ပေးထားသော Docker Engine (dockerd) ဖြစ်သည်။ Docker Daemon သည် Docker API request များကိုလည်း လက်ခံ/ဆောင်ရွက်သည်။

REST API ကိုသုံးပြီး application များသည် Docker Daemon ကိုချိတ်ဆက်ရာတွင်သုံးသည်။

Docker CLI သည် Docker Daemon ကိုချိတ်ဆက်ရာတွင်သုံးသော command-line interface client ဖြစ်သည်။

Docker Architecture

Docker Client

Docker client သည် users များကို Docker နဲ့ အပြန်အလှန်ချိတ်ဆက်ပေးသည်။ Docker CLI နဲ့ Docker Daemon ကြားတွင် API ကဆက်သွယ်ဆောင်ရွက်ပေးသည်။

Docker client သည် Docker Daemon နဲ့ Host တစ်ခုထဲတွင်ရှိနိုင်ပြီး၊ Remote Host ပေါ် ရှိ Docker Daemon ကိုလည်းကောင်း ချိတ်ဆက်နိုင်သည်။ Docker client သည် Docker Daemon တစ်ခုမက ချိတ်ဆက်နိုင်သည်။

Docker Client interface CLI ဖြင့် ရိုက်ထည့်လိုက်သော build, run, stop စသော commands များကို Docker Daemon သည် ၄င်း commands နဲ့သက်ဆိုင်ရာ လုပ်ငန်းတာ၀န်ကို ‌ဆက်လက်ဆောင်ရွက်ပေးသည်။

Docker Host

Docker Host သည် application များ အတွက် လိုအပ်သော Environment ကို ထောက်ပံ့ပေးသည်။ Docker Host တွင် Docker Daemon, Images, Containers, Networks, and Storage တို့ပါ၀င်သည်။

Docker Registry

Docker Registry သည် Docker Image များကို Store လုပ်ရန်နှင့် Download ရယူနိုင်သည်။ Docker Registry ကို Public နှင့် Private အဖြစ်သုံးနိုင်သည်။ Public Registry ဖြစ်သော Docker Hubတွင် Docker Image များကိုရယူနိုင်သည်။

Docker Swarm

Docker Swarm သည် Orchestration management tool တစ်ခုဖြစ်သည်။ Docker swarm သည် Docker Node များကို Clustering, scaling, scheduling လုပ်ရန် နှင့် deploying များကိုပြုလုပ်နိုင်သည်။

နိဂုံးချုပ်

နောက်ဆုံးအထိဖတ်ပေးတဲ့အတွက် ကျေးဇူးတင်ပါတယ်။ အ‌ကြောင်းအရာအများစုကို တိုက်ရိုက်ဘာသာပြန်ထားသော်လည်း၊တချို့ကိုသင့်တော်သလိုပြန်ရေးထားပါသည်။ အကျိုးအမြတ်အတွက်မဟုတ်ဘဲ ‌ပညာရေးအတွက်အထောက်အကူဖြစ်စေရန်သာရည်ရွယ်ပါသည်။

Docker ကိုခုမှစတင်လေ့လာသူများအတွက် အထောက်အကူပြုမယ်လို့ယုံကြည်ပါတယ်။ နောက်ထပ် docker.com မှ Documents များဖတ်ခြင်း၊ Tutorials များကို လုပ်ခြင်းဖြင့်၊ အသိပညာနဲ့ကျွမ်းကျင်မှုများတိုးတက်ပြီး၊ မိမိရည်မှန်းထားသော အောင်မြင်မှုများကို ရနိုင်ကြပါစေ။

Online Sources:

Docker — Docker.com

--

--

suum (RHCE| CC-ISC2| NSE3| AZ-900)

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