Docker

Docker ကို သိတာကတော့ ကြာပြီ။ သုံးဖြစ်လိုက်။ မသုံးဖြစ်လိုက်နဲ့ ၊ သေသေချာချာ မသုံးဖြစ်မိဘူး။ အခုလတ်တလော လုပ်နေသည့် project တစ်ခုက python 2.7 နဲ့ ရေးရမယ်။ C++ code တွေ compile လုပ်ရမှာတွေ ရှိတော့ linux ကို မဖြစ်မနေ သုံးပြီး ရေးမှရမယ့် သဘောဖြစ်လာတယ်။ လက်ရှိ mac မှာ setup လုပ်ရင် ရပေမယ့် မလိုအပ်တာတွေ အများကြီး သွင်းရမှာစိုးလို့ docker ကို မဖြစ်မနေ သုံးဖြစ်တယ်။ Virtual Machine နဲ့မရဘူးလား ဆိုတော့ ရပေမယ့် hard disk space က နေရာ အများကြီးပေးရတယ်။ Machine တစ်ခု အတွက် သီးသန့် နေရာတွေ အများကြီးပေးနေရတယ်လို့ခံစားမိတယ်။ နောက်ပြီးတော့ Ubuntu သွင်းပြီးရင် ssh setup တွေ ပြန်လုပ်နေရတာနဲ့ docker ကိုပဲ သုံးမယ်လို့ ဆုံးဖြတ်တာလည်း ပါတယ်။ docker က setup တစ်ခါလုပ်ပြီးရင် image ပြောင်းထား။ နောက်ထပ် project တစ်ခုကို အဲဒီ image ပဲ ပြန်သုံးလို့ရတယ်။ 64 GB လောက်ပဲ disk space လိုမယ်။ နောက်ပြီးတော့ VM တွေထက် အများကြီး ပေါ့ပါးတယ်လို့ ခံစားရတယ်။

Installing Docker

Docker ကို install သွင်းဖို့ အတွက် https://www.docker.com/community-edition#/download မှာ download ချနိုင်ပါတယ်။

Docker က Linux, Mac, Windows စတာတွေအတွက် အကုန် ရပါတယ်။

Setup

Install သွင်းပြီးသွားရင် docker preference ကို တချက်စစ်ကြည့်ပါ။

File Sharing

Docker ထဲကို ဘယ်အောက်က folder တွေ mount လုပ်ခွင့်ရှိသလဲ ဆိုတာ အတွက်ပါ။ ပုံမှန် default setup ကတော့ အဆင်ပြေပါတယ်။

Disk Image

Docker အတွက် disk image ပါ။ ပုံမှန် default ကတော့ 64 GB ရှိပါတယ်။

Advanced

Advanced မှာတော့ memory ဘယ်လောက်သုံးမယ် CPU ဘယ်လောက်သုံးမယ် ဆိုပြီး သတ်မှတ်ဖို့ပါ။

Kitematic

Docker ကို command line က မသုံးပဲ UI နဲ့ သုံးမယ်ဆိုရင်တော့ Kitematic ကို သွင်းဖို့လိုပါတယ်။

Windows, Mac, Linux အတွက် Download မှာ ရယူနိုင်ပါတယ်။

Running docker

Docker ကို docker file ဖန်တီးပြီး run လို့ရသလို manual pull ဆွဲပြီးလည်း အသုံးပြုနိုင်ပါတယ်။

ကျွန်တော်ကတော့ manual ပဲ ဆွဲပြီး အသုံးပြုပါတယ်။

docker pull ubuntu

ubuntu image ကို pull ဆွဲချလိုက်တာပါ။ ubuntu မဟုတ်ပဲ အခြား OS တွေ image တွေလည်း docker store မှာ ရှာပြီး ဆွဲချလို့ရပါတယ်။

docker run --restart=always -dit -v /Users/username/shared:~/path_on_docker -p 9091:80 -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 ubuntu 
--restart=always

က docker ပြန် run နဲ့ တာာနဲ့ restart ချဖို့အတွက်ပါ။

-d | Run container in background and print container ID
-i | Keep STDIN open even if not attached
-t | Allocate a pseudo-TTY
-v [host file path]:[docker file path]

လက်ရှိ စက်က ဘယ် folder ကို docker ရဲ့ ဘယ်နေရာမှာ mount လုပ်မလဲဆိုပြီး ရွေးချယ်ပေးတာပါ။

-p [localhost port]:[docker host]

ဒါကတော့ လက်ရှိ host ရဲ့ port ကို docker က ဘယ် port နဲ့ ချိတ်မလဲ ဆိုတာ အတွက်ပါ။

ဥပမာ apache ကို docker မှာ သွင်းထားတယ်။ port က 80။ စက်ကနေ port 9091 မှာ ခေါ်ချင်ရင်တော့

-p 9091:80

ဒါဆိုရင် http://localhost:9091 ဆိုတာနဲ့ docker container က port 80 ကို သွားခေါ်ပါလိမ့်မယ်။ docker ထဲမှာ ရှိသည့် apache ကနေ တဆင့် website တွေ မြင်ရပါလိမ့်မယ်။

နောက်ဆုံးက ubuntu ကတော့ image ပါ။

Using Shell

ဒါဆိုရင် docker run သွားပါပြီ။

docker ps

အဲဒီ အခါမှာ container ID ကို တွေ့ရပါလိမ့်မယ်။ shell ထဲကို ဝင်ဖို့ အတွက်

docker exec -it ec10cf97d713 /bin/bash

ec10cf97d713 ဆိုတာကတော့ container ID ပါ။ ဒါဆိုရင်တော့ bash shell ထဲ ရောက်သွားပါပြီ။ apache2 သွင်းတာ။ php သွင်းတာ စတာတွေ လုပ်ပြီးတော့ http://localhost:9091 ဆိုပြီး ခေါ်နိုင်ပါတယ်။ ဒါဆိုရင် သွင်းထားသည့် apache တက်လာပါလိမ့်မယ်။ အကယ်၍ localhost မှာ တိုက်ရိုက် file တွေ ထည့်ချင်ရင် -v က ပတ်လမ်းကြောင်းကို ပြင်ဖို့လိုပါတယ်။

-v /Users/username/shared:/var/www/html
docker ps -a

ဆိုရင် container အကုန် တွေ့ပါတယ်။

docker rm [container ID]

ဆိုရင်တော့ ကိုယ်ဖျက်ချင်သည့် container ကို ဖျက်ဖို့ပါ။

docker images

ဆိုရင်တော့ ကိုယ့်မှာ ရှိသည့် docker image အကုန်တွေ့နိုင်ပါတယ်။

docker rmi [image name]

ဆိုရင်တော့ ကိုယ်ဖျက်ချင်သည့် image အတွက်ပါ။

docker rename [CONTAINER_NAME] [NEW_NAME]

container က auto generate လုပ်သည့် name ကို မကြိုက်လို့ မိမိ စိတ်ကြိုက် ပြန်ပြင်ချင်ရင် rename လုပ်နိုင်ပါတယ်။ container ID အစား container name က မှတ်ရတာ လွယ်တယ်။ project အလိုက် နာမည်ပေးထားလို့ ရတော့ နောက်ပိုင်း container ID အစား container name ကို ပြောင်းသုံးကြည့်စေချင်တယ်။

Create Docker Image

ကျွန်တော်တို့ ubuntu image ကို စိတ်ကြိုက်ပြင်ပြီးသွားရင်တော့ image အနေနဲ့ ဖန်တီးနိုင်ပါတယ်။

docker commit ec10cf97d713 ubuntuapache

ဒါဆိုရင် နောက်တစ်ခါ app အတွက် php,mysql,apache တို့ကို ထပ်ပြီး သွင်းဖို့မလိုပဲ ubuntuapache ဆိုသည့် image ကို ပြောင်းသုံးလိုက်ရုံပါပဲ။

image တွေကို export , import လုပ်လို့ရသည့်အတွက် server အတွက်လည်း အဆင်ပြေပါတယ်။ ဒါမှမဟုတ် image ကို docker store ပေါ်မှာ public တင်ထားပြီးလည်း စိတ်ကြိုက်အချိန်မှ ပြန်ဆွဲချမယ်ဆိုလည်း ရပါတယ်။

3 Comments

  1. ခုလိုရေးပေးတာ ကျေးဇူးအများကြီးတင်ပါတယ် ကိုစေတန်ရေ

  2. Zawlay says:

    Thanks.

  3. Ye Naung says:

    How microservices communicate and discover each other in docker swarm orchestration?

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.