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 တင္ထားျပီးလည္း စိတ္ၾကိဳက္အခ်ိန္မွ ျပန္ဆြဲခ်မယ္ဆုိလည္း ရပါတယ္။


 
41 Kudos
Don't
move!
1 Comment

Leave a Reply

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