├── .gitbook └── assets │ ├── 01-docker-intro.md │ ├── 02-docker-features.md │ ├── 03-docker-installation.md │ ├── 05-docker-container.md │ ├── 06-docker-images.md │ ├── 08-dockerfile.md │ ├── 10-docker-manage-ports.md │ ├── 11-docker-networking.md │ ├── 12-docker-networking-example.md │ ├── 1_docker_build.png │ ├── 1_ls.png │ ├── 2_run_ti_centos.png │ ├── 2_search-large-resolution.png │ ├── 2_search-normal-resolution.png │ ├── 3_pull_wordpress.png │ ├── 3c_apacheimage_build.png │ ├── 4_rmi.png │ ├── 4a_ps-large-resolution.png │ ├── docker_file_and_docker_port.png │ ├── screenshot-129.png │ └── screenshot-132.png ├── 01-docker-intro.md ├── 02-docker-features.md ├── 03-docker-install.md ├── 04-docker-container.md ├── 05-docker-images.md ├── 06-dockerfile.md ├── 07-docker-directives.md ├── 08-docker-port.md ├── 09-docker-network.md ├── 10-docker-network-example.md ├── 11-docker-compose.md ├── 12-docker-compose-example.md ├── 13-docker-machine.md ├── 14-docker-prune.md ├── 15-sponsor.md ├── Docker_Quick_Start.pdf ├── README.md ├── SUMMARY.md └── latex ├── .gitlab-ci.yml ├── Docker_Quick_Start.pdf ├── MyanmarKhyay.ttf ├── PB.ttf ├── PR.ttf ├── body-md.md ├── body-md.tex ├── body-tex.tex ├── body.md ├── body.tex ├── book-cover.tex ├── docker.png ├── footer.tex ├── main.log ├── main.tex └── script /.gitbook/assets/01-docker-intro.md: -------------------------------------------------------------------------------- 1 | # Docker မိတ်ဆက် 2 | 3 | Docker ဆိုတာ softeware container platform တစ်ခုပဲ ဖြစ်ပါတယ်။ Docker ဟာဆိုရင် application ​တွေ run ဖို့၊ develop ဖို့၊ ship ဖို့ လုပ်ထားတဲ့ open source platform တစ်ခုဖြစ်ပါတယ်။Docker က သင့်ရဲ့ application တစ်ခုဆီတိုင်း အတွက် သီးသန့် တည်ရှိတဲ့ environment တစ်ခုကို ဖန်တီး​ပေးမှာဖြစ်ပါတယ်။ 4 | 5 | ## Docker Engine 6 | 7 | Docker Engine ဟာဆိုရင် Docker ရဲ့ core ဖြစ်ပြီး Docker containers ​တွေကို create ပြုလုပ်​ခြင်း၊ shipping လုပ် ခြင်း၊ run ခြင်း စတာ ​တွေကို လုပ်​ဆောင်​ပေးပါတယ်။ Docker Engine ​တွေက Client- Server architecture အရ 8 | 9 | * Server daemon process တစ်ခုဟာစဥ်ဆက်မပျက် run ခြင်း 10 | * ကျန်ရှိ​သော API ဟာ daemon ​တွေကို ချိတ်ဆက်ပြီး instruction ​တွေ ကို daemon ​တွေဆီ ​ပေးပို့ခြင်း 11 | * Command Line Interface (CLI) အဖြစ်​ဆောင်ရွက်ခြင်း စတ​တွေကို လုပ်​ဆောင်​ပေးပါတယ်။ 12 | 13 | ------------------------------------------- 14 | -------------------------------------------------------------------------------- /.gitbook/assets/02-docker-features.md: -------------------------------------------------------------------------------- 1 | # Features of Docker 2 | ## Docker container 3 | 4 | Docker container တစ်ခုဟာ application တစ်ခု packaging လုပ်ဖို့၊ running လုပ်ဖို့ သီးသန့် environment တစ်ခု အဖြစ်​ရှိ​တာ ဖြစ်ပါတယ်။ပိုမွန်​မြန်ဆန်​ကောင်းမွန်တဲ့ computing ကိုရနိုင်ဖို့ Docker မှာ application တစ်ခုကို side by side ယှဥ်လျက် run နိုင်မှာ ဖြစ်ပါတယ်။ ပြီး​တော့ Single Host တစ်ခုမှာပဲ တစ်ခုထက်ပိုတဲ့ containers ​တွေကို run နိုင်ပါ​သေးတယ်။ အဲ့ containers ​တွေကိုပဲ run ထားတဲ့ host က္​နေ တစ်ခြား host တစ်ခုဆီကို ​ပြောင်း​​ရွှေ့ နိုင်ဦးမှာဖြစ်ပါတယ်။ 5 | 6 | -------------------------------------------------------------------------------- /.gitbook/assets/03-docker-installation.md: -------------------------------------------------------------------------------- 1 | # Docker installation on Ubuntu 2 | 3 | **Docker ကို ubuntu OS မှာ install ပြုလုပ်ဖို့ အောက်ပါ command တွေကို တခုချင်း terminal တွင်ရိုက်ထည့်ပါ။** 4 | 5 | - ပထမဆုံး လက်ရှိ package များကို update ပြုလုပ်ပါမယ်။ 6 | 7 | ``` 8 | $ sudo apt-get update 9 | ``` 10 | 11 | - ထို့နောက် လိုအပ်တဲ့ package များကို သွင်းပါမယ်။ 12 | ``` 13 | $ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 14 | ``` 15 | - ထို့နောက် Docker repository ကို add လုပ်ပါမယ်။ 16 | ``` 17 | $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 18 | ``` 19 | ``` 20 | $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 21 | ``` 22 | - နောက်ဆုံးအဆင့်အနေနဲ့ update ပြုလုပ်ပြီး docker ကို သွင်းနိုင်ပါပြီ။ 23 | ``` 24 | $ sudo apt-get update 25 | ``` 26 | ``` 27 | $ sudo apt-get install docker-ce docker-ce-cli containerd.io 28 | ``` 29 | - Docker service run နေကြောင်းကို သိရှိနိုင်ရန် ယခုကဲ့သို ရိုက်ထည့်ပါ။ 30 | ``` 31 | $ sudo systemctl status docker 32 | ``` 33 | 34 | 35 | `Active: active` ဖြစ်နေပါက docker service run နေကြောင်း သိရှိနိုင်ပါတယ်။ 36 | 37 | Docker daemon service နှင့်အတူ docker cli ကိုပါ တပါးတည်း ထည့်သွင်းထားတဲ့ အတွက် docker cli ကိုလဲ အသုံးပြုနိုင်မှာဖြစ်ပါတယ်။Docker command များ ကို ယခုလို ကြည့်ရှူနိုင်ပါတယ်။ 38 | ``` 39 | $ docker 40 | ``` 41 | ``` 42 | Output: 43 | 44 | 45 | Management Commands: 46 | builder Manage builds 47 | config Manage Docker configs 48 | container Manage containers 49 | context Manage contexts 50 | engine Manage the docker engine 51 | image Manage images 52 | network Manage networks 53 | node Manage Swarm nodes 54 | plugin Manage plugins 55 | secret Manage Docker secrets 56 | service Manage services 57 | stack Manage Docker stacks 58 | swarm Manage Swarm 59 | system Manage Docker 60 | trust Manage trust on Docker images 61 | volume Manage volumes 62 | 63 | Commands: 64 | 65 | attach Attach local standard input, output, and error streams to a running container 66 | build Build an image from a Dockerfile 67 | commit Create a new image from a container's changes 68 | cp Copy files/folders between a container and the local filesystem 69 | create Create a new container 70 | diff Inspect changes to files or directories on a container's filesystem 71 | events Get real time events from the server 72 | exec Run a command in a running container 73 | export Export a container's filesystem as a tar archive 74 | history Show the history of an image 75 | images List images 76 | import Import the contents from a tarball to create a filesystem image 77 | info Display system-wide information 78 | inspect Return low-level information on Docker objects 79 | kill Kill one or more running containers 80 | load Load an image from a tar archive or STDIN 81 | login Log in to a Docker registry 82 | logout Log out from a Docker registry 83 | logs Fetch the logs of a container 84 | pause Pause all processes within one or more containers 85 | port List port mappings or a specific mapping for the container 86 | ps List containers 87 | pull Pull an image or a repository from a registry 88 | push Push an image or a repository to a registry 89 | rename Rename a container 90 | restart Restart one or more containers 91 | rm Remove one or more containers 92 | rmi Remove one or more images 93 | run Run a command in a new container 94 | save Save one or more images to a tar archive (streamed to STDOUT by default) 95 | search Search the Docker Hub for images 96 | start Start one or more stopped containers 97 | stats Display a live stream of container(s) resource usage statistics 98 | stop Stop one or more running containers 99 | tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE 100 | top Display the running processes of a container 101 | unpause Unpause all processes within one or more containers 102 | update Update configuration of one or more containers 103 | version Show the Docker version information 104 | wait Block until one or more containers stop, then print their exit codes 105 | ``` 106 | --- 107 | 108 | ဒါပေမယ့် docker ကို ထည့်သွင်းလိုက်ချိန်မှာ root user အနေနဲ့သာ docker နဲ့ သတ်ဆိုင်တဲ့ command တွေကို ရိုက်သွင်းနိုင်မှာဖြစ်ပါတယ်။ မိမိက docker နဲ့ command တခုခုကို run မယ်ဆိုရင် sudo command နဲ့သာ အသုံးပြုနိုင်မှာ ဖြစ်ပါတယ်။ 109 | ဥပမာ.. 110 | ``` 111 | $ sudo docker image ls 112 | ``` 113 | Docker ကို ထည့်သွင်း ချိန် docker ဆိုတဲ့ linux user group တခုကို docker က create လုပ်သွားမှာဖြစ်ပါတယ်။ တကယ်လို့ မိမိက sudo ကို အမြဲ မထည့်ပေးစေချင်ဘူးဆိုရင် docker group ထဲကို လက်ရှိ user ကို add ပေးလိုက်ခြင်းဖြစ် sudo command ကို အမြဲရိုက်ထည့်ပေးစရာမလိုပဲ အသုံးပြုနိုင်ပါတယ်။ 114 | ``` 115 | $ sudo usermod -aG docker ${USER} 116 | ``` 117 | ထို့နောက် docker service ကို restart ချပါ။ 118 | ``` 119 | $ sudo systemctl restart docker 120 | ``` 121 | Docker service active ဖြစ်လာပါက docker ကို စတင် အသုံးပြုနိုင်မှာဖြစ်ပါတယ်။ 122 | 123 | --- 124 | 125 | -------------------------------------------------------------------------------- /.gitbook/assets/05-docker-container.md: -------------------------------------------------------------------------------- 1 | # Docker Container 2 | 3 | Docker container ဆိုတာ docker image တစ်ခုကို run လိုက်တဲ့အခါမှာ တည်ဆောက်လိုက်တဲ့ instance လေးတစ်ခုပဲ ဖြစ်ပါတယ်။ Container တစ်လုံးဟာ application တွေကို အလုပ်လုပ်စေဖို့အတွက်လိုအပ်တဲ့ libraries တွေနဲ့ setting တွေကိုသာ ပေါင်းစပ်ဖွဲ့စည်းထားတာ ဖြစ်ပါတယ်။ အဲ့ဒါဟာ Application တစ်ခုအတွက် အရမ်းကိုပေ့ါးပါးပြီး အလွယ်တစ်ကူရွှေ့ပြောင်းလို့ရ လောက်အောင် သေးငယ်တဲ့ environment တစ်ခုပဲ ဖြစ်ပါတယ်။ 4 | 5 | ## Run Docker Container 6 | 7 | System ပေါ်မှာ Docker Container တစ်လုံးကို စတင်မောင်းနှင်ရန်အတွက် docker run command ကို အသုံးပြုပါတယ်။ ဥပမာအားဖြင့် - အောက်ပါ command ကိုရိုက်လျှင် hello-world image ကိုအသုံးပြု၍ docker container တစ်လုံးကို တည်ဆောက်ပါလိမ့်မယ်။ 8 | ``` 9 | $ docker run hello-world 10 | ``` 11 | အခု .. CentOS operating system ကို အသုံးပြုပြီးတေ့ာ အလုပ်လုပ်နေမယ့် docker container တစ်လုံးကို တည်ဆောက်ပါမယ်။ -it ဆိုတဲ့ option က pseudo-TTY အသုံးပြုလို့ရတဲ့ interactive session တစ်ခုကို ပေးပါတယ်။ အဲ့ဒီကနေ container shell ကို ချက်ချင်းသုံးလို့ရပါလိမ့်မယ်။ 12 | ``` 13 | $ docker run -it centos 14 | ``` 15 | 16 | ![](https://lh5.googleusercontent.com/w3zCpCpXI0XwXUEOqgGpwxTuviBiViOgrnb8k-RfcbnJVZR_SJRsmehhsFOWQBQralbho3euxGiCzvJ1kX0Lbg24IsoFGifUuiyHPn6ZDDFsqeQB8j_czCEDi4luPbsaTevRz7M) 17 | 18 | ကျွန်တော်တို့ customized လုပ်ထားတဲ့ ssh access enabled လုပ်ထားတဲ့ Ubuntu docker image ကိုလည်း [docker hub repository](https://hub.docker.com/r/tecadmin/ubuntu-ssh/) မှာ စမ်းကြည့်လို့ရပါတယ်။ 19 | ``` 20 | $ sudo docker run -d -p 2222:22 tecadmin/ubuntu-ssh:16.04 21 | ``` 22 | 23 | ## List Docker Containers 24 | 25 | လက်ရှိ System ပေါ်မှာ အလုပ်လုပ်နေတဲ့ containers တွေအားလုံးကို list ထုတ်ကြည့်ချင်ရင် docker ps command ကိုသုံးပါတယ်။ အဲဒီ command က ရပ်ထားတဲ့ container တွေကိုတော့ list ထုတ်ပြမှာ မဟုတ်ပါဘူး။ အဲ့ဒါက Container ID, Container နာမည် နဲ့ container နဲ့ပတ်သက်တဲ့ အခြားအသုံးဝင်တဲ့ information တွေကိုပါ ပြပေးမှာဖြစ်ပါတယ်။ 26 | ``` 27 | $ docker ps 28 | ``` 29 | အပေါ်က command မှာ -a ဆိုတဲ့ option ကိုပါ ထည့်သုံးမယ်ဆိုရင်တော့ ရပ်ထားတဲ့ container တွေကိုပါ list ထုတ်ပြပေးမှာဖြစ်ပါတယ်။ 30 | ``` 31 | $ docker ps -a 32 | ``` 33 | ## ![](https://lh5.googleusercontent.com/-9Ml2Bau6CsIIzIYj4-YKTG5QpHaW6qVec9k0Wc8JMqFe2qcsXcswczPsm4PySkySiKxYT7T_USa8RxH2u9n64KnlODb2tiddwaLHzA_uIb6EtExbPMJx2ZKq4Jxgy9NsGxR-VE) 34 | ## Find all Details of Container 35 | 36 | Docker container တစ်လုံးနဲ့ပတ်သက်တဲ့ အသေးစိတ်အချက်အလက်အားလုံးကို ရှာချင်တဲ့အခါမှာတော့ docker inspect command ကို အသုံးပြုပါတယ်။ Container ရဲ့ အသေးစိတ်အချက်အလက်တွေကို သိချင်တယ်ဆိုရင်တော့ ကိုယ်သိချင်တဲ့ container ရဲ့ container ID သို့မဟုတ် container နာမည်ကို တိတိကျကျထည့်ပေးရမှာဖြစ်ပါတယ်။ 37 | ``` 38 | $ docker inspect cc5d74cf8250 39 | ``` 40 | ## Delete Docker Container 41 | 42 | System ထဲမှာရှိနေတဲ့ docker container ကို ဖျက်ချင်တယ်ဆိုရင်တော့ docker rm command ကို အသုံးပြုပါတယ်။ Container ကိုဖျက်ချင်တယ်ဆိုရင်တော့ ကိုယ်ဖျက်ချင်တဲ့ container ရဲ့ container ID သို့မဟုတ် container နာမည်ကို တိတိကျကျထည့်ပေးရမှာဖြစ်ပါတယ်။ 43 | ``` 44 | $ docker stop cc5d74cf8250 45 | $ docker rm cc5d74cf8250 46 | ``` 47 | -------------------------------------------------------------------------------- /.gitbook/assets/06-docker-images.md: -------------------------------------------------------------------------------- 1 | # Docker Images 2 | 3 | Docker image ဆိုတာကတော့ container တစ်ခုမှာ လိုချင်တဲ့ application တွေ ကိုအသုံးပြုလို့ရအောင်ပြုလုပ်ထားတဲ့ file တစ်ခုပါပဲ။ Docker image တွေဟာ ပြုလုပ်ပြီးတဲ့အချိန်ကစပြီး ဖျက်လိုက်တဲ့အချိန်အထိ အပြောင်းအလဲမရှိနိုင်ပါဘူး။ ထပ်ပြီးပြင်ဆင်လို့လည်းမရနိုင်ပါဘူး။ ပြီးတော့ image တွေဟာ တစ်ခြားသူတွေနဲ့လည်း မျှဝေအသုံးပြုနိုင်ပါသေးတယ်။ ဆိုလိုတာကတော့ တစ်ယောက်ပြုလုပ်ထားတဲ့ image ကိုသုံးပြီး နောက်တစ်ယောက်က ထပ်တူကျတဲ့ container တစ်ခုကို အသုံးပြုနိုင်တာမျိုးပါ။ 4 | 5 | အောက်မှာတော့ docker images တွေကိုအသုံးပြုဖို့အတွက် အခြေခံကျတဲ့ command တွေကို အကျဥ်းဖော်ပြပေးထားပါတယ်။ 6 | 7 | 8 | ## List Docker Images 9 | docker images ဆိုတဲ့ command နဲ့ ကိုယ့်စနစ်ထဲက အသုံးပြုလို့ရတဲ့ image တွေကိုစစ်ကြည့်လို့ရနိုင်ပါတယ်။ 10 | 11 | ``` 12 | $ docker images 13 | ``` 14 | 15 | [img -1](https://drive.google.com/open?id=1_wLyiUahOQzsRfswSeS1iB8RDq4DvfbT) 16 | 17 | 18 | 19 | ## Search Docker Images 20 | docker search ဆိုတဲ့ command ကတော့ [docker hub](https://hub.docker.com/) ကနေ လိုချင်တဲ့ image ကိုရှာတဲ့အခါသုံးပါတယ်။ ဥပမာ WordPress အတွက် images တွေကိုရှာမယ်ဆိုရင် - 21 | 22 | ``` 23 | $ docker search wordpress 24 | ``` 25 | 26 | [img - 2](https://drive.google.com/open?id=1gxug_Ldf9vhxAtiZK8wsFwURXyPo_YAK) 27 | 28 | ## Download Docker Images 29 | လိုချင်တဲ့ image ကိုရှာတွေ့ပြီဆိုရင်တော့ docker pull ဆိုတဲ့ command နဲ့ ကိုယ့်စက်ထဲကို download ဆွဲနိုင်ပါတယ်။ ဥပမာ Docker hub ကနေ WordPress အတွက်နောက်ဆုံးversion ဖြစ်တဲ့image ကို download ချမယ်ဆိုရင် 30 | 31 | ``` 32 | $ docker pull wordpress 33 | ``` 34 | 35 | [img - 3](https://drive.google.com/open?id=1JVqvPZtdrocB5UTqwysOcuU9hSrxfrwQ) 36 | 37 | 38 | ## Delete Docker Images 39 | မလိုအပ်တော့တဲ့ image တွေကို ဖျက်ပစ်ဖို့အတွက်ကတော့ docker rmi ဆိုတဲ့ command ကိုသုံးပါတယ်။ 40 | ဥပမာ - 41 | 42 | ``` 43 | $ docker rmi wordpress 44 | ``` 45 | -------------------------------------------------------------------------------- /.gitbook/assets/08-dockerfile.md: -------------------------------------------------------------------------------- 1 | # Working with Dockerfile 2 | 3 | Dockerfile ဆိုတာ နာမည်​အတိုင်းပဲ file တစ်​ခုပါပဲ။ 4 | သူ့ဆီမှာ တိကျတဲ့ instructions ​တွေပါမယ်​ အဲ့ instructions ​တွေနဲ့ ကိုယ်​လိုချင်​တဲ့ customized images ​တွေကို​ build လုပ်​ပါတယ်​ 5 | Default အ​နေနဲ့​တော့ နာမည်​ကို Dockerfile လို့ တ​ဝေမသိမ်း​ပေးရပါမယ်​။ 6 | 7 | 8 | ## Build Image with Dockerfile 9 | ``` 10 | $ docker build -t image_name . 11 | ``` 12 | ဒါက​တော့ ​ရေးပြီးသား dockerfile နဲ့ image build လုပ်​တဲ့ command ပါ။ 13 | `-t `ဆိုတာ tag name ကိုကိုယ်​စားပြုပါတယ်​ သူ့အ​နောက်​မှာ image name လိုက်​ပါတယ်​ 14 | ​သေချာကြည်​့ပါ command အဆုံးမှာ `( . )` ပါပါတယ်​ သူက current working directory မှာ ရှိတဲ့ Dockerfile ကိုယူပြီးသုံးမယ်​လို့ ဆိုလိုတာပါ 15 | အကယ်​၍ ခင်​​ဗျားမှာသာ Dockerfile တစ်​ခုမက ရှိ​နေရင်​ သို့မဟုတ်​ Dockerfile မှာ နာမည်​အစ D ကသာ small letter (d) ဖြစ်​​နေခဲ့မယ်​ဆိုရင်​ error တက်​နိုင်​ပါတယ်​ 16 | ``` 17 | $ docker build -t image_name -f /path/to/Dockerfile 18 | ``` 19 | ဒီ command ကလဲ image build တဲ့ command ပါပဲ။ 20 | ထူးခြားတာက​တော့ `-f` flag ကိုသုံးထားတာပါ။ 21 | Current working directory ထဲကမဟုတ်​ပဲ ခင်​​ဗျားရဲ့ file system ထဲက တစ်​​နေရာရာမှာ ရှိတဲ့ Dockerfile ကို ​ခေါ်သုံးချင်​ရင်​ ဒီလို သုံးရပါမယ်​။ 22 | 23 | 24 | ## Create a Dockerfile 25 | 26 | ဒီ​နေရာမှာ အစမ်​း​အ​နေနဲ့ Github ​ပေါ်က sample project ကိုယူသုံးပါ့မယ်​ 27 | ``` 28 | $ git clone https://github.com/tecrahul/dockerfile 29 | $ cd dockerfile 30 | $ docker build -t apacheimage . 31 | ``` 32 | အ​ပေါ်က command သုံး​ကြောင်းပြီးရင်​ image တစ်​ခု​ဆောက်​ပြီးပါပြီ 33 | ​ဆောက်​ပြီးသား images ​တွေကို docker images ဆိုတဲ့ command နဲ့​ခေါ်ကြည့်နိုင်​ပါတယ်​။ 34 | 35 | ## Launch Container with Image 36 | ``` 37 | $ docker run -it -p 8080:80 apacheimage 38 | ``` 39 | ဒီcommand နဲ့ ​ဆောက်​ပြီးသား image ကိုသုံးပြီး container တစ်​ခုတည်​​ဆောက်​ပါတယ်​။ 40 | `i `က interactive နဲ့ `t `က tty ကို ကိုယ်​စားပြုပါတယ်​။ 41 | `-p `ဆိုတာက​တော့ port သတ်​မှတ်​​ပေးတာပါ၊ ဒီ ဥပမာမှာဆို ကိုယ့် host system ရဲ့ port 8080 နဲ့ container ရဲ့ port 80ကို ချိတ်​​ပေးဖို့ သုံးထားတာကို ​တွေ့ရမှာပါ။ 42 | အ​ရှေ့က ကိုယ်​့ host systemရဲ့ port ကြားမှာ full coulmn `( : )` နဲ့ အ​နောက်​က container ရဲ့ port ကို​ရေးရမှာပါ။ 43 | 44 | --- 45 | -------------------------------------------------------------------------------- /.gitbook/assets/10-docker-manage-ports.md: -------------------------------------------------------------------------------- 1 |  2 | # Manage Ports in Docker 3 | 4 | Docker containers တွေထဲမှာဆိုရင် servicesတွေက သီးခြား port တစ်ခုစီပေါ်မှာ run လေ့ရှိပါတယ်။ port တစ်ခုပေါ်မှာ run နေတယ် containerရဲ့ services ‌တွေကို အသုံးပြုချင်တယ်ဆိုရင် container ရဲ့ port ကို Docker host ရဲ့ port တစ်တစ်ခုခုနဲ့ bindပေးရပါတယ်။ 5 | 6 | ## ဥပမာ ၁ 7 | အောက်‌ကပုံကိုကြည့်ပါ။ Docker host ထဲမှာ container နှစ်လုံး run နေတာကို တွေ့ရပါလိမ့်မယ်။ ပထမတစ်ခုကတော့ website တွေ runနေတဲ့ Apache container ဖြစ်ပြီးတော့ ဒုတိယတစ်ခုကတော့ MySQL container ဖြစ်ပါတယ်။ 8 | ![enter image description here](https://tecadmin.net/tutorial/wp-content/uploads/2017/09/Docker-port-binding.png) 9 | 10 | 11 | အခုကျွန်တော်တို့ port 80 Apache container ပေါမှာ run နေတယ် website ကိုဝင်ရောက်ကြည့်ရှုဖို့လိုအပ်နေပါတယ်။ အဲတော့ ကျွန်တောတို့ Apache container port 80 ကို Docker host port 8080 နဲ့ bind လိုက်ကြရအောင်။ Docker host port 80 နဲ့လဲ bind လို့ရပါတယ်။ 12 | 13 | ဒုတိယ container port 3306 ပေါ်မှာ MySQL run နေပါတယ်။ Host machine ကနဲ့ MySQL ကို အခြားနည်းလမ်းတွေနဲ့ access လုပ်လို့ရပါတယ်။ ဒါပေမယ့်ဒီသင်ခန်းစာအတွက် MySQL container port 3306 ကို docker host port 6603 နဲ့ကျွန်တော် bindလိုက်ပါတယ်။ အခုကျွန်တော်တို့ Host machine ရဲ့ port 6603 ကိုသုံးပြီး MySQL container ကိုတိုက်ရိုက်ဆက်သွယ်နိုင်ပါတယ်။ 14 | 15 | အောက်က command ကတော့ host system port နဲ့ container port ကို bind ပေးမယ် command ဖြစ်ပါတယ်။ 16 | ```bash 17 | $ docker run -it -p 8080:80 apache_image 18 | $ docker run -it -p 6603:3066 mysql_image 19 | ``` 20 | 21 | ## ဥပမာ ၂ 22 | ဒီဥပမာမှာတော့ GitHub ပေါ်မှာရှိတယ် ကျွန်တော်တို့ရဲ နမူနာ project ကိုသုံးရမှာဖြစ်ပါတယ်။ အောက်က command ကိုသုံးပြီးတော့ repository ကို clone လိုက်ပါ။ 23 | 24 | ```bash 25 | $ git clone https://github.com/tecrahul/dockerfile 26 | $ cd dockerfile 27 | ``` 28 | အခု apacheimage ဆိုတဲ့အမည်နဲ့ docker image ကို build လိုက်ပါ။ 29 | 30 | ```bash 31 | $ docker build -t apacheimage . 32 | ``` 33 | 34 | အခု Docker run command ကိုသုံးပြီး‌တော့ containerကို runလိုက်ပါ။ container port 80 ပေါ်မှာ Apache service run သွားပါလိမ့်မယ်။ host system port 8080 ကို container port 80 နှင့် bind ဖြစ်ဖို့ `-p 8080: 80` ကိုသတ်မှတ်ရပါမယ်။ 35 | ```bash 36 | $ docker run -it -p 8080:80 apacheimage 37 | ``` 38 | အခု Web browser ထဲမှာ host machine ip နဲ့ port 8080 သုံးပြီး access လုပ်မယ်ဆိုလိုရှိရင် အောက်မှာပြထားတယ်ပုံအတိုင်း container ရဲ့ Apache service ပေါ်မှာ run နေတယ် web page တစ်မျက်မှာပေါ်လာပါလိမ့်မယ်။ ကျွန်တော့်ရဲ host machine ip ကတော့ 192.168.1.237 ဖြစ်ပါတယ်။ 39 | 40 | ![enter image description here](https://tecadmin.net/tutorial/wp-content/uploads/2017/08/access-apache-of-instance.png) 41 | 42 | ## ဥပမာများ 43 | 44 | ကျွန်တော်တို့ container တစ်ခုတည်းနဲ့ port များစွာကို bind နိုင်ပါတယ်။ ဒါပေမဲ့ image build မလုပ်ခင် port အားလုံးကို dockerfile ထဲမှာ `EXPOSE` လုပ်ထားရပါမယ်။ 45 | ```bash 46 | $ docker run -it -p 8080:80,8081:443 image_name 47 | ``` 48 | 49 | တစ်ကယ်လို့ host machine ရဲ့ interface တစ်ခုခုနဲ့ bind ချင်တယ်ဆိုလို့ရှိရင် အောက်ကအတိုင်း IP သက်မှတ်ပေးလိုက်လို့ရပါတယ်။ အောက်က ဉပမာအရ port 8080 နဲ့ 8081 ကို 127.0.0.1 IP နဲ့သာ access လုပ်လို့ရပါတယ်။ 50 | 51 | ```bash 52 | $ docker run -it -p 127.0.0.1:8080:80,127.0.0.1:8081:443 image_name 53 | $ docker run -it -p 192.168.1.111:8080:80,92.168.1.111:8081:443 image_name 54 | ``` 55 | --- 56 | -------------------------------------------------------------------------------- /.gitbook/assets/11-docker-networking.md: -------------------------------------------------------------------------------- 1 | # Docker Networking 2 | 3 | Docker မှာ Network တွေကို docker containers နှင့် ဆက်သွယ်ဖို့အတွက် create နဲ့ manage လုပ်ဆောင်ချက်တွေ ကို ထောက်ပံ့ပေးထားပါတယ်။ **docker network command** ကို အသုံးပြုပြီးတော့ Docker network ကို manage လုပ်လို့ရပါတယ်။ 4 | 5 | 6 | **Syntax:** 7 | 8 | ``` 9 | $ docker network [options] 10 | ``` 11 | အောက်ပါ Tutorial ကို လေ့လာပြီး Docker network ကို create , list နဲ့ manage စတဲ့ features တွေကို လုပ်ဆောင်လို့ရပါတယ်။ 12 | 13 | 14 | ## Docker Networks များ ကို List လုပ်ခြင်း။ 15 | 16 | 17 | 18 | `ls` option ကို အသုံးပြုပြီး docker host ပေါ်မှာ ရှိတဲ့ docker network တွေ ကို List လုပ်လို့ရပါတယ်။ 19 | 20 | ``` 21 | $ docker network ls 22 | ``` 23 | 24 | 25 | 26 | 27 | ## Docker Network တခု Create လုပ်ခြင်း။ 28 | 29 | 30 | 31 | Network အမျိုးအစား အမျိုးမျိုးကို Docker မှ ထောက်ပံ့ပေးထားပါတယ်။ သင့်ရဲ့ system ပေါ်မှာ a bridge Network တခုကို အောက်ပါ command အသုံးပြုပြီး create လို့ရပါတယ်။ 32 | 33 | 34 | 35 | **Syntax:** 36 | 37 | ``` 38 | $ docker network create -d [network_type] [network_name] 39 | ``` 40 | 41 | 42 | **Example:** 43 | 44 | 45 | ``` 46 | $ docker network create -d bridge my-bridge-network 47 | ``` 48 | 49 | 50 | 51 | 52 | ## Container ကို Network ချိတ်ခြင်း။ 53 | 54 | 55 | 56 | Container နာမည် (သို့မဟုတ်) Container ID ကို အသုံးပြုပြီး မည်သည့် container ကိုမဆို ရှိပြီးသား docker network နဲ့ ချိတ်ဆက်နိုင်ပါတယ်။ Container တစ်ခုကို Network နဲ့ တစ်ချိန် ချိတ်ဆက်ထားရုံနဲ့ အခြား container များကိုလဲ တူညီတဲ့ Network တခုတည်းပေါ်မှာ ဆက်သွယ်လုပ်ဆောင်လို့ရပါတယ်။ 57 | 58 | **Syntax:** 59 | 60 | `` 61 | $ docker network connect [network_name] [container_name]`` 62 | 63 | **Example:** 64 | 65 | ``` 66 | $ docker network connect my-bridge-network centos 67 | ``` 68 | 69 | 70 | 71 | ## Docker Network နှင့် Container ကို disconnect လုပ်ခြင်း။ 72 | 73 | 74 | 75 | သင့်အနေနဲ့ Network တခုပေါ်ကနေ container ကို disconnect လုပ်ချင်ရင် အောက်ပါ command ကို အသုံးပြုနိုင်ပါတယ်။ 76 | 77 | 78 | 79 | **Syntax:** 80 | 81 | ``` 82 | $ docker network disconnect [network_name] [container_name] 83 | 84 | ``` 85 | **Example:** 86 | 87 | ``` 88 | $ docker network disconnect my-bridge-network centos 89 | ``` 90 | 91 | 92 | ## Docker Network တခုရဲ့ အချက်အလက် ကိုကြည့်ခြင်း။ 93 | 94 | 95 | 96 | Docker Network တခုရဲ့ အသေးစိတ်အချက် ကို ကြည့်ချင်ရင် inspect option ကို အသုံးပြုပြီး ကြည့်လို့ရပါတယ်။ 97 | 98 | 99 | ``` 100 | $ docker network inspect my-bridge-network 101 | ``` 102 | 103 | 104 | 105 | 106 | inspect option ကို အသုံးပြုပြီး Docker Network တခုရဲ့ အသေးစိတ် အချက်အလက်ကိုကြည့်မယ် ဆိုရင် အခုလိုမြင်ရမှာ ဖြစ်ပါတယ်။ 107 | 108 | 109 | 110 | ![](file:///tmp/lu125437ibmwa.tmp/lu125437ibmwh_tmp_f503edd7d72922a4.png) 111 | 112 | ## Docker Network ကို Remove ခြင်း။ 113 | 114 | Docker network တွေကို remove လုပ်မယ်ဆိုရင် rm option ကို အသုံးပြုလို့ပါတယ်။ 115 | 116 | တခုထက်ပိုတဲ့ docker network တွေကို remove လုပ်ချင်ရင် network ID (သို့မဟုတ်) network name တွေကို space ခံပြီး အသုံးပြုပြီး remove လုပ်လို့ရပါတယ်။ 117 | 118 | **Example:** 119 | 120 | ``` 121 | $ docker network rm my-bridge-network network2 network3 122 | ``` 123 | 124 | 125 | သင့်အနေနဲ့ docker ပေါ်က အသုံးမပြုတော့တဲ့ network အားလုံးကို remove လုပ်ချင်ရင် prune option ကို အသုံးပြုပြီး remove လုပ်လို့ရပါတယ်။ 126 | ``` 127 | $ docker network prune 128 | ``` 129 | 130 | 131 | -------------------------------------------------------------------------------- /.gitbook/assets/12-docker-networking-example.md: -------------------------------------------------------------------------------- 1 | # Docker Networking Example 2 | 3 | Docker Network tutorial ဖက်ပြီးပြီးဆိုရင် Example လေး စမ်းလုပ်ကြည့်လို့ရပါတယ်။ 4 | 5 | ကျွန်တော် တို့ ဒီ Tutorial မှာတော့ docker containers နှစ်ခုနဲ့ docker network အသေးစားလေး တခု လုပ်ပြသွားမှာ ဖြစ်ပါတယ်။ 6 | 7 | > MySQL – A relational database server. 8 | 9 | > PHPMyAdmin – A web based interface to manage MySQL server. 10 | 11 | 12 | အခု tutorial မှာတော့ အခြား MySQL server ကို access လုပ်ဖို့အတွက် အခြား container တခုမှာ run ထားတဲ့ PHPMyAdmin ကို အသုံးပြ ပြသသွားမှာ ဖြစ်ပါတယ်။ 13 | 14 | 15 | 16 | 17 | ## Network တခု Create လုပ်ခြင်း။ 18 | 19 | ပထမဦးစွာ အနေဖြင့် docker network အသစ် တခု ကို Create လုပ်ဖြစ်ပါတယ်။ my-bridge-network အမည်ရှိသော network အသစ်ကို အောက်ပါ comment အသုံးပြု ပြီး create လုပ်ပါ။ 20 | 21 | ``` 22 | $ docker network create -d bridge my-bridge-network 23 | ``` 24 | 25 | ## MySQL Container ကို Run ခြင်း။ 26 | 27 | အခု ကျွန်တော် တို့ MySQL docker container အသစ် ကို Run မှာ ဖြစ်ပါတယ်။ 28 | 29 | Default root user password အသစ်ကို သတ်မှတ်ဖို့အတွက် MYSQL_ROOT_PASSWORD variable ကို အောက်မှာပြထားတဲ့အတိုင်း ရိုက်ပါ။ 30 | 31 | ``` 32 | $ docker run --name mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql/mysql-server 33 | ``` 34 | 35 | 36 | Container တခု create ပြီးနောက် စောစော က ကျွန်တော်တို့ create ထားတဲ့ my-bridge-network network နဲ့ ချိတ်ဆက်မှာ ဖြစ်ပါတယ်။ 37 | 38 | ``` 39 | $ docker network connect my-bridge-network mysql 40 | ``` 41 | 42 | နောက် တဆင့် အနေနဲ့ MySQL container ရဲ့ IP address အသစ် ကိုကြည့်မှာဖြစ်ပါတယ်။ 43 | 44 | ``` 45 | $ docker inspect mysql | grep "IPAddress" 46 | ``` 47 | 48 | 49 | 50 | ## PHPMyAdmin Container ကို Run ခြင်း။ 51 | 52 | 53 | 54 | အခု ကျွန်တော်တို့ Docker container အသစ်ဖြစ်တဲ့ phpmyadmin ကို run မှာ ဖြစ်ပါတယ်။ 55 | 56 | MySQL ကို Run ခြင်း နောက်ဆုံးအဆင့်မှာ ရခဲ့တဲ့ MySQL container IP address ကို PMA_HOST value အနေနဲ့ထည့်ပါမယ်။ 57 | ``` 58 | $ docker run --name phpmyadmin -d -e PMA_HOST=172.21.0.2 -p 8080:80 phpmyadmin/phpmyadmin 59 | ``` 60 | 61 | ပြီးနောက် phpmyadmin container ကို my-bridge-network ထဲ add လိုက်ပါ။ 62 | 63 | ``` 64 | $ docker network inspect my-bridge-network 65 | ``` 66 | 67 | ## My-bridge-network Network ရဲ့ အချက်အလက် ကိုကြည့်ခြင်း ။ 68 | 69 | အပေါ်မှာ ပြခဲ့တဲ့ containers နှစ်ခု ကို ကျွန်တော် တို့ my-bridge-network ထဲ ထည့်ပြီးသွား တဲ့ အတွက် လက်ရှိ my-bridge-network ရဲ့ setting ကို ကြည့်လိုက်ရအောင် ။ 70 | 71 | ``` 72 | $ docker network inspect my-bridge-network 73 | ``` 74 | My-bridge-network ရဲ့ setting ကို ကြည့်ရင်တော့ အခုလိုတွေ့ရမှာဖြစ်ပါတယ်။ 75 | 76 | 77 | ![](file:///tmp/lu125437ibmwa.tmp/lu125437ibmwh_tmp_f503edd7d72922a4.png) 78 | 79 | 80 | 81 | ## Allow MySQL to PHPMyAdmin Host 82 | 83 | MySQL default အနေနဲ့ကတော့ remote hosts connect လုပ်တာကို ခွင့်မပြုထားပါဘူး။ 84 | 85 | ဆိုတော့ ကျွန်တော် တို့ က MySQL connection အတွက် phpmyadmin ကို allow 86 | 87 | လုပ်ပေးရမှာ ဖြစ်ပါတယ်။ MySQL container shell access ရဖို့အတွက် အောက်မှာ ပြထားတဲ့ လုပ်ရမှာဖြစ်ပါတယ်။ 88 | ``` 89 | $ docker exec -it mysql bash 90 | ``` 91 | 92 | MySQL server ထဲကို MySQL container create လုပ်တုန်းက ပေးထဲ့ခဲ့တဲ့ Password ကို အသုံးပြုပြီး Login ဝင်လိုက်ပါ။ 93 | 94 | ``` 95 | bash-4.2# mysql -u root -p 96 | ``` 97 | 98 | phpmyadmin host ip address နဲ့ user အသစ် create လုပ်လိုက်ပါ။ ဒီ tutorial ထဲမှာတော့ phpmyadmin host ip address ကတော့ ‘**172.21.0.3**‘ ဖြစ်ပါတယ်။ 99 | 100 | ``` 101 | mysql> GRANT ALL on *.* to 'dbuser'****@****'172.21.0.3' identified by 'secret'; 102 | Query OK, 0 rows affected, 1 warning (0.00 sec) 103 | 104 | mysql> flush privileges; 105 | Query OK, 0 rows affected (0.00 sec) 106 | 107 | mysql> exit 108 | Bye 109 | ``` 110 | 111 | 112 | ## Access MySQL with PHPMyAdmin 113 | 114 | နောက်ဆုံးအနေဖြင့် ကျွန်တော် တို့ ရဲ့ docker host system က port 8080 မှ တဆင့် phpmyadmin web user interface ကို ချိတ်ဆက်လို့ ရသွားပါတယ်။ 115 | 116 | 117 | 118 | ![](file:///tmp/lu125437ibmwa.tmp/lu125437ibmwh_tmp_55e578f0e4dc74a1.png) 119 | 120 | 121 | phpMyAdmin ကို MySQL ရဲ့ အချက်အလက်တွေ သုံးပြီး အပေါ်မှာ ပြထားတဲ့ အတိုင်း Login ဝင်ရန် အသုံးပြုလို့ရပါတယ်။ 122 | 123 | 124 | ![](file:///tmp/lu125437ibmwa.tmp/lu125437ibmwh_tmp_2e5e564f470aece6.png) 125 | 126 | 127 | -------------------------------------------------------------------------------- /.gitbook/assets/1_docker_build.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/.gitbook/assets/1_docker_build.png -------------------------------------------------------------------------------- /.gitbook/assets/1_ls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/.gitbook/assets/1_ls.png -------------------------------------------------------------------------------- /.gitbook/assets/2_run_ti_centos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/.gitbook/assets/2_run_ti_centos.png -------------------------------------------------------------------------------- /.gitbook/assets/2_search-large-resolution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/.gitbook/assets/2_search-large-resolution.png -------------------------------------------------------------------------------- /.gitbook/assets/2_search-normal-resolution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/.gitbook/assets/2_search-normal-resolution.png -------------------------------------------------------------------------------- /.gitbook/assets/3_pull_wordpress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/.gitbook/assets/3_pull_wordpress.png -------------------------------------------------------------------------------- /.gitbook/assets/3c_apacheimage_build.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/.gitbook/assets/3c_apacheimage_build.png -------------------------------------------------------------------------------- /.gitbook/assets/4_rmi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/.gitbook/assets/4_rmi.png -------------------------------------------------------------------------------- /.gitbook/assets/4a_ps-large-resolution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/.gitbook/assets/4a_ps-large-resolution.png -------------------------------------------------------------------------------- /.gitbook/assets/docker_file_and_docker_port.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/.gitbook/assets/docker_file_and_docker_port.png -------------------------------------------------------------------------------- /.gitbook/assets/screenshot-129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/.gitbook/assets/screenshot-129.png -------------------------------------------------------------------------------- /.gitbook/assets/screenshot-132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/.gitbook/assets/screenshot-132.png -------------------------------------------------------------------------------- /01-docker-intro.md: -------------------------------------------------------------------------------- 1 | # Docker Intro 2 | 3 | ## Docker Intro 4 | 5 | Docker ဆိုတာ software container platform တစ်ခုပဲ ဖြစ်ပါတယ်။ Docker ဟာဆိုရင် application ​တွေ run ဖို့၊ develop ဖို့၊ ship ဖို့ လုပ်ထားတဲ့ open source platform တစ်ခုဖြစ်ပါတယ်။Docker က သင့်ရဲ့ application တစ်ခုစီတိုင်း အတွက် သီးသန့် တည်ရှိတဲ့ environment တစ်ခုကို ဖန်တီး​ပေးမှာဖြစ်ပါတယ်။ 6 | 7 | ## Docker Engine 8 | 9 | Docker Engine ဟာဆိုရင် Docker ရဲ့ core ဖြစ်ပြီး Docker containers ​တွေကို create ပြုလုပ်​ခြင်း၊ shipping လုပ် ခြင်း၊ run ခြင်း စတာ ​တွေကို လုပ်​ဆောင်​ပေးပါတယ်။ Docker Engine ​တွေက Client- Server architecture အရ 10 | 11 | * Server daemon process တစ်ခုဟာစဥ်ဆက်မပျက် run ခြင်း 12 | * ကျန်ရှိ​သော API ဟာ daemon ​တွေကို ချိတ်ဆက်ပြီး instruction ​တွေ ကို daemon ​တွေဆီ ​ပေးပို့ခြင်း 13 | * Command Line Interface \(CLI\) အဖြစ်​ဆောင်ရွက်ခြင်း စတာတွေကို လုပ်​ဆောင်​ပေးပါတယ်။ 14 | 15 | ![](.gitbook/assets/screenshot-129.png) 16 | 17 | -------------------------------------------------------------------------------- /02-docker-features.md: -------------------------------------------------------------------------------- 1 | # Docker Features 2 | 3 | ## Features of Docker 4 | 5 | ### Docker container 6 | 7 | Docker container တစ်ခုဟာ application တစ်ခု packaging လုပ်ဖို့၊ running လုပ်ဖို့ သီးသန့် environment တစ်ခု အဖြစ်​ရှိ​တာ ဖြစ်ပါတယ်။ပိုမိုမြန်ဆန်​ကောင်းမွန်တဲ့ computing ကိုရနိုင်ဖို့ Docker မှာ application တစ်ခုကို side by side ယှဥ်လျက် run နိုင်မှာ ဖြစ်ပါတယ်။ ပြီး​တော့ Single Host တစ်ခုမှာပဲ တစ်ခုထက်ပိုတဲ့ containers ​တွေကို run နိုင်ပါ​သေးတယ်။ အဲ့ဒီ containers ​တွေကိုပဲ run ထားတဲ့ host ကနေ တစ်ခြား host တစ်ခုဆီကို ​ပြောင်း​​ရွှေ့ နိုင်ဦးမှာဖြစ်ပါတယ်။ 8 | 9 | -------------------------------------------------------------------------------- /03-docker-install.md: -------------------------------------------------------------------------------- 1 | # Docker Install 2 | 3 | ## Docker installation on Ubuntu 4 | 5 | **Docker ကို ubuntu OS မှာ install ပြုလုပ်ဖို့ အောက်ပါ command တွေကို တခုချင်း terminal တွင်ရိုက်ထည့်ပါ။** 6 | 7 | * ပထမဆုံး လက်ရှိ package များကို update ပြုလုပ်ပါမယ်။ 8 | 9 | ```text 10 | $ sudo apt-get update 11 | ``` 12 | 13 | * ထို့နောက် လိုအပ်တဲ့ package များကို သွင်းပါမယ်။ 14 | 15 | ```text 16 | $ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 17 | ``` 18 | 19 | * ထို့နောက် Docker repository ကို add လုပ်ပါမယ်။ 20 | 21 | ```text 22 | $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 23 | ``` 24 | 25 | ```text 26 | $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 27 | ``` 28 | 29 | * နောက်ဆုံးအဆင့်အနေနဲ့ update ပြုလုပ်ပြီး docker ကို သွင်းနိုင်ပါပြီ။ 30 | 31 | ```text 32 | $ sudo apt-get update 33 | ``` 34 | 35 | ```text 36 | $ sudo apt-get install docker-ce docker-ce-cli containerd.io 37 | ``` 38 | 39 | * Docker service run နေကြောင်းကို သိရှိနိုင်ရန် ယခုကဲ့သို့ ရိုက်ထည့်ပါ။ 40 | 41 | ```text 42 | $ sudo systemctl status docker 43 | ``` 44 | 45 | `Active: active` ဖြစ်နေပါက docker service run နေကြောင်း သိရှိနိုင်ပါတယ်။ 46 | 47 | Docker daemon service နှင့်အတူ docker cli ကိုပါ တပါတည်း ထည့်သွင်းထားတဲ့ အတွက် docker cli ကိုလဲ အသုံးပြုနိုင်မှာဖြစ်ပါတယ်။Docker command များ ကို ယခုလို ကြည့်ရှုနိုင်ပါတယ်။ 48 | 49 | ```text 50 | $ docker 51 | ``` 52 | 53 | ```text 54 | Output: 55 | 56 | 57 | Management Commands: 58 | builder Manage builds 59 | config Manage Docker configs 60 | container Manage containers 61 | context Manage contexts 62 | engine Manage the docker engine 63 | image Manage images 64 | network Manage networks 65 | node Manage Swarm nodes 66 | plugin Manage plugins 67 | secret Manage Docker secrets 68 | service Manage services 69 | stack Manage Docker stacks 70 | swarm Manage Swarm 71 | system Manage Docker 72 | trust Manage trust on Docker images 73 | volume Manage volumes 74 | 75 | Commands: 76 | 77 | attach Attach local standard input, output, and error streams to a running container 78 | build Build an image from a Dockerfile 79 | commit Create a new image from a container's changes 80 | cp Copy files/folders between a container and the local filesystem 81 | create Create a new container 82 | deploy Deploy a new stack or update an existing stack 83 | diff Inspect changes to files or directories on a container's filesystem 84 | events Get real time events from the server 85 | exec Run a command in a running container 86 | export Export a container's filesystem as a tar archive 87 | history Show the history of an image 88 | images List images 89 | import Import the contents from a tarball to create a filesystem image 90 | info Display system-wide information 91 | inspect Return low-level information on Docker objects 92 | kill Kill one or more running containers 93 | load Load an image from a tar archive or STDIN 94 | login Log in to a Docker registry 95 | logout Log out from a Docker registry 96 | logs Fetch the logs of a container 97 | pause Pause all processes within one or more containers 98 | port List port mappings or a specific mapping for the container 99 | ps List containers 100 | pull Pull an image or a repository from a registry 101 | push Push an image or a repository to a registry 102 | rename Rename a container 103 | restart Restart one or more containers 104 | rm Remove one or more containers 105 | rmi Remove one or more images 106 | run Run a command in a new container 107 | save Save one or more images to a tar archive (streamed to STDOUT by default) 108 | search Search the Docker Hub for images 109 | start Start one or more stopped containers 110 | stats Display a live stream of container(s) resource usage statistics 111 | stop Stop one or more running containers 112 | tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE 113 | top Display the running processes of a container 114 | unpause Unpause all processes within one or more containers 115 | update Update configuration of one or more containers 116 | version Show the Docker version information 117 | wait Block until one or more containers stop, then print their exit codes 118 | ``` 119 | 120 | ဒါပေမယ့် docker ကို ထည့်သွင်းလိုက်ချိန်မှာ root user အနေနဲ့သာ docker နဲ့ သက်ဆိုင်တဲ့ command တွေကို ရိုက်သွင်းနိုင်မှာဖြစ်ပါတယ်။ မိမိက docker နဲ့ command တခုခုကို run မယ်ဆိုရင် sudo command နဲ့သာ အသုံးပြုနိုင်မှာ ဖြစ်ပါတယ်။ ဥပမာ.. 121 | 122 | ```text 123 | $ sudo docker image ls 124 | ``` 125 | 126 | Docker ကို ထည့်သွင်း ချိန် docker ဆိုတဲ့ linux user group တခုကို docker က create လုပ်သွားမှာဖြစ်ပါတယ်။ တကယ်လို့ မိမိက sudo ကို အမြဲ မထည့်ပေးစေချင်ဘူးဆိုရင် docker group ထဲကို လက်ရှိ user ကို add ပေးလိုက်ခြင်းဖြင့် sudo command ကို အမြဲရိုက်ထည့်ပေးစရာမလိုပဲ အသုံးပြုနိုင်ပါတယ်။ 127 | 128 | ```text 129 | $ sudo usermod -aG docker ${USER} 130 | ``` 131 | 132 | ထို့နောက် docker service ကို restart ချပါ။ 133 | 134 | ```text 135 | $ sudo systemctl restart docker 136 | ``` 137 | 138 | Docker service active ဖြစ်လာပါက docker ကို စတင် အသုံးပြုနိုင်မှာဖြစ်ပါတယ်။ 139 | 140 | -------------------------------------------------------------------------------- /04-docker-container.md: -------------------------------------------------------------------------------- 1 | # Docker Container 2 | 3 | ## Docker Container 4 | 5 | Docker container ဆိုတာ docker image တစ်ခုကို run လိုက်တဲ့အခါမှာ တည်ဆောက်လိုက်တဲ့ instance လေးတစ်ခုပဲ ဖြစ်ပါတယ်။ Container တစ်လုံးဟာ application တွေကို အလုပ်လုပ်စေဖို့အတွက်လိုအပ်တဲ့ libraries တွေနဲ့ settings တွေကိုသာ ပေါင်းစပ်ဖွဲ့စည်းထားတာ ဖြစ်ပါတယ်။ အဲ့ဒါဟာ Application တစ်ခုအတွက် အရမ်းကိုပေ့ါပါးပြီး အလွယ်တစ်ကူရွှေ့ပြောင်းလို့ရလောက်အောင် သေးငယ်တဲ့ environment တစ်ခုပဲ ဖြစ်ပါတယ်။ 6 | 7 | ## Run Docker Container 8 | 9 | System ပေါ်မှာ Docker Container တစ်လုံးကို စတင်မောင်းနှင်ရန်အတွက် docker run command ကို အသုံးပြုပါတယ်။ ဥပမာအားဖြင့် - အောက်ပါ command ကိုရိုက်လျှင် hello-world image ကိုအသုံးပြု၍ docker container တစ်လုံးကို တည်ဆောက်ပါလိမ့်မယ်။ 10 | 11 | ```text 12 | $ docker run hello-world 13 | ``` 14 | 15 | အခု .. CentOS operating system ကို အသုံးပြုပြီးတေ့ာ အလုပ်လုပ်နေမယ့် docker container တစ်လုံးကို တည်ဆောက်ပါမယ်။ -it ဆိုတဲ့ option က pseudo-TTY အသုံးပြုလို့ရတဲ့ interactive session တစ်ခုကို ပေးပါတယ်။ အဲ့ဒီကနေ container shell ကို ချက်ချင်းသုံးလို့ရပါလိမ့်မယ်။ 16 | 17 | ```text 18 | $ docker run -it centos 19 | ``` 20 | 21 | ![](.gitbook/assets/2_run_ti_centos.png) 22 | 23 | ကျွန်တော်တို့ customized လုပ်ထားတဲ့ ssh access enabled လုပ်ထားတဲ့ Ubuntu docker image ကိုလည်း [docker hub repository](https://hub.docker.com/r/tecadmin/ubuntu-ssh/) မှာ စမ်းကြည့်လို့ရပါတယ်။ 24 | 25 | ```text 26 | $ sudo docker run -d -p 2222:22 tecadmin/ubuntu-ssh:16.04 27 | ``` 28 | 29 | ## List Docker Containers 30 | 31 | လက်ရှိ System ပေါ်မှာ အလုပ်လုပ်နေတဲ့ containers တွေအားလုံးကို list ထုတ်ကြည့်ချင်ရင် docker ps command ကိုသုံးပါတယ်။ အဲဒီ command က ရပ်ထားတဲ့ container တွေကိုတော့ list ထုတ်ပြမှာ မဟုတ်ပါဘူး။ အဲ့ဒါက Container ID, Container နာမည် နဲ့ container နဲ့ပတ်သက်တဲ့ အခြားအသုံးဝင်တဲ့ information တွေကိုပါ ပြပေးမှာဖြစ်ပါတယ်။ 32 | 33 | ```text 34 | $ docker ps 35 | ``` 36 | 37 | အပေါ်က command မှာ -a ဆိုတဲ့ option ကိုပါ ထည့်သုံးမယ်ဆိုရင်တော့ ရပ်ထားတဲ့ container တွေကိုပါ list ထုတ်ပြပေးမှာဖြစ်ပါတယ်။ 38 | 39 | ```text 40 | $ docker ps -a 41 | ``` 42 | 43 | ![](.gitbook/assets/4a_ps-large-resolution.png) 44 | 45 | ## Find all Details of Container 46 | 47 | Docker container တစ်လုံးနဲ့ပတ်သက်တဲ့ အသေးစိတ်အချက်အလက်အားလုံးကို ရှာချင်တဲ့အခါမှာတော့ docker inspect command ကို အသုံးပြုပါတယ်။ Container ရဲ့ အသေးစိတ်အချက်အလက်တွေကို သိချင်တယ်ဆိုရင်တော့ ကိုယ်သိချင်တဲ့ container ရဲ့ container ID သို့မဟုတ် container နာမည်ကို တိတိကျကျထည့်ပေးရမှာဖြစ်ပါတယ်။ 48 | 49 | ```text 50 | $ docker inspect cc5d74cf8250 51 | ``` 52 | 53 | ## Delete Docker Container 54 | 55 | System ထဲမှာရှိနေတဲ့ docker container ကို ဖျက်ချင်တယ်ဆိုရင်တော့ docker rm command ကို အသုံးပြုပါတယ်။ Container ကိုဖျက်ချင်တယ်ဆိုရင်တော့ ကိုယ်ဖျက်ချင်တဲ့ container ရဲ့ container ID သို့မဟုတ် container နာမည်ကို တိတိကျကျထည့်ပေးရမှာဖြစ်ပါတယ်။ 56 | 57 | ```text 58 | $ docker stop cc5d74cf8250 59 | $ docker rm cc5d74cf8250 60 | ``` 61 | 62 | -------------------------------------------------------------------------------- /05-docker-images.md: -------------------------------------------------------------------------------- 1 | # Docker Images 2 | 3 | ## Docker Images 4 | 5 | Docker image ဆိုတာကတော့ container တစ်ခုမှာ လိုချင်တဲ့ application တွေကိုအသုံးပြုလို့ရအောင်ပြုလုပ်ထားတဲ့ file တစ်ခုပါပဲ။ Docker image တွေဟာ ပြုလုပ်ပြီးတဲ့အချိန်ကစပြီး ဖျက်လိုက်တဲ့အချိန်အထိ အပြောင်းအလဲမရှိနိုင်ပါဘူး။ ထပ်ပြီးပြင်ဆင်လို့လည်းမရနိုင်ပါဘူး။ ပြီးတော့ image တွေဟာ တစ်ခြားသူတွေနဲ့လည်း မျှဝေအသုံးပြုနိုင်ပါသေးတယ်။ ဆိုလိုတာကတော့ တစ်ယောက်ပြုလုပ်ထားတဲ့ image ကိုသုံးပြီး နောက်တစ်ယောက်က ထပ်တူကျတဲ့ container တစ်ခုကို အသုံးပြုနိုင်တာမျိုးပါ။ 6 | 7 | အောက်မှာတော့ docker images တွေကိုအသုံးပြုဖို့အတွက် အခြေခံကျတဲ့ command တွေကို အကျဥ်းဖော်ပြပေးထားပါတယ်။ 8 | 9 | ## List Docker Images 10 | 11 | docker images ဆိုတဲ့ command နဲ့ ကိုယ့်စနစ်ထဲက အသုံးပြုလို့ရတဲ့ image တွေကိုစစ်ကြည့်လို့ရနိုင်ပါတယ်။ 12 | 13 | ```text 14 | $ docker images 15 | ``` 16 | 17 | ![](.gitbook/assets/1_ls.png) 18 | 19 | ## Search Docker Images 20 | 21 | docker search ဆိုတဲ့ command ကတော့ [docker hub](https://hub.docker.com/) ကနေ လိုချင်တဲ့ image ကိုရှာတဲ့အခါသုံးပါတယ်။ ဥပမာ WordPress အတွက် images တွေကိုရှာမယ်ဆိုရင် - 22 | 23 | ```text 24 | $ docker search wordpress 25 | ``` 26 | 27 | ![](.gitbook/assets/2_search-large-resolution.png) 28 | 29 | ## Download Docker Images 30 | 31 | လိုချင်တဲ့ image ကိုရှာတွေ့ပြီဆိုရင်တော့ docker pull ဆိုတဲ့ command နဲ့ ကိုယ့်စက်ထဲကို download ဆွဲနိုင်ပါတယ်။ ဥပမာ Docker hub ကနေ WordPress အတွက်နောက်ဆုံးversion ဖြစ်တဲ့image ကို download ချမယ်ဆိုရင် 32 | 33 | ```text 34 | $ docker pull wordpress 35 | ``` 36 | 37 | ![](.gitbook/assets/3_pull_wordpress.png) 38 | 39 | ## Delete Docker Images 40 | 41 | မလိုအပ်တော့တဲ့ image တွေကို ဖျက်ပစ်ဖို့အတွက်ကတော့ docker rmi ဆိုတဲ့ command ကိုသုံးပါတယ်။ ဥပမာ - 42 | 43 | ```text 44 | $ docker rmi wordpress 45 | ``` 46 | 47 | ![](.gitbook/assets/4_rmi.png) 48 | 49 | -------------------------------------------------------------------------------- /06-dockerfile.md: -------------------------------------------------------------------------------- 1 | # Dockerfile 2 | 3 | ## Working with Dockerfile 4 | 5 | Dockerfile ဆိုတာ နာမည်​အတိုင်းပဲ file တစ်​ခုပါပဲ။ သူ့ဆီမှာ တိကျတဲ့ instructions ​တွေပါမယ်​ အဲ့ instructions ​တွေနဲ့ ကိုယ်​လိုချင်​တဲ့ customized images ​တွေကို​ build လုပ်​ပါတယ်​ Default အ​နေနဲ့​တော့ နာမည်​ကို Dockerfile လို့ တ​ဝေမသိမ်း​ပေးရပါမယ်​။ 6 | 7 | ## Build Image with Dockerfile 8 | 9 | ```text 10 | $ docker build -t image_name . 11 | ``` 12 | 13 | ![](.gitbook/assets/1_docker_build.png) 14 | 15 | ဒါက​တော့ ​ရေးပြီးသား dockerfile နဲ့ image build လုပ်​တဲ့ command ပါ။ `-t`ဆိုတာ tag name ကိုကိုယ်​စားပြုပါတယ်​ သူ့အ​နောက်​မှာ image name လိုက်​ပါတယ်​ ​သေချာကြည့်ပါ command အဆုံးမှာ `( . )` ပါပါတယ်​ သူက current working directory မှာ ရှိတဲ့ Dockerfile ကိုယူပြီးသုံးမယ်​လို့ ဆိုလိုတာပါ အကယ်​၍ ခင်​​ဗျားမှာသာ Dockerfile တစ်​ခုမက ရှိ​နေရင်​ သို့မဟုတ်​ Dockerfile မှာ နာမည်​အစ D ကသာ small letter \(d\) ဖြစ်​​နေခဲ့မယ်​ဆိုရင်​ error တက်​နိုင်​ပါတယ်​။ 16 | 17 | ```text 18 | $ docker build -t image_name -f /path/to/Dockerfile 19 | ``` 20 | 21 | 22 | 23 | ဒီ command ကလဲ image build တဲ့ command ပါပဲ။ ထူးခြားတာက​တော့ `-f` flag ကိုသုံးထားတာပါ။ Current working directory ထဲကမဟုတ်​ပဲ ခင်​​ဗျားရဲ့ file system ထဲက တစ်​​နေရာရာမှာ ရှိတဲ့ Dockerfile ကို ​ခေါ်သုံးချင်​ရင်​ ဒီလို သုံးရပါမယ်​။ 24 | 25 | ## Create a Dockerfile 26 | 27 | ဒီ​နေရာမှာ အစမ်း​အ​နေနဲ့ Github ​ပေါ်က sample project ကိုယူသုံးပါ့မယ်​။ 28 | 29 | ```text 30 | $ git clone https://github.com/tecrahul/dockerfile 31 | $ cd dockerfile 32 | $ docker build -t apacheimage . 33 | ``` 34 | 35 | ![](.gitbook/assets/3c_apacheimage_build.png) 36 | 37 | အ​ပေါ်က command သုံး​ကြောင်းပြီးရင်​ image တစ်​ခု​ဆောက်​ပြီးပါပြီ ​ဆောက်​ပြီးသား images ​တွေကို docker images ဆိုတဲ့ command နဲ့​ခေါ်ကြည့်နိုင်​ပါတယ်​။ 38 | 39 | ## Launch Container with Image 40 | 41 | ```text 42 | $ docker run -it -p 8080:80 apacheimage 43 | ``` 44 | 45 | ဒီcommand နဲ့ ​ဆောက်​ပြီးသား image ကိုသုံးပြီး container တစ်​ခုတည်​​ဆောက်​ပါတယ်​။ `i`က interactive နဲ့ `t`က tty ကို ကိုယ်​စားပြုပါတယ်​။ `-p`ဆိုတာက​တော့ port သတ်​မှတ်​​ပေးတာပါ။ ဒီ ဥပမာမှာဆို ကိုယ့် host system ရဲ့ port 8080 နဲ့ container ရဲ့ port 80ကို ချိတ်​​ပေးဖို့ သုံးထားတာကို ​တွေ့ရမှာပါ။ အ​ရှေ့က ကိုယ့် host systemရဲ့ port နဲ့ အ​နောက်​က container ရဲ့ portကြားမှာ colon `( : )` ကို​ရေးရမှာပါ။ 46 | 47 | -------------------------------------------------------------------------------- /07-docker-directives.md: -------------------------------------------------------------------------------- 1 | # Dockerfile Directives 2 | 3 | ## What are Dockerfile Directives 4 | 5 | အ​ရှေ့မှာ Dockerfile ကိုသုံးပြီး image ​ဆောက်​ခဲ့တယ် ပြီးတေ့ာ အဲဒီ image ကိုသုံးပြီး container ​တွေ ​ဆောက်​တာကို မြင်​ခဲ့ရပြီးပါပြီ။ 6 | 7 | အခု​ပြောမှာက​တော့ အဲ့ဒီ Dockerfile ကို ဘယ်​လို​ရေးမလဲဆိုတာပါ။ 8 | 9 | Dockerfile ကို Docker directive ​တွေနဲ့​ရေးရတာပါ။ 10 | 11 | ### FROM 12 | 13 | ဒီ FROM ဆိုတဲ့ directive ကို base image ယူသုံးဖို့အတွက်​ သုံးတာပါ။ ဥပမာ ခင်​​ဗျားက ubuntu command ​တွေ သုံးလို့ရမဲ့ container တစ်​လုံးလိုချင်​တာဆိုရင်​ `FROM ubuntu` ဆိုပြီးသုံးရမှာပါ။ 14 | 15 | Default အ​နေနဲ့ဆို docker store မှာရှိတဲ့ ubuntu version ​တွေထဲကမှ latest version ကို ယူသုံးသွားမှာပါ အဲ့လိုမှမဟုတ်​ဘူး latest လိုချင်​တာမဟုတ်​ဘူး ကိုယ်​လိုချင်​တာ သက်​သက်​ဆို အခုလို​ရေးလို့ရပါတယ်​။ `FROM tecadmin/ubuntu-ssh:16.04` 16 | 17 | ### LABEL 18 | 19 | ဒါက​တော့ နာမည်​အတိုင်းပဲ label တပ်​တာပါ။ `Maintainer addres​s,vendor name,image version,release date` အစရှိသဖြင့်​ပေါ့။ ဥပမာ 20 | 21 | ```text 22 | LABEL maintainer="rahul@tecadmin.net" 23 | LABEL vendor="TecAdmin" 24 | LABEL com.example.version="0.01" 25 | ``` 26 | 27 | လို့ ရိုက်​လိုက်​ရုံပါပဲ။ အကြံပြု လိုတာက​တော့ တစ်​ line ထဲကို space ခံ single line ခံပြီး ​ရေးတာကိုပါ။ Image build တဲ့အချိန်​မှာ စာ​ကြောင်းတစ်​​ကြောင်းကို layer တစ်​ခု ​ဆောက်​တာပါ Layer နည်း​လေ မြန်​​လေပါပဲ။ 28 | 29 | ```text 30 | LABEL maintainer="rahul@tecadmin.net" vendor="TecAdmin" \ 31 | com.example.version="0.01" 32 | ``` 33 | 34 | ### RUN 35 | 36 | RUN ကို​တော့ လိုအပ်​တဲ့ command​တွေ run ဖို့သုံးပါတယ်။ ဥပမာ လိုအပ်တဲ့​package​တွေ သွင်းဖို့လိုတဲ့အခါမျိုး​ပေါ့။ 37 | 38 | ```text 39 | RUN apt-get update 40 | RUN apt-get install -y apache2 automake build-essential curl ​​ 41 | ``` 42 | 43 | ဒီ​နေရာမှာလဲ အ​ပေါ်ကလို တစ်​​ကြောင်းထဲဖြစ်​​အောင်​ ​ရေးသင့်ပါတယ်​။ Layer နည်း​လေ​ကောင်း​လေပါ။ 44 | 45 | ```text 46 | RUN apt-get update && apt-get install -y \ 47 | automake \ 48 | build-essential \ 49 | curl 50 | ``` 51 | 52 | ### COPY 53 | 54 | ဒါကို​တော့ ကိုယ့်စက်​ထဲမှာရှိတဲ့ files ​တွေ directories ​တွေကို ​ဆောက်​မယ့် image ​ပေါ်copy ကူးချင်​ရင်​ သုံးပါတယ်။​ 55 | 56 | ```text 57 | COPY html/* /var/www/html/ 58 | COPY *.conf /etc/apache2/sites-available/ 59 | ``` 60 | 61 | ပထမ command ရိုက်​လိုက်​ရင်​ host ရဲ့ html directory ​အောက်​က file အကုန်​ကို image ရဲ့ /var/www/html/ ​အောက်​ကို copy ကူးသွားမှာပါ။ 62 | 63 | ဒုတိယ command က​တော့ host ရဲ့ .conf extension file အားလုံးကို image ရဲ့ /etc/apache2/sites-available/ ​အောက်​ကို​ပေါ့။ 64 | 65 | ### WORKDIR 66 | 67 | ဒီ directive ကို​တော့ dockerfile ရဲ့အခြား​သော directives ​တွေဖြစ်​တဲ့ `RUN,CMD,ENTRYPOINT,COPY,ADD` ​တွေရဲ့ working directory သတ်​မှတ်​​ပေးဖို့သုံးပါတယ်​။ 68 | 69 | ```text 70 | WORKDIR /opt 71 | ``` 72 | 73 | ### CMD 74 | 75 | CMD directive ကို​တော့ image မှာပါတဲ့ service,software ​တွေကို container launch လုပ်​​တာနဲ့ run ဖို့သုံးပါတယ်။​ သူ့ရဲ့ syntax က​တော့ 76 | 77 | ```text 78 | CMD ["executable","param1","param2"] 79 | CMD ["executable","param1","param2"] 80 | ``` 81 | 82 | အကယ်​၍ခင်​​ဗျားက apache service ကို runချင်​တယ်​ဆိုပါ​တော့ 83 | 84 | ```text 85 | CMD ["apachectl", "-D", "FOREGROUND" ] 86 | ``` 87 | 88 | ### EXPOSE 89 | 90 | ဒါက container ရဲ့ port ကိုညွှန်းဆိုမဲ့ directive ပါ။ အ​ပေါ်မှာ​တွေ့ခဲ့တဲ့ docker run -it -p နဲ့ port ချိတ်​တာမှာ ဒီက ညွှန်းဆိုထားတဲ့ port ​တွေနဲ့ ချိတ်​​ပေးရပါမယ်​။ 91 | 92 | ```text 93 | EXPOSE 80 94 | EXPOSE 443 95 | ``` 96 | 97 | ### ENV 98 | 99 | ENV directive ကို​တော့ environment variable သတ်​မှတ်​​ပေးချင်​ရင်​ သုံးတာပါ။ 100 | 101 | ```text 102 | ENV PATH=$PATH:/usr/local/psgql/bin/ \ 103 | PG_MAJOR=9.6.0 104 | ``` 105 | 106 | ### VOLUME 107 | 108 | ​နောက်​ဆုံး အ​နေနဲ့​တော့ VOLUME directive ပါ။ သူ့ကို​တော့ mount point create ဖို့ သုံးပါတယ်​။ သိထားဖို့က သူဟာ externally mounted volumes ပဲဖြစ်​ပါတယ်​။ 109 | 110 | ```text 111 | VOLUME ["/data"] 112 | ``` 113 | 114 | -------------------------------------------------------------------------------- /08-docker-port.md: -------------------------------------------------------------------------------- 1 | # Docker Port 2 | 3 | ## Manage Ports in Docker 4 | 5 | Docker containers တွေထဲမှာဆိုရင် servicesတွေက သီးခြား port တစ်ခုစီပေါ်မှာ run လေ့ရှိပါတယ်။ port တစ်ခုပေါ်မှာ run နေတယ် containerရဲ့ services ‌တွေကို အသုံးပြုချင်တယ်ဆိုရင် container ရဲ့ port ကို Docker host ရဲ့ port တစ်ခုခုနဲ့ bindပေးရပါတယ်။ 6 | 7 | ### ဥပမာ ၁ 8 | 9 | အောက်‌ကပုံကိုကြည့်ပါ။ Docker host ထဲမှာ container နှစ်လုံး run နေတာကို တွေ့ရပါလိမ့်မယ်။ ပထမတစ်ခုကတော့ website တွေ runနေတဲ့ Apache container ဖြစ်ပြီးတော့ ဒုတိယတစ်ခုကတော့ MySQL container ဖြစ်ပါတယ်။ 10 | 11 | 12 | ![](.gitbook/assets/screenshot-132.png) 13 | 14 | အခုကျွန်တော်တို့ port 80 Apache container ပေါ်မှာ run နေတယ့် website ကိုဝင်ရောက်ကြည့်ရှုဖို့လိုအပ်နေပါတယ်။ အဲတော့ ကျွန်တော်တို့ Docker host port 8080 ကနေ Apache container port 80 ကို bind လိုက်ကြရအောင်။ Docker host port 80 နဲ့လည်း bind လို့ရပါတယ်။ 15 | 16 | ဒုတိယ container port 3306 ပေါ်မှာ MySQL run နေပါတယ်။ Host machine ကနဲ့ MySQL ကို အခြားနည်းလမ်းတွေနဲ့ access လုပ်လို့ရပါတယ်။ ဒါပေမယ့်ဒီသင်ခန်းစာအတွက် MySQL container port 3306 ကို docker host port 6603 နဲ့ကျွန်တော် bindလိုက်ပါတယ်။ အခုကျွန်တော်တို့ Host machine ရဲ့ port 6603 ကိုသုံးပြီး MySQL container ကိုတိုက်ရိုက်ဆက်သွယ်နိုင်ပါတယ်။ 17 | 18 | အောက်က command ကတော့ host system port နဲ့ container port ကို bind ပေးမယ့် command ဖြစ်ပါတယ်။ 19 | 20 | ```bash 21 | $ docker run -it -p 8080:80 apache_image 22 | $ docker run -it -p 6603:3066 mysql_image 23 | ``` 24 | 25 | ### ဥပမာ ၂ 26 | 27 | ဒီဥပမာမှာတော့ GitHub ပေါ်မှာရှိတယ့် ကျွန်တော်တို့ရဲ့ နမူနာ project ကိုသုံးရမှာဖြစ်ပါတယ်။ အောက်က command ကိုသုံးပြီးတော့ repository ကို clone လိုက်ပါ။ 28 | 29 | ```bash 30 | $ git clone https://github.com/tecrahul/dockerfile 31 | $ cd dockerfile 32 | ``` 33 | 34 | အခု apacheimage ဆိုတဲ့အမည်နဲ့ docker image ကို build လိုက်ပါ။ 35 | 36 | ```bash 37 | $ docker build -t apacheimage . 38 | ``` 39 | 40 | အခု Docker run command ကိုသုံးပြီး‌တော့ containerကို runလိုက်ပါ။ container port 80 ပေါ်မှာ Apache service run သွားပါလိမ့်မယ်။ host system port 8080 ကို container port 80 နှင့် bind ဖြစ်ဖို့ `-p 8080: 80` ကိုသတ်မှတ်ရပါမယ်။ 41 | 42 | ```bash 43 | $ docker run -it -p 8080:80 apacheimage 44 | ``` 45 | 46 | အခု Web browser ထဲမှာ host machine ip နဲ့ port 8080 သုံးပြီး access လုပ်မယ်ဆိုရင် အောက်မှာပြထားတယ်ပုံအတိုင်း container ရဲ့ Apache service ပေါ်မှာ run နေတဲ့ web page စာမျက်နှာမှာပေါ်လာပါလိမ့်မယ်။ ကျွန်တော့်ရဲ host machine ip ကတော့ 192.168.1.5 ဖြစ်ပါတယ်။ 47 | 48 | ![](.gitbook/assets/docker_file_and_docker_port.png) 49 | 50 | ### ဥပမာများ 51 | 52 | ကျွန်တော်တို့ container တစ်ခုတည်းနဲ့ port များစွာကို bind နိုင်ပါတယ်။ ဒါပေမဲ့ image build မလုပ်ခင် port အားလုံးကို dockerfile ထဲမှာ `EXPOSE` လုပ်ထားရပါမယ်။ 53 | 54 | ```bash 55 | $ docker run -it -p 8080:80,8081:443 image_name 56 | ``` 57 | 58 | တစ်ကယ်လို့ host machine ရဲ့ interface တစ်ခုခုနဲ့ bind ချင်တယ်ဆိုလို့ရှိရင် အောက်ကအတိုင်း IP သက်မှတ်ပေးလိုက်လို့ရပါတယ်။ အောက်က ဥပမာအရ port 8080 နဲ့ 8081 ကို 127.0.0.1 IP နဲ့သာ access လုပ်လို့ရပါတယ်။ 59 | 60 | ```bash 61 | $ docker run -it -p 127.0.0.1:8080:80,127.0.0.1:8081:443 image_name 62 | $ docker run -it -p 192.168.1.111:8080:80,92.168.1.111:8081:443 image_name 63 | ``` 64 | 65 | -------------------------------------------------------------------------------- /09-docker-network.md: -------------------------------------------------------------------------------- 1 | # Docker Networking 2 | 3 | ## Docker Networking 4 | 5 | Docker မှာ Network တွေကို docker containers နှင့် ဆက်သွယ်ဖို့အတွက် create နဲ့ manage လုပ်ဆောင်ချက်တွေ ကို ထောက်ပံ့ပေးထားပါတယ်။ **docker network command** ကို အသုံးပြုပြီးတော့ Docker network ကို manage လုပ်လို့ရပါတယ်။ 6 | 7 | **Syntax:** 8 | 9 | ```text 10 | $ docker network [options] 11 | ``` 12 | 13 | အောက်ပါ Tutorial ကို လေ့လာပြီး Docker network ကို create , list နဲ့ manage စတဲ့ features တွေကို လုပ်ဆောင်လို့ရပါတယ်။ 14 | 15 | ## Docker Networks များ ကို List လုပ်ခြင်း။ 16 | 17 | `ls` option ကို အသုံးပြုပြီး docker host ပေါ်မှာ ရှိတဲ့ docker network တွေ ကို List လုပ်လို့ရပါတယ်။ 18 | 19 | ```text 20 | $ docker network ls 21 | ``` 22 | 23 | ## Docker Network တခု Create လုပ်ခြင်း။ 24 | 25 | Network အမျိုးအစား အမျိုးမျိုးကို Docker မှ ထောက်ပံ့ပေးထားပါတယ်။ သင့်ရဲ့ system ပေါ်မှာ a bridge Network တခုကို အောက်ပါ command အသုံးပြုပြီး create လို့ရပါတယ်။ 26 | 27 | **Syntax:** 28 | 29 | ```text 30 | $ docker network create -d [network_type] [network_name] 31 | ``` 32 | 33 | **Example:** 34 | 35 | ```text 36 | $ docker network create -d bridge my-bridge-network 37 | ``` 38 | 39 | ## Container ကို Network ချိတ်ခြင်း။ 40 | 41 | Container နာမည် \(သို့မဟုတ်\) Container ID ကို အသုံးပြုပြီး မည်သည့် container ကိုမဆို ရှိပြီးသား docker network နဲ့ ချိတ်ဆက်နိုင်ပါတယ်။ Container တစ်ခုကို Network နဲ့ တစ်ခါ ချိတ်ဆက်ထားရုံနဲ့ အခြား container များကိုလဲ တူညီတဲ့ Network တစ်ခုတည်းပေါ်မှာ ဆက်သွယ်လုပ်ဆောင်လို့ရပါတယ်။ 42 | 43 | **Syntax:** 44 | 45 | ```text 46 | $ docker network connect [network_name] [container_name] 47 | ``` 48 | 49 | **Example:** 50 | 51 | ```text 52 | $ docker network connect my-bridge-network centos 53 | ``` 54 | 55 | ## Docker Network နှင့် Container ကို disconnect လုပ်ခြင်း။ 56 | 57 | သင့်အနေနဲ့ Network တစ်ခုပေါ်ကနေ container ကို disconnect လုပ်ချင်ရင် အောက်ပါ command ကို အသုံးပြုနိုင်ပါတယ်။ 58 | 59 | **Syntax:** 60 | 61 | ```text 62 | $ docker network disconnect [network_name] [container_name] 63 | ``` 64 | 65 | **Example:** 66 | 67 | ```text 68 | $ docker network disconnect my-bridge-network centos 69 | ``` 70 | 71 | ## Docker Network တခုရဲ့ အချက်အလက် ကိုကြည့်ခြင်း။ 72 | 73 | Docker Network တစ်ခုရဲ့ အသေးစိတ်အချက်အလက်ကို ကြည့်ချင်ရင် inspect option ကို အသုံးပြုပြီး ကြည့်လို့ရပါတယ်။ 74 | 75 | ```text 76 | $ docker network inspect my-bridge-network 77 | ``` 78 | 79 | inspect option ကို အသုံးပြုပြီး Docker Network တခုရဲ့ အသေးစိတ် အချက်အလက်ကိုကြည့်မယ် ဆိုရင် အခုလိုမြင်ရမှာ ဖြစ်ပါတယ်။ 80 | 81 | ## Docker Network ကို Remove ခြင်း။ 82 | 83 | Docker network တွေကို remove လုပ်မယ်ဆိုရင် rm option ကို အသုံးပြုလို့ပါတယ်။ 84 | 85 | တစ်ခုထက်ပိုတဲ့ docker network တွေကို remove လုပ်ချင်ရင် network ID \(သို့မဟုတ်\) network name တွေကို space ခံပြီး အသုံးပြုပြီး remove လုပ်လို့ရပါတယ်။ 86 | 87 | **Example:** 88 | 89 | ```text 90 | $ docker network rm my-bridge-network network2 network3 91 | ``` 92 | 93 | သင့်အနေနဲ့ docker ပေါ်က အသုံးမပြုတော့တဲ့ network အားလုံးကို remove လုပ်ချင်ရင် prune option ကို အသုံးပြုပြီး remove လုပ်လို့ရပါတယ်။ 94 | 95 | ```text 96 | $ docker network prune 97 | ``` 98 | 99 | -------------------------------------------------------------------------------- /10-docker-network-example.md: -------------------------------------------------------------------------------- 1 | # Docker Networking Example 2 | 3 | ## Docker Networking Example 4 | 5 | Docker Network tutorial ဖတ်ပြီးပြီဆိုရင် Example လေး စမ်းလုပ်ကြည့်လို့ရပါတယ်။ 6 | 7 | ကျွန်တော်တို့ ဒီ Tutorial မှာတော့ docker containers နှစ်ခုနဲ့ docker network အသေးစားလေး တစ်ခု လုပ်ပြသွားမှာ ဖြစ်ပါတယ်။ 8 | 9 | > MySQL – A relational database server. 10 | > 11 | > PHPMyAdmin – A web based interface to manage MySQL server. 12 | 13 | အခု tutorial မှာတော့ အခြား MySQL server ကို access လုပ်ဖို့အတွက် အခြား container တစ်ခုမှာ run ထားတဲ့ PHPMyAdmin ကို အသုံးပြု ပြသသွားမှာ ဖြစ်ပါတယ်။ 14 | 15 | ## Network တခု Create လုပ်ခြင်း။ 16 | 17 | ပထမဦးစွာ အနေဖြင့် docker network အသစ် တစ်ခုကို Create လုပ်ဖြစ်ပါတယ်။ my-bridge-network အမည်ရှိသော network အသစ်ကို အောက်ပါ command အသုံးပြုပြီး create လုပ်ပါ။ 18 | 19 | ```text 20 | $ docker network create -d bridge my-bridge-network 21 | ``` 22 | 23 | ## MySQL Container ကို Run ခြင်း။ 24 | 25 | အခု ကျွန်တော်တို့ MySQL docker container အသစ်ကို Run မှာ ဖြစ်ပါတယ်။ 26 | 27 | Default root userရဲ့ password အသစ်ကို သတ်မှတ်ဖို့အတွက် MYSQL\_ROOT\_PASSWORD variable ကို အောက်မှာပြထားတဲ့အတိုင်း ရိုက်ပါ။ 28 | 29 | ```text 30 | $ docker run --name mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql/mysql-server 31 | ``` 32 | 33 | Container တစ်ခု create ပြီးနောက် စောစော က ကျွန်တော်တို့ create ထားတဲ့ my-bridge-network network နဲ့ ချိတ်ဆက်မှာ ဖြစ်ပါတယ်။ 34 | 35 | ```text 36 | $ docker network connect my-bridge-network mysql 37 | ``` 38 | 39 | နောက် တဆင့် အနေနဲ့ MySQL container ရဲ့ IP address အသစ် ကိုကြည့်မှာဖြစ်ပါတယ်။ 40 | 41 | ```text 42 | $ docker inspect mysql | grep "IPAddress" 43 | ``` 44 | 45 | ## PHPMyAdmin Container ကို Run ခြင်း။ 46 | 47 | အခု ကျွန်တော်တို့ Docker container အသစ်ဖြစ်တဲ့ phpmyadmin ကို run မှာ ဖြစ်ပါတယ်။ 48 | 49 | MySQL ကို Run ခြင်း နောက်ဆုံးအဆင့်မှာ ရခဲ့တဲ့ MySQL container IP address ကို PMA\_HOST value အနေနဲ့ထည့်ပါမယ်။ 50 | 51 | ```text 52 | $ docker run --name phpmyadmin -d -e PMA_HOST=172.21.0.2 -p 8080:80 phpmyadmin/phpmyadmin 53 | ``` 54 | 55 | ပြီးနောက် phpmyadmin container ကို my-bridge-network ထဲ add လိုက်ပါ။ 56 | 57 | ```text 58 | $ docker network inspect my-bridge-network 59 | ``` 60 | 61 | ## My-bridge-network Network ရဲ့ အချက်အလက် ကိုကြည့်ခြင်း။ 62 | 63 | အပေါ်မှာ ပြခဲ့တဲ့ containers နှစ်ခု ကို ကျွန်တော်တို့ my-bridge-network ထဲ ထည့်ပြီးသွားတဲ့ အတွက် လက်ရှိ my-bridge-network ရဲ့ setting ကို ကြည့်လိုက်ရအောင်။ 64 | 65 | ```text 66 | $ docker network inspect my-bridge-network 67 | ``` 68 | 69 | My-bridge-network ရဲ့ setting ကို ကြည့်ရင်တော့ အခုလိုတွေ့ရမှာဖြစ်ပါတယ်။ 70 | 71 | ## Allow MySQL to PHPMyAdmin Host 72 | 73 | MySQL default အနေနဲ့ကတော့ remote hosts connect လုပ်တာကို ခွင့်မပြုထားပါဘူး။ 74 | 75 | ဆိုတော့ ကျွန်တော်တို့က MySQL connection အတွက် phpmyadmin ကို allow 76 | 77 | လုပ်ပေးရမှာ ဖြစ်ပါတယ်။ MySQL container shell access ရဖို့အတွက် အောက်မှာ ပြထားတဲ့ လုပ်ရမှာဖြစ်ပါတယ်။ 78 | 79 | ```text 80 | $ docker exec -it mysql bash 81 | ``` 82 | 83 | MySQL server ထဲကို MySQL container create လုပ်တုန်းက ပေးထဲ့ခဲ့တဲ့ Password ကို အသုံးပြုပြီး Login ဝင်လိုက်ပါ။ 84 | 85 | ```text 86 | bash-4.2# mysql -u root -p 87 | ``` 88 | 89 | phpmyadmin host ip address နဲ့ user အသစ် create လုပ်လိုက်ပါ။ ဒီ tutorial ထဲမှာတော့ phpmyadmin host ip address ကတော့ ‘**172.21.0.3**‘ ဖြစ်ပါတယ်။ 90 | 91 | ```text 92 | mysql> GRANT ALL on *.* to 'dbuser'****@****'172.21.0.3' identified by 'secret'; 93 | Query OK, 0 rows affected, 1 warning (0.00 sec) 94 | 95 | mysql> flush privileges; 96 | Query OK, 0 rows affected (0.00 sec) 97 | 98 | mysql> exit 99 | Bye 100 | ``` 101 | 102 | ## Access MySQL with PHPMyAdmin 103 | 104 | နောက်ဆုံးအနေဖြင့် ကျွန်တော်တို့ ရဲ့ docker host system က port 8080 မှ တဆင့် phpmyadmin web user interface ကို ချိတ်ဆက်လို့ ရသွားပါတယ်။ 105 | 106 | phpMyAdmin ကို MySQL ရဲ့ အချက်အလက်တွေ သုံးပြီး အပေါ်မှာ ပြထားတဲ့ အတိုင်း Login ဝင်ရန် အသုံးပြုလို့ရပါတယ်။ 107 | 108 | -------------------------------------------------------------------------------- /11-docker-compose.md: -------------------------------------------------------------------------------- 1 | # Docker Compose 2 | 3 | ## Docker Compose 4 | 5 | Docker Compose ဟာဆိုရင် Containers များကို Setup ပြုလုပ်ရာတွင် အသုံးပြုသည့် Tool တစ်ခုဖြစ်ပါတယ်။ Docker Compose ကိုသုံးခြင်းဖြင့် docker containers များကို Compose File တစ်ခုအနေဖြင့် ဖန်တီးနိုင်ပါတယ်။ Images and Containers များကို လည်း Single Command ဖြင့် လွယ်ကူစွာ build လုပ်နိုင်ပါတယ်။ 6 | 7 | Docker Compose ပြုလုပ်ရန် အဆင့် \(3\) ဆင့် ရှိပါတယ်။ 8 | 9 | * Dockerfile တွင် သုံးမည့် Services များကို သတ်မှတ်ပေးရမယ်။ 10 | * မိမိ Enviroment အတွက် သုံးမည့် Service and Application များကို docker-file အဖြစ်ပြုလုပ်ပြီး sample.yml format ဖြင့် သိမ်းဆည်းရမယ်။ 11 | * Run docker-compose up Command ဖြင့် Docker Containers Services များကို Run နိုင်ပါတယ်။ 12 | 13 | **စက်တွင် Docker Enginer ရှိဖို့လိုပါသည်။ မရှိလျှင် Docker Engine Installation Section တွင်လေ့လာနိုင်ပါသည်။** 14 | 15 | ## Install Docker Compose 16 | 17 | Docker Compose ကို Install ပြုလုပ်ရန် [https://github.com/docker/compose/releases](https://github.com/docker/compose/releases) \(Github Page\) တွင် ဝင်ရောက်လေ့လာ၍ ရယူနိုင်ပါတယ်။ 18 | 19 | အောက်ပါ Command ဖြင့်လည်း Docker compose 1.16.1 ကို Install ပြုလုပ်နိုင်ပါတယ်။ Install မပြုလုပ်ခင် Docker version နှင့် Specific ဖြစ်မဖြစ် စစ်ဆေးရန်လိုအပ်ပါတယ်။ 20 | 21 | ```text 22 | $ curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 23 | 24 | $ chmod +x /usr/local/bin/docker-compose 25 | ``` 26 | 27 | ## Docker Compose Example File 28 | 29 | Docker Composer file ဟာ docker-compose.yml \(format\) ဖြစ်ပြီး အောက်တွင် Version 3 docker composer file ကို Sample ပြထားပါတယ်။ ယခု File ဟာဆိုရင် Sample Service တစ်ခုဖြစ်သည့် WEB Name တစ်ခုကိုသာ ပြထားပါတယ်။ 30 | 31 | ```text 32 | version: '3' 33 | services: 34 | db: 35 | image: mysql 36 | container_name: mysql_db 37 | restart: always 38 | environment: 39 | - MYSQL_ROOT_PASSWORD="secret" 40 | web: 41 | image: apache 42 | build: . 43 | container_name: apache_web 44 | restart: always 45 | ports: 46 | - "8080:80" 47 | ``` 48 | 49 | ## Docker Compose CLI Reference 50 | 51 | Docker Compose နှင့် Docker Container များကို manage ပြုလုပ်ရန်အတွက် docker-compose command ဟာ subcommand များကိုလည်း provides လုပ်ပေးပါတယ်။ 52 | 53 | အောက်တွင် subcommand အချို့ကို လေ့လာနိုင်ပါတယ်။ သတိပြုရန်မှာ Container Name နှင့် Services Name ကို မမှားဖို့ သတိပြုရမှာဖြစ်ပါတယ်။ 54 | 55 | `build -` build option ဖြင့် images များကို build လုပ်ပြီး Services များကို အသုံးပြုနိုင်ပါတယ်။ 56 | 57 | ```text 58 | $ docker-compose build ## Build all services 59 | $ docker-compose build web ## Build single service 60 | ``` 61 | 62 | `up –` Current Directory အောက်ရှိ docker-composer.yml မှ docker container နှင့် Services များကို Create ပြုလုပ်ရန်ဖြစ်ပါတယ်။ 63 | \( -d \) Switch ဟာဆိုရင် Container ကို daemon mode ဖြင့် run စေရန်ဖြစ်ပါတယ်။ 64 | 65 | ```text 66 | $ docker-compose up -d ## Create all containers 67 | $ docker-compose up -d web ## Create single container 68 | ``` 69 | 70 | `down –` Option ကို containers များ၏ Network, Container Service and Associate Images များကို ရပ်ရန်, ဖျက်ရန် အသုံးပြုနိုင်ပါတယ်။ 71 | 72 | ```text 73 | $ docker-compose down ## Restart all containers 74 | $ docker-compose down web ## Restart single container 75 | ``` 76 | 77 | `ps –` Container များ၏ Services, Status and Port များ၏ process detail ကို သိနိုင်ရန် သုံးပါတယ်။ 78 | 79 | ```text 80 | $ docker-compose ps 81 | ``` 82 | 83 | `exec –` Running Containers များကို exec ပြုလုပ်ရန်သုံးပါတယ်။ For example, Web Service Run နေသည့် Container ကို list-file အနေဖြင့် ကြည့်ရန်.. 84 | 85 | ```text 86 | $ docker-compose exec web ls -l 87 | ``` 88 | 89 | `start -` Containers များကို Start လုပ်ရန်သုံးပါတယ်။ 90 | 91 | ```text 92 | $ docker-compose start ## Start all containers 93 | $ docker-compose start web ## Start single container 94 | ``` 95 | 96 | `stop -` Running Containers များကို ရပ်လိုက်ရန် အသုံးပြုပါတယ်။ 97 | 98 | ```text 99 | $ docker-compose stop ## Stop all containers 100 | $ docker-compose stop web ## Stop single container 101 | ``` 102 | 103 | `restart –` 104 | 105 | ```text 106 | Containers များကို restart ပြုလုပ်ရန် သုံးပါတယ်။ 107 | ``` 108 | 109 | ```text 110 | $ docker-compose restart ## Restart all containers 111 | $ docker-compose restart web ## Restart single container 112 | ``` 113 | 114 | `pause –` Containers များကို pause လုပ်ရန် သုံးပါတယ်။ 115 | 116 | ```text 117 | $ docker-compose pause ## Start all paused containers 118 | $ docker-compose pause web ## Start single paused container 119 | ``` 120 | 121 | `rm –` Containers များကို ဖျက်ရန်, ဖယ်ရှားရန် သုံးပါတယ်။ 122 | 123 | ```text 124 | $ docker-compose rm ## Start all paused containers 125 | $ docker-compose pause web ## Start single paused container 126 | ``` 127 | 128 | -------------------------------------------------------------------------------- /12-docker-compose-example.md: -------------------------------------------------------------------------------- 1 | # Docker Compose Example 2 | 3 | ### Step 1 – Create Directory Structure 4 | 5 | ပထမဆုံး အနေဖြင့် docker compose အမည်ရှိ directory တစ်ခု တည်ဆောက်ပါမယ်။ ထို့နောက် web application သိမ်းဆည်းရန် webapp အမည်ရှိ directory တည်ဆောက်ပါမယ်။ webapp directory ထဲတွင် web application ကိုစမ်းရန် အတွက် index.html ကို တည်ဆောက်ပါမယ်။ 6 | 7 | ``` 8 | $ mkdir dockercompose && cd dockercompose 9 | $ mkdir webapp && echo "It Works"; webapp/index.html 10 | ``` 11 | 12 | ### Step 2 – Create Dockerfile for Webapp 13 | 14 | ပြီးနောက် web application အတွက် လိုအပ်သော dockerfile ကို webapp directory ထဲမှာတည်ဆောက်ပါမယ်။ dockerfile ဟာဆိုရင် web application အတွက် လိုအပ်သော apache web server ပါ၀င်သည့် customized image တည်ဆောက်ရန်ဖြစ်ပါတယ်။ 15 | 16 | ```text 17 | $ vim webapp/Dockerfile 18 | ``` 19 | 20 | ထို့နောက် အောက်ပါ code များကို ပေါင်းထည့်ပါ။ 21 | 22 | ```text 23 | FROM tecadmin/ubuntu-ssh:16.04 24 | 25 | RUN apt-get update \ 26 | && apt-get install -y apache2 27 | 28 | COPY index.html /var/www/html/ 29 | WORKDIR /var/www/html 30 | CMD ["apachectl", "-D", "FOREGROUND"] 31 | EXPOSE 80 32 | ``` 33 | 34 | ### Step 3 – Create Docker Compose File 35 | 36 | ထို့နောက် လက်ရှိ directory ထဲတွင် docker-compose.yml အမည်ရှိ docker configuration ဖိုင် တစ်ခုကို တည်ဆောက်ပါမယ်။ ထို configuration ဖိုင်ဟာ အသုံးပြုမည့် containers အကုန်လုံးကို ကိုယ်စားပြုမှာဖြစ်ပါတယ်။ 37 | 38 | ```text 39 | $ vim docker-compose.yml 40 | ``` 41 | 42 | ထို့နောက် အောက်ပါ code များကို ပေါင်းထည့်ပါ။ 43 | 44 | ``` 45 | version: '3' 46 | services: 47 | db: 48 | image: mysql 49 | container_name: mysql_db 50 | restart: always 51 | environment: 52 | - MYSQL_ROOT_PASSWORD="secret" 53 | web: 54 | image: apache 55 | build: ./webapp 56 | depends_on: 57 | - db 58 | container_name: apache_web 59 | restart: always 60 | ports: 61 | - "8080:80" 62 | ``` 63 | 64 | အထက်ပါ ဖိုင်ဟာ containers နှစ်ခု အတွက်ဖြစ်ပါတယ်။ ပထမ container သည် mysql database server အတွက်ဖြစ်ပြီး ဒုတိယသည် web server အတွက်ဖြစ်ပါတယ်။ Web container ဟာ application များကို apache server တွင် အလုပ်လုပ်စေမှာဖြစ်ပါတယ်။ webapp directory ကို build directory အဖြစ် သတ်မှတ်ထားခြင်းဖြစ်ပါတယ်။ 65 | 66 | ### Step 4 – Build Webapp Image 67 | 68 | အောက်ပါ command ဖြင့် webapp directory အတွင်းရှိ contents များနှင့် Dockerfile ကို အသုံးပြု၍ apache အမည်ရှိ image တစ်ခုကို တည်ဆောက်ပါမယ်။ 69 | 70 | ```text 71 | $ docker-compose build 72 | ``` 73 | 74 | 75 | 76 | > ```text 77 | > db uses an image, skipping 78 | > Building web 79 | > Step 1/6 : FROM tecadmin/ubuntu-ssh:16.04 80 | > 16.04: Pulling from tecadmin/ubuntu-ssh 81 | > b3e1c725a85f: Pull complete 82 | > 4daad8bdde31: Pull complete 83 | > 63fe8c0068a8: Pull complete 84 | > 4a70713c436f: Pull complete 85 | > bd842a2105a8: Pull complete 86 | > c41407f48fa7: Pull complete 87 | > 1fcfeb9b5ef4: Pull complete 88 | > 13195a7d2240: Pull complete 89 | > b86be64bbda8: Pull complete 90 | > 8c951fe917dc: Pull complete 91 | > f74bc80103b6: Pull complete 92 | > Digest: sha256:523d6fbc97954e9f77231bf54bfcfbbdd4805349887477fbac4a63dc735d777d 93 | > Status: Downloaded newer image for tecadmin/ubuntu-ssh:16.04 94 | > ---> bb63b492da01 95 | > Step 2/6 : RUN apt-get update && apt-get install -y apache2 96 | > ---> Running in 00be0dd717ce 97 | > [[[Removed long output from here]]] 98 | > ---> 41c731590234 99 | > Removing intermediate container 00be0dd717ce 100 | > Step 3/6 : COPY index.html /var/www/html/ 101 | > ---> 42f84d4c2243 102 | > Removing intermediate container 945aaee6cbde 103 | > Step 4/6 : WORKDIR /var/www/html 104 | > ---> 40bebd21e352 105 | > Removing intermediate container e13f5f412906 106 | > Step 5/6 : CMD apachectl -D FOREGROUND 107 | > ---> Running in ab0db1ef1c6e 108 | > ---> 587bf2323289 109 | > Removing intermediate container ab0db1ef1c6e 110 | > Step 6/6 : EXPOSE 80 111 | > ---> Running in 7bcbef52d585 112 | > ---> 8f03d4135394 113 | > Removing intermediate container 7bcbef52d585 114 | > Successfully built 8f03d4135394 115 | > Successfully tagged apache:latest 116 | > ``` 117 | 118 | ### Step 5 – Launch Docker Containers 119 | 120 | docker-compose up ကို အသုံးပြု၍ containers များကို စတင်စေပါမယ်။ Daemon mode ကို အသုံးပြုရန် -d option ကို အသုံးပြုနိုင်ပါတယ်။ 121 | 122 | ```text 123 | $ docker-compose up -d 124 | ``` 125 | 126 | ### Step 6 – Update Content in Web Application 127 | 128 | Web application တွင် ပြောင်းလဲမှု များပြုလုပ်လိုလျှင် 129 | 130 | ```text 131 | $ echo "Welcome to Docker Compose Tutorial" >> webapp/index.html 132 | ``` 133 | 134 | ပြီးလျှင် အောက်ပါ command များကို သုံး၍ webapp container ကို ပြန်လည် တည်ဆောက်ပြီး စတင် အလုပ်လုပ်စေနိုင်ပါတယ်။ 135 | 136 | ```text 137 | $ docker-compose build 138 | $ docker-compose up -d 139 | ``` 140 | 141 | 142 | 143 | 144 | 145 | -------------------------------------------------------------------------------- /13-docker-machine.md: -------------------------------------------------------------------------------- 1 | # Docker Machine 2 | 3 | ## Working With Docker Machine 4 | 5 | Docker Machine သည် Command Line Tool တစ်ခုဖြစ်ပြီး Dockerized Hosts များကို Provisioning and Managing ပြုလုပ်ရန် ဖြစ်ပါတယ်။ အရှင်းဆုံးပြောရရင် Virtual Machine များကို Docker Engine နဲ့ Local or Remote System အတွက် Install ပြုလုပ်နိုင်ပါတယ်။ Docker Machine တွေဟာ Virtualbox, Vmware, Digital Ocean နှင့် Amazone AWS စသည့် Platform တွေပေါ်မှာလည်း ကောင်းစွာအလုပ်လုပ်နိုင်ပါတယ်။ 6 | 7 | ### Install Docker Machine 8 | 9 | Docker Machine ကို install ပြုလုပ်နိုင်တဲ့နည်းတွေကို အောက်မှာဖော်ပြထားပါတယ်။ ပြီးတော့ [https://github.com/docker/machine/releases](https://github.com/docker/machine/releases) တွင်လည်း နောက်ဆုံးထွက် Docker Machine Version ကို စစ်ဆေးရွေးချယ်နိုင်ပါတယ်။ 10 | 11 | ```text 12 | ** Please Note: : " https://github.com/docker/machine/releases " 13 | ``` 14 | 15 | #### For Linux Systems: 16 | 17 | ```text 18 | $ curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine 19 | 20 | $ chmod +x /usr/local/bin/docker-machine 21 | ``` 22 | 23 | စသည့် Command ကို အသုံးပြုပြီး Docker Machine ကို Download ပြုလုပ်ပြီး Install ပြုလုပ်နိုင်ပါတယ်။ 24 | 25 | #### For OSX Systems: 26 | 27 | ```text 28 | $ curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine 29 | 30 | $ chmod +x /usr/local/bin/docker-machine 31 | ``` 32 | 33 | စသည့် Command များကို အသုံးပြုပြီး download and install ပြုလုပ်နိုင်ပါတယ်။ 34 | 35 | #### For Windows Systmes with Git Bash: 36 | 37 | Windows 10 နှင့် အထက်တွင်သာ အသုံးပြုရန် အကြံပြုလိုပါတယ်။ 38 | 39 | ```text 40 | $ if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi 41 | 42 | $ curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" 43 | 44 | $ chmod +x "$HOME/bin/docker-machine.exe" 45 | ``` 46 | 47 | စသည့် Command များကို အသုံးပြုပြီး download and install ပြုလုပ်နိုင်တယ်။ 48 | 49 | ### Docker Machine Supported Drivers: 50 | 51 | Docker Machine ဟာဆိုရင် အောက်ဖော်ပြပါ services တွေရဲ့ local system တွေအတွက်သာမဟုတ်ပဲ Cloud System တွေအတွက်ကိုပါ Drivers များကို Provide လုပ်ပေးပါတယ်။ 52 | 53 | အောက်ဖော်ပြပါမည်သည့် hosting Service ကိုမဆို အသုံးပြုပြီး Dockerized hosts များကို launchလုပ်နိုင်ပြီး Docker Machine တစ်ခုတည်းဖြင့် Manage ပြုလုပ်နိုင်ပါတယ်။ 54 | 55 | * Amazon Web Services 56 | * Microsoft Azure 57 | * Digital Ocean 58 | * Exoscale 59 | * Google Compute Engine 60 | * Generic 61 | * 6Microsoft Hyper-V 62 | * OpenStack 63 | * Rackspace 64 | * IBM Softlayer 65 | * Oracle VirtualBox 66 | * VMware vCloud Air 67 | * VMware Fusion 68 | * VMware vSphere 69 | 70 | -------------------------------------------------------------------------------- /14-docker-prune.md: -------------------------------------------------------------------------------- 1 | # Docker Prune 2 | 3 | ## Prune Objects in Docker 4 | 5 | ပုံမှန်ဆို docker ကသူအသုံးမပြုတော့တဲ့ objects ‌တွေကို သူ့ကိုဖျက်ပါလို့မပြောမချင်း မဖျက်ဘဲ ဒီတိုင်းထားထားတတ်ပါတယ်။ ဒီနေရာမှာ objects ဆိုတာ docker နဲ့ဆိုင်တဲ့ images, containers, volumes နဲ့ network တို့ကိုပြောတာပါ။ ဒါကြောင့် သူ့မှာ unused objects တွေကိုဖျက်ပစ်ဖို့အတွက် option တစ်ခုထည့်ပေးထားပါတယ်။ ဒါကတော့ docker prune ဆိုတဲ့ command ပါ။ 6 | 7 | **Syntax:** 8 | 9 | ```bash 10 | $ docker [object] prune [options] 11 | ``` 12 | 13 | ### Prune all unused Objects. 14 | 15 | အောက်က command ကတော့ docker က အသုံးမပြုတော့တဲ့ container, image, volume နဲ့ network တွေကို ဖယ်ရှားပေးပါလိမ့်မယ်။ 16 | 17 | ```bash 18 | $ docker system prune 19 | ``` 20 | 21 | `--‌all option` ကတော့ unused ဖြစ်နေတဲ့ docker နဲ့ပါတ်သတ်တာအကုန်ကိုဆိုလိုတာပါ။ 22 | 23 | ```bash 24 | $ docker system prune --all 25 | ``` 26 | 27 | `--filter` ဆိုတဲ့ option ကတော့ key=value နဲ့တွဲသုံးရပါတယ်။ ဥပမာ အောက်က command က until=24 hours ဆိုတာကလွန်ခဲ့တဲ့ 24 နာရီမတိုင်ခင်က build ခဲ့တဲ့ images တွေ၊ stop ဖြစ်နေတဲ့ containers တွေ ၊ အသုံးမပြုတော့တဲ့ network တွေကိုဖျက်ပစ်မယ်လို့ပြောတာပါ။ 28 | 29 | ```bash 30 | $ docker system prune --filter "until=24h" 31 | ``` 32 | 33 | ### Prune Images 34 | 35 | အောက်က command ကိုတော့ Unused images တွေကိုပဲရွေးဖျက်ချင်တယ်ဆိုရင်သုံးလို့ရပါတယ်။ 36 | 37 | ```bash 38 | $ docker image prune 39 | ``` 40 | 41 | ### Prune containers 42 | 43 | Stop/exited ဖြစ်သွားတဲ့ Containers တွေကိုပဲရွေးဖျက်ချင်ရင်တော့ အောက်က command ကိုသုံးလို့ရပါတယ်။ 44 | 45 | ```bash 46 | $ docker container prune 47 | ``` 48 | 49 | ### Prune Volume 50 | 51 | အသုံးမပြုတော့တဲ့ volumes တွေကိုဖျက်ချင်တဲ့အခါမှာက အောက်ကလိုမျိုး သုံးနိုင်ပါတယ်။ 52 | 53 | ```bash 54 | $ docker volume prune 55 | ``` 56 | 57 | ### Prune Network 58 | 59 | အပေါ်က command တွေလိုပဲ network တွေကိုဖယ်ရှားချင်တဲ့အခါမှာလည်း prune ကိုအသုံးပြုနိုင်ပါတယ်။ 60 | 61 | ```bash 62 | $ docker network prune 63 | ``` 64 | 65 | ### Conclusion 66 | 67 | Yes or No question တွေမပေးဘဲ တန်းဖျက်ချင်တာသေချာတယ်ဆိုရင်တော့ အနောက်ကနေ force option အနေနဲ့ -f ကိုအသုံးပြုပြီးဖျက်နိုင်ပါတယ်။ 68 | 69 | ```bash 70 | $ docker system prune -f 71 | $ dokcer image prune -f 72 | $ docker container prune -f 73 | $ docker network prune -f 74 | $ docker volume prune -f 75 | ``` 76 | 77 | Options တွေကိုအခြေအနေအပေါ်မူတည်ပြီးတော့လည်း ကိုယ့်စိတ်ကြိုက် တွဲသုံးနိုင်ပါတယ်။ 78 | 79 | ```bash 80 | $ docker system prune -a -f 81 | $ dokcer image prune -a -f 82 | $ docker container prune -a -f 83 | $ docker network prune -a -f 84 | $ docker volume prune -a -f 85 | ``` 86 | 87 | Reference from [tecadmin](https://tecadmin.net/tutorial/docker/docker-prune-unused-objects/). 88 | 89 | -------------------------------------------------------------------------------- /15-sponsor.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Content and Translator List 3 | --- 4 | 5 | # Sponsor 6 | 7 | ## Our Hero List 8 | 9 | **Becoming a kindly super hero:** 10 | 11 | waiyanwinhtain 12 | [https://fb.com/waiyanwinhtain2016](https://fb.com/waiyanwinhtain2016) 13 | 14 | khinchanmyaehtun 15 | [https://fb.com/profile.php?id=100010791125505](https://fb.com/profile.php?id=100010791125505) 16 | 17 | pyaephyoaung 18 | [https://fb.com/pyae.aung.7127](https://fb.com/pyae.aung.7127) 19 | 20 | zawyelwin 21 | [https://fb.com/zawye.lwin.9](https://fb.com/zawye.lwin.9) 22 | 23 | thutatun 24 | [https://fb.com/tamoeout.pisi](https://fb.com/tamoeout.pisi) 25 | 26 | kyawkyaw 27 | [https://fb.com/alin.thit.79](https://fb.com/alin.thit.79) 28 | 29 | nyinyisoewin 30 | [https://fb.com/NyiNyiSoeWin.nnsw](https://fb.com/NyiNyiSoeWin.nnsw) 31 | 32 | minthatti 33 | [https://fb.com/thuta.livingunderthesamebluesky](https://fb.com/thuta.livingunderthesamebluesky) 34 | 35 | sanjay 36 | [https://fb.com/sanjay.ttg](https://fb.com/sanjay.ttg) 37 | 38 | ### Original Content from TecAdmin.net 39 | 40 | {% code title="original-article.sh" %} 41 | ```bash 42 | # Special Thank to TecAdmin 43 | lynx https://tecadmin.net/tutorial/docker/ 44 | ``` 45 | {% endcode %} 46 | 47 | ### Relative Content list 48 | 49 | **Ubuntu Wiki - Burmese** 50 | 51 | * [https://ubuntu-mm.net/umw/](https://ubuntu-mm.net/umw/) 52 | * [https://github.com/fossmyanmar/ubuntu-mm-wiki](https://github.com/fossmyanmar/ubuntu-mm-wiki) 53 | 54 | **Docker Study Jams** 55 | 56 | * [http://docker-study-jams.herokuapp.com/](http://docker-study-jams.herokuapp.com/) 57 | * [https://github.com/fossmyanmar/docker-kubernetes](https://github.com/fossmyanmar/docker-kubernetes) 58 | 59 | #### PDF Download 60 | 61 | [https://github.com/fossmyanmar/docker-quick-start/raw/master/latex/Docker\_Quick\_Start.pdf](https://github.com/fossmyanmar/docker-quick-start/raw/master/latex/Docker_Quick_Start.pdf) 62 | 63 | -------------------------------------------------------------------------------- /Docker_Quick_Start.pdf: -------------------------------------------------------------------------------- 1 | ./latex/Docker_Quick_Start.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Docker Quick Start - Burmese 3 | --- 4 | 5 | # Docker Quick Start Intro 6 | 7 | ## Docker Quick Start Intro 8 | 9 | [https://tecadmin.net/tutorial/docker](https://tecadmin.net/tutorial/docker) 10 | 11 | ## Table of contents 12 | 13 | * [Docker Quick Start Intro](./) 14 | * [Docker Intro](01-docker-intro.md) 15 | * [Docker Features](02-docker-features.md) 16 | * [Docker Install](03-docker-install.md) 17 | * [Docker Container](04-docker-container.md) 18 | * [Docker Images](05-docker-images.md) 19 | * [Dockerfile](06-dockerfile.md) 20 | * [Dockerfile Directives](07-docker-directives.md) 21 | * [Docker Port](08-docker-port.md) 22 | * [Docker Networking](09-docker-network.md) 23 | * [Docker Networking Example](10-docker-network-example.md) 24 | * [Docker Machine](13-docker-machine.md) 25 | * [Docker Prune](14-docker-prune.md) 26 | * [Sponsor](15-sponsor.md) 27 | 28 | -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Table of contents 2 | 3 | * [Docker Quick Start Intro](README.md) 4 | * [Docker Intro](01-docker-intro.md) 5 | * [Docker Features](02-docker-features.md) 6 | * [Docker Install](03-docker-install.md) 7 | * [Docker Container](04-docker-container.md) 8 | * [Docker Images](05-docker-images.md) 9 | * [Dockerfile](06-dockerfile.md) 10 | * [Dockerfile Directives](07-docker-directives.md) 11 | * [Docker Port](08-docker-port.md) 12 | * [Docker Networking](09-docker-network.md) 13 | * [Docker Networking Example](10-docker-network-example.md) 14 | * [Docker Compose](11-docker-compose.md) 15 | * [Docker Compose Example](12-docker-compose-example.md) 16 | * [Docker Machine](13-docker-machine.md) 17 | * [Docker Prune](14-docker-prune.md) 18 | * [Sponsor](15-sponsor.md) 19 | 20 | -------------------------------------------------------------------------------- /latex/.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | compile_pdf: 2 | image: moss/xelatex 3 | script: 4 | - xelatex main.tex 5 | artifacts: 6 | paths: 7 | - main.pdf 8 | -------------------------------------------------------------------------------- /latex/Docker_Quick_Start.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/latex/Docker_Quick_Start.pdf -------------------------------------------------------------------------------- /latex/MyanmarKhyay.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/latex/MyanmarKhyay.ttf -------------------------------------------------------------------------------- /latex/PB.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/latex/PB.ttf -------------------------------------------------------------------------------- /latex/PR.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/latex/PR.ttf -------------------------------------------------------------------------------- /latex/body-md.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Content and Translator List 3 | --- 4 | 5 | Docker Intro 6 | ============ 7 | 8 | Docker Intro 9 | ------------ 10 | 11 | Docker ဆိုတာ software container platform တစ်ခုပဲ ဖြစ်ပါတယ်။ Docker 12 | ဟာဆိုရင် application ​တွေ run ဖို့၊ develop ဖို့၊ ship ဖို့ လုပ်ထားတဲ့ 13 | open source platform တစ်ခုဖြစ်ပါတယ်။Docker က သင့်ရဲ့ application 14 | တစ်ခုစီတိုင်း အတွက် သီးသန့် တည်ရှိတဲ့ environment တစ်ခုကို 15 | ဖန်တီး​ပေးမှာဖြစ်ပါတယ်။ 16 | 17 | Docker Engine 18 | ------------- 19 | 20 | Docker Engine ဟာဆိုရင် Docker ရဲ့ core ဖြစ်ပြီး Docker containers 21 | ​တွေကို create ပြုလုပ်​ခြင်း၊ shipping လုပ် ခြင်း၊ run ခြင်း စတာ ​တွေကို 22 | လုပ်​ဆောင်​ပေးပါတယ်။ Docker Engine ​တွေက Client- Server architecture အရ 23 | 24 | - Server daemon process တစ်ခုဟာစဥ်ဆက်မပျက် run ခြင်း 25 | - ကျန်ရှိ​သော API ဟာ daemon ​တွေကို ချိတ်ဆက်ပြီး instruction ​တွေ ကို 26 | daemon ​တွေဆီ ​ပေးပို့ခြင်း 27 | - Command Line Interface (CLI) အဖြစ်​ဆောင်ရွက်ခြင်း စတ​တွေကို 28 | လုပ်​ဆောင်​ပေးပါတယ်။ 29 | 30 | ![](.gitbook/assets/screenshot-129.png) 31 | 32 | \pagebreak 33 | 34 | Docker Features 35 | =============== 36 | 37 | Features of Docker 38 | ------------------ 39 | 40 | ### Docker container 41 | 42 | Docker container တစ်ခုဟာ application တစ်ခု packaging လုပ်ဖို့၊ running 43 | လုပ်ဖို့ သီးသန့် environment တစ်ခု အဖြစ်​ရှိ​တာ 44 | ဖြစ်ပါတယ်။ပိုမွန်​မြန်ဆန်​ကောင်းမွန်တဲ့ computing ကိုရနိုင်ဖို့ Docker 45 | မှာ application တစ်ခုကို side by side ယှဥ်လျက် run နိုင်မှာ ဖြစ်ပါတယ်။ 46 | ပြီး​တော့ Single Host တစ်ခုမှာပဲ တစ်ခုထက်ပိုတဲ့ containers ​တွေကို run 47 | နိုင်ပါ​သေးတယ်။ အဲ့ containers ​တွေကိုပဲ run ထားတဲ့ host က္​နေ တစ်ခြား 48 | host တစ်ခုဆီကို ​ပြောင်း​​ရွှေ့ နိုင်ဦးမှာဖြစ်ပါတယ်။ 49 | 50 | \pagebreak 51 | 52 | Docker Install 53 | ============== 54 | 55 | Docker installation on Ubuntu 56 | ----------------------------- 57 | 58 | **Docker ကို ubuntu OS မှာ install ပြုလုပ်ဖို့ အောက်ပါ command တွေကို 59 | တခုချင်း terminal တွင်ရိုက်ထည့်ပါ။** 60 | 61 | - ပထမဆုံး လက်ရှိ package များကို update ပြုလုပ်ပါမယ်။ 62 | 63 | ``` {.text} 64 | $ sudo apt-get update 65 | ``` 66 | 67 | - ထို့နောက် လိုအပ်တဲ့ package များကို သွင်းပါမယ်။ 68 | 69 | ``` {.text} 70 | $ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 71 | ``` 72 | 73 | - ထို့နောက် Docker repository ကို add လုပ်ပါမယ်။ 74 | 75 | ``` {.text} 76 | $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 77 | ``` 78 | 79 | ``` {.text} 80 | $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 81 | ``` 82 | 83 | - နောက်ဆုံးအဆင့်အနေနဲ့ update ပြုလုပ်ပြီး docker ကို သွင်းနိုင်ပါပြီ။ 84 | 85 | ``` {.text} 86 | $ sudo apt-get update 87 | ``` 88 | 89 | ``` {.text} 90 | $ sudo apt-get install docker-ce docker-ce-cli containerd.io 91 | ``` 92 | 93 | - Docker service run နေကြောင်းကို သိရှိနိုင်ရန် ယခုကဲ့သို ရိုက်ထည့်ပါ။ 94 | 95 | ``` {.text} 96 | $ sudo systemctl status docker 97 | ``` 98 | 99 | `Active: active` ဖြစ်နေပါက docker service run နေကြောင်း သိရှိနိုင်ပါတယ်။ 100 | 101 | Docker daemon service နှင့်အတူ docker cli ကိုပါ တပါးတည်း ထည့်သွင်းထားတဲ့ 102 | အတွက် docker cli ကိုလဲ အသုံးပြုနိုင်မှာဖြစ်ပါတယ်။Docker command များ ကို 103 | ယခုလို ကြည့်ရှူနိုင်ပါတယ်။ 104 | 105 | ``` {.text} 106 | $ docker 107 | ``` 108 | 109 | ``` {.text} 110 | Output: 111 | 112 | 113 | Management Commands: 114 | builder Manage builds 115 | config Manage Docker configs 116 | container Manage containers 117 | context Manage contexts 118 | engine Manage the docker engine 119 | image Manage images 120 | network Manage networks 121 | node Manage Swarm nodes 122 | plugin Manage plugins 123 | secret Manage Docker secrets 124 | service Manage services 125 | stack Manage Docker stacks 126 | swarm Manage Swarm 127 | system Manage Docker 128 | trust Manage trust on Docker images 129 | volume Manage volumes 130 | 131 | Commands: 132 | 133 | attach Attach local standard input, output, and error streams to a running container 134 | build Build an image from a Dockerfile 135 | commit Create a new image from a container's changes 136 | cp Copy files/folders between a container and the local filesystem 137 | create Create a new container 138 | diff Inspect changes to files or directories on a container's filesystem 139 | events Get real time events from the server 140 | exec Run a command in a running container 141 | export Export a container's filesystem as a tar archive 142 | history Show the history of an image 143 | images List images 144 | import Import the contents from a tarball to create a filesystem image 145 | info Display system-wide information 146 | inspect Return low-level information on Docker objects 147 | kill Kill one or more running containers 148 | load Load an image from a tar archive or STDIN 149 | login Log in to a Docker registry 150 | logout Log out from a Docker registry 151 | logs Fetch the logs of a container 152 | pause Pause all processes within one or more containers 153 | port List port mappings or a specific mapping for the container 154 | ps List containers 155 | pull Pull an image or a repository from a registry 156 | push Push an image or a repository to a registry 157 | rename Rename a container 158 | restart Restart one or more containers 159 | rm Remove one or more containers 160 | rmi Remove one or more images 161 | run Run a command in a new container 162 | save Save one or more images to a tar archive (streamed to STDOUT by default) 163 | search Search the Docker Hub for images 164 | start Start one or more stopped containers 165 | stats Display a live stream of container(s) resource usage statistics 166 | stop Stop one or more running containers 167 | tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE 168 | top Display the running processes of a container 169 | unpause Unpause all processes within one or more containers 170 | update Update configuration of one or more containers 171 | version Show the Docker version information 172 | wait Block until one or more containers stop, then print their exit codes 173 | ``` 174 | 175 | ဒါပေမယ့် docker ကို ထည့်သွင်းလိုက်ချိန်မှာ root user အနေနဲ့သာ docker နဲ့ 176 | သတ်ဆိုင်တဲ့ command တွေကို ရိုက်သွင်းနိုင်မှာဖြစ်ပါတယ်။ မိမိက docker နဲ့ 177 | command တခုခုကို run မယ်ဆိုရင် sudo command နဲ့သာ အသုံးပြုနိုင်မှာ 178 | ဖြစ်ပါတယ်။ ဥပမာ.. 179 | 180 | ``` {.text} 181 | $ sudo docker image ls 182 | ``` 183 | 184 | Docker ကို ထည့်သွင်း ချိန် docker ဆိုတဲ့ linux user group တခုကို docker 185 | က create လုပ်သွားမှာဖြစ်ပါတယ်။ တကယ်လို့ မိမိက sudo ကို အမြဲ 186 | မထည့်ပေးစေချင်ဘူးဆိုရင် docker group ထဲကို လက်ရှိ user ကို add 187 | ပေးလိုက်ခြင်းဖြစ် sudo command ကို အမြဲရိုက်ထည့်ပေးစရာမလိုပဲ 188 | အသုံးပြုနိုင်ပါတယ်။ 189 | 190 | ``` {.text} 191 | $ sudo usermod -aG docker ${USER} 192 | ``` 193 | 194 | ထို့နောက် docker service ကို restart ချပါ။ 195 | 196 | ``` {.text} 197 | $ sudo systemctl restart docker 198 | ``` 199 | 200 | Docker service active ဖြစ်လာပါက docker ကို စတင် 201 | အသုံးပြုနိုင်မှာဖြစ်ပါတယ်။ 202 | 203 | \pagebreak 204 | 205 | Docker Container 206 | ================ 207 | 208 | Docker Container 209 | ---------------- 210 | 211 | Docker container ဆိုတာ docker image တစ်ခုကို run လိုက်တဲ့အခါမှာ 212 | တည်ဆောက်လိုက်တဲ့ instance လေးတစ်ခုပဲ ဖြစ်ပါတယ်။ Container တစ်လုံးဟာ 213 | application တွေကို အလုပ်လုပ်စေဖို့အတွက်လိုအပ်တဲ့ libraries တွေနဲ့ 214 | setting တွေကိုသာ ပေါင်းစပ်ဖွဲ့စည်းထားတာ ဖြစ်ပါတယ်။ အဲ့ဒါဟာ Application 215 | တစ်ခုအတွက် အရမ်းကိုပေ့ါးပါးပြီး အလွယ်တစ်ကူရွှေ့ပြောင်းလို့ရ လောက်အောင် 216 | သေးငယ်တဲ့ environment တစ်ခုပဲ ဖြစ်ပါတယ်။ 217 | 218 | Run Docker Container 219 | -------------------- 220 | 221 | System ပေါ်မှာ Docker Container တစ်လုံးကို စတင်မောင်းနှင်ရန်အတွက် docker 222 | run command ကို အသုံးပြုပါတယ်။ ဥပမာအားဖြင့် - အောက်ပါ command 223 | ကိုရိုက်လျှင် hello-world image ကိုအသုံးပြု၍ docker container တစ်လုံးကို 224 | တည်ဆောက်ပါလိမ့်မယ်။ 225 | 226 | ``` {.text} 227 | $ docker run hello-world 228 | ``` 229 | 230 | အခု .. CentOS operating system ကို အသုံးပြုပြီးတေ့ာ အလုပ်လုပ်နေမယ့် 231 | docker container တစ်လုံးကို တည်ဆောက်ပါမယ်။ -it ဆိုတဲ့ option က 232 | pseudo-TTY အသုံးပြုလို့ရတဲ့ interactive session တစ်ခုကို ပေးပါတယ်။ 233 | အဲ့ဒီကနေ container shell ကို ချက်ချင်းသုံးလို့ရပါလိမ့်မယ်။ 234 | 235 | ``` {.text} 236 | $ docker run -it centos 237 | ``` 238 | 239 | ![](.gitbook/assets/2_run_ti_centos.png) 240 | 241 | ကျွန်တော်တို့ customized လုပ်ထားတဲ့ ssh access enabled လုပ်ထားတဲ့ Ubuntu 242 | docker image ကိုလည်း [docker hub 243 | repository](https://hub.docker.com/r/tecadmin/ubuntu-ssh/) မှာ 244 | စမ်းကြည့်လို့ရပါတယ်။ 245 | 246 | ``` {.text} 247 | $ sudo docker run -d -p 2222:22 tecadmin/ubuntu-ssh:16.04 248 | ``` 249 | 250 | List Docker Containers 251 | ---------------------- 252 | 253 | လက်ရှိ System ပေါ်မှာ အလုပ်လုပ်နေတဲ့ containers တွေအားလုံးကို list 254 | ထုတ်ကြည့်ချင်ရင် docker ps command ကိုသုံးပါတယ်။ အဲဒီ command က 255 | ရပ်ထားတဲ့ container တွေကိုတော့ list ထုတ်ပြမှာ မဟုတ်ပါဘူး။ အဲ့ဒါက 256 | Container ID, Container နာမည် နဲ့ container နဲ့ပတ်သက်တဲ့ 257 | အခြားအသုံးဝင်တဲ့ information တွေကိုပါ ပြပေးမှာဖြစ်ပါတယ်။ 258 | 259 | ``` {.text} 260 | $ docker ps 261 | ``` 262 | 263 | အပေါ်က command မှာ -a ဆိုတဲ့ option ကိုပါ ထည့်သုံးမယ်ဆိုရင်တော့ 264 | ရပ်ထားတဲ့ container တွေကိုပါ list ထုတ်ပြပေးမှာဖြစ်ပါတယ်။ 265 | 266 | ``` {.text} 267 | $ docker ps -a 268 | ``` 269 | 270 | ![](.gitbook/assets/4a_ps-large-resolution.png) 271 | 272 | Find all Details of Container 273 | ----------------------------- 274 | 275 | Docker container တစ်လုံးနဲ့ပတ်သက်တဲ့ အသေးစိတ်အချက်အလက်အားလုံးကို 276 | ရှာချင်တဲ့အခါမှာတော့ docker inspect command ကို အသုံးပြုပါတယ်။ Container 277 | ရဲ့ အသေးစိတ်အချက်အလက်တွေကို သိချင်တယ်ဆိုရင်တော့ ကိုယ်သိချင်တဲ့ container 278 | ရဲ့ container ID သို့မဟုတ် container နာမည်ကို 279 | တိတိကျကျထည့်ပေးရမှာဖြစ်ပါတယ်။ 280 | 281 | ``` {.text} 282 | $ docker inspect cc5d74cf8250 283 | ``` 284 | 285 | Delete Docker Container 286 | ----------------------- 287 | 288 | System ထဲမှာရှိနေတဲ့ docker container ကို ဖျက်ချင်တယ်ဆိုရင်တော့ docker 289 | rm command ကို အသုံးပြုပါတယ်။ Container ကိုဖျက်ချင်တယ်ဆိုရင်တော့ 290 | ကိုယ်ဖျက်ချင်တဲ့ container ရဲ့ container ID သို့မဟုတ် container နာမည်ကို 291 | တိတိကျကျထည့်ပေးရမှာဖြစ်ပါတယ်။ 292 | 293 | ``` {.text} 294 | $ docker stop cc5d74cf8250 295 | $ docker rm cc5d74cf8250 296 | ``` 297 | 298 | \pagebreak 299 | 300 | Docker Images 301 | ============= 302 | 303 | Docker Images 304 | ------------- 305 | 306 | Docker image ဆိုတာကတော့ container တစ်ခုမှာ လိုချင်တဲ့ application တွေ 307 | ကိုအသုံးပြုလို့ရအောင်ပြုလုပ်ထားတဲ့ file တစ်ခုပါပဲ။ Docker image တွေဟာ 308 | ပြုလုပ်ပြီးတဲ့အချိန်ကစပြီး ဖျက်လိုက်တဲ့အချိန်အထိ 309 | အပြောင်းအလဲမရှိနိုင်ပါဘူး။ ထပ်ပြီးပြင်ဆင်လို့လည်းမရနိုင်ပါဘူး။ ပြီးတော့ 310 | image တွေဟာ တစ်ခြားသူတွေနဲ့လည်း မျှဝေအသုံးပြုနိုင်ပါသေးတယ်။ 311 | ဆိုလိုတာကတော့ တစ်ယောက်ပြုလုပ်ထားတဲ့ image ကိုသုံးပြီး နောက်တစ်ယောက်က 312 | ထပ်တူကျတဲ့ container တစ်ခုကို အသုံးပြုနိုင်တာမျိုးပါ။ 313 | 314 | အောက်မှာတော့ docker images တွေကိုအသုံးပြုဖို့အတွက် အခြေခံကျတဲ့ command 315 | တွေကို အကျဥ်းဖော်ပြပေးထားပါတယ်။ 316 | 317 | List Docker Images 318 | ------------------ 319 | 320 | docker images ဆိုတဲ့ command နဲ့ ကိုယ့်စနစ်ထဲက အသုံးပြုလို့ရတဲ့ image 321 | တွေကိုစစ်ကြည့်လို့ရနိုင်ပါတယ်။ 322 | 323 | ``` {.text} 324 | $ docker images 325 | ``` 326 | 327 | ![](.gitbook/assets/1_ls.png) 328 | 329 | Search Docker Images 330 | -------------------- 331 | 332 | docker search ဆိုတဲ့ command ကတော့ [docker hub](https://hub.docker.com/) 333 | ကနေ လိုချင်တဲ့ image ကိုရှာတဲ့အခါသုံးပါတယ်။ ဥပမာ WordPress အတွက် images 334 | တွေကိုရှာမယ်ဆိုရင် - 335 | 336 | ``` {.text} 337 | $ docker search wordpress 338 | ``` 339 | 340 | ![](.gitbook/assets/2_search-large-resolution.png) 341 | 342 | Download Docker Images 343 | ---------------------- 344 | 345 | လိုချင်တဲ့ image ကိုရှာတွေ့ပြီဆိုရင်တော့ docker pull ဆိုတဲ့ command နဲ့ 346 | ကိုယ့်စက်ထဲကို download ဆွဲနိုင်ပါတယ်။ ဥပမာ Docker hub ကနေ WordPress 347 | အတွက်နောက်ဆုံးversion ဖြစ်တဲ့image ကို download ချမယ်ဆိုရင် 348 | 349 | ``` {.text} 350 | $ docker pull wordpress 351 | ``` 352 | 353 | ![](.gitbook/assets/3_pull_wordpress.png) 354 | 355 | Delete Docker Images 356 | -------------------- 357 | 358 | မလိုအပ်တော့တဲ့ image တွေကို ဖျက်ပစ်ဖို့အတွက်ကတော့ docker rmi ဆိုတဲ့ 359 | command ကိုသုံးပါတယ်။ ဥပမာ - 360 | 361 | ``` {.text} 362 | $ docker rmi wordpress 363 | ``` 364 | 365 | ![](.gitbook/assets/4_rmi.png) 366 | 367 | \pagebreak 368 | 369 | Dockerfile 370 | ========== 371 | 372 | Working with Dockerfile 373 | ----------------------- 374 | 375 | Dockerfile ဆိုတာ နာမည်​အတိုင်းပဲ file တစ်​ခုပါပဲ။ သူ့ဆီမှာ တိကျတဲ့ 376 | instructions ​တွေပါမယ်​ အဲ့ instructions ​တွေနဲ့ ကိုယ်​လိုချင်​တဲ့ 377 | customized images ​တွေကို​ build လုပ်​ပါတယ်​ Default အ​နေနဲ့​တော့ 378 | နာမည်​ကို Dockerfile လို့ တ​ဝေမသိမ်း​ပေးရပါမယ်​။ 379 | 380 | Build Image with Dockerfile 381 | --------------------------- 382 | 383 | ``` {.text} 384 | $ docker build -t image_name . 385 | ``` 386 | 387 | ![](.gitbook/assets/1_docker_build.png) 388 | 389 | ဒါက​တော့ ​ရေးပြီးသား dockerfile နဲ့ image build လုပ်​တဲ့ command ပါ။ 390 | `-t`ဆိုတာ tag name ကိုကိုယ်​စားပြုပါတယ်​ သူ့အ​နောက်​မှာ image name 391 | လိုက်​ပါတယ်​ ​သေချာကြည်​့ပါ command အဆုံးမှာ `( . )` ပါပါတယ်​ သူက 392 | current working directory မှာ ရှိတဲ့ Dockerfile ကိုယူပြီးသုံးမယ်​လို့ 393 | ဆိုလိုတာပါ အကယ်​၍ ခင်​​ဗျားမှာသာ Dockerfile တစ်​ခုမက ရှိ​နေရင်​ 394 | သို့မဟုတ်​ Dockerfile မှာ နာမည်​အစ D ကသာ small letter (d) 395 | ဖြစ်​​နေခဲ့မယ်​ဆိုရင်​ error တက်​နိုင်​ပါတယ်​ 396 | 397 | ``` {.text} 398 | $ docker build -t image_name -f /path/to/Dockerfile 399 | ``` 400 | 401 | ဒီ command ကလဲ image build တဲ့ command ပါပဲ။ ထူးခြားတာက​တော့ `-f` flag 402 | ကိုသုံးထားတာပါ။ Current working directory ထဲကမဟုတ်​ပဲ ခင်​​ဗျားရဲ့ file 403 | system ထဲက တစ်​​နေရာရာမှာ ရှိတဲ့ Dockerfile ကို ​ခေါ်သုံးချင်​ရင်​ ဒီလို 404 | သုံးရပါမယ်​။ 405 | 406 | Create a Dockerfile 407 | ------------------- 408 | 409 | ဒီ​နေရာမှာ အစမ်​း​အ​နေနဲ့ Github ​ပေါ်က sample project ကိုယူသုံးပါ့မယ်​ 410 | 411 | ``` {.text} 412 | $ git clone https://github.com/tecrahul/dockerfile 413 | $ cd dockerfile 414 | $ docker build -t apacheimage . 415 | ``` 416 | 417 | ![](.gitbook/assets/3c_apacheimage_build.png) 418 | 419 | အ​ပေါ်က command သုံး​ကြောင်းပြီးရင်​ image တစ်​ခု​ဆောက်​ပြီးပါပြီ 420 | ​ဆောက်​ပြီးသား images ​တွေကို docker images ဆိုတဲ့ command 421 | နဲ့​ခေါ်ကြည့်နိုင်​ပါတယ်​။ 422 | 423 | Launch Container with Image 424 | --------------------------- 425 | 426 | ``` {.text} 427 | $ docker run -it -p 8080:80 apacheimage 428 | ``` 429 | 430 | ဒီcommand နဲ့ ​ဆောက်​ပြီးသား image ကိုသုံးပြီး container 431 | တစ်​ခုတည်​​ဆောက်​ပါတယ်​။ `i`က interactive နဲ့ `t`က tty ကို 432 | ကိုယ်​စားပြုပါတယ်​။ `-p`ဆိုတာက​တော့ port သတ်​မှတ်​​ပေးတာပါ၊ ဒီ 433 | ဥပမာမှာဆို ကိုယ့် host system ရဲ့ port 8080 နဲ့ container ရဲ့ port 80ကို 434 | ချိတ်​​ပေးဖို့ သုံးထားတာကို ​တွေ့ရမှာပါ။ အ​ရှေ့က ကိုယ်​့ host systemရဲ့ 435 | port ကြားမှာ full column `( : )` နဲ့ အ​နောက်​က container ရဲ့ port 436 | ကို​ရေးရမှာပါ။ 437 | 438 | \pagebreak 439 | 440 | Dockerfile Directives 441 | ===================== 442 | 443 | What are Dockerfile Directives 444 | ------------------------------ 445 | 446 | အ​ရှေ့မှာ Dockerfile ကိုသုံးပြီး image ​ဆောက်​ အဲ့ image 447 | ကိုသုံးပြီး​တော့ container ​တွေ ​ဆောက်​တာကို မြင်​ခဲ့ရပြီးပါပြီ။ 448 | 449 | အခု​ပြောမှာက​တော့ အဲ့ Dockerfile ကို ဘယ်​လို​ရေးမလဲဆိုတာပါ။ 450 | 451 | Dockerfile ကို Docker directive ​တွေနဲ့​ရေးရတာပါ။ 452 | 453 | ### FROM 454 | 455 | ဒီ FROM ဆိုတဲ့ directive ကို base image ယူသုံးဖို့အတွက်​ သုံးတာပါ။ ဥပမာ 456 | ခင်​​ဗျားက ubuntu command ​တွေ သုံးလို့ရမဲ့ container 457 | တစ်​လုံးလိုချင်​တာဆိုရင်​ `FROM ubuntu` ဆိုပြီးသုံးရမှာပါ။ 458 | 459 | Default အ​နေနဲ့ဆို docker store မှာရှိတဲ့ ubuntu version ​တွေထဲကမှ 460 | latest version ကို ယူသုံးသွားမှာပါ အဲ့လိုမှမဟုတ်​ဘူး latest 461 | လိုချင်​တာမဟုတ်​ဘူး ကိုယ်​လိုချင်​တာ သက်​သက်​ဆို အခုလို​ရေးလို့ရပါတယ်​ 462 | `FROM tecadmin/ubuntu-ssh:16.04` 463 | 464 | ### LABEL 465 | 466 | ဒါက​တော့ နာမည်​အတိုင်​းပဲ label တပ်​တာပါ။ 467 | `Maintainer addres​s,vendor name,image version,release date` 468 | အစရှိသဖြင့်​ပေါ့။ ဥပမာ 469 | 470 | ``` {.text} 471 | LABEL maintainer="rahul@tecadmin.net" 472 | LABEL vendor="TecAdmin" 473 | LABEL com.example.version="0.01" 474 | ``` 475 | 476 | လို့ ရိုက်​လိုက်​ရုံပါပဲ။ အကြံပြု လိုတာက​တော့ တစ်​ line ထဲကို space ခံ 477 | single line ခံပြီး ​ရေးတာကိုပါ။ Image build တဲ့အချိန်​မှာ 478 | စာ​ကြောင်းတစ်​​ကြောင်းကို layer တစ်​ခု ​ဆောက်​တာပါ Layer နည်း​လေ 479 | မြန်​​လေပါပဲ။ 480 | 481 | ``` {.text} 482 | LABEL maintainer="rahul@tecadmin.net" vendor="TecAdmin" \ 483 | com.example.version="0.01" 484 | ``` 485 | 486 | ### RUN 487 | 488 | RUN ကို​တော့ လိုအပ်​တဲ့ command​တွေ run ဖို့သုံးပါတယ်။ ဥပမာ 489 | လိုအပ်တဲ့​package​တွေ သွင်းဖို့လိုတဲ့အခါမျိုး​ပေါ့။ 490 | 491 | ``` {.text} 492 | RUN apt-get update 493 | RUN apt-get install -y apache2 automake build-essential curl ​​ 494 | ``` 495 | 496 | ဒီ​နေရာမှာလဲ အ​ပေါ်ကလို တစ်​​ကြောင်းထဲဖြစ်​​အောင်​ ​ရေးသင့်ပါတယ်​။ Layer 497 | နည်း​လေ​ကောင်း​လေပါ။ 498 | 499 | ``` {.text} 500 | RUN apt-get update && apt-get install -y \ 501 | automake \ 502 | build-essential \ 503 | curl 504 | ``` 505 | 506 | ### COPY 507 | 508 | ဒါကို​တော့ ကိုယ့်စက်​ထဲမှာရှိတဲ့ files ​တွေ directories ​တွေကို 509 | ​ဆောက်​မယ့် image ​ပေါ်copy ကူးချင်​ရင်​ သုံးပါတယ်။​ 510 | 511 | ``` {.text} 512 | COPY html/* /var/www/html/ 513 | COPY *.conf /etc/apache2/sites-available/ 514 | ``` 515 | 516 | ပထမ command ရိုက်​လိုက်​ရင်​ host ရဲ့ html directory ​အောက်​က file 517 | အကုန်​ကို image ရဲ့ /var/www/html/ ​အောက်​ကို copy ကူသွားမှာပါ။ 518 | 519 | ဒုတိယ command က​တော့ host ရဲ့ .conf extension file အားလုံးကို image ရဲ့ 520 | /etc/apache2/sites-available/ ​အောက်​ကို​ပေါ့။ 521 | 522 | ### WORKDIR 523 | 524 | ဒိ directive ကို​တော့ dockerfile ရဲ့အခြား​သော directives ​တွေဖြစ်​တဲ့ 525 | `RUN,CMD,ENTRYPOINT,COPY,ADD` ​တွေရဲ့ working directory 526 | သတ်​မှတ်​​ပေးဖို့သုံးပါတယ်​ 527 | 528 | ``` {.text} 529 | WORKDIR /opt 530 | ``` 531 | 532 | ### CMD 533 | 534 | CMD directive ကို​တော့ image မှာပါတဲ့ service,software ​တွေကို container 535 | launch လုပ်​​တာနဲ့ run ဖို့သုံးပါတယ်။​ သူ့ရဲ့ syntax က​တော့ 536 | 537 | ``` {.text} 538 | CMD ["executable","param1","param2"] 539 | CMD ["executable","param1","param2"] 540 | ``` 541 | 542 | အကယ်​၍ခင်​​ဗျားက apache service ကို runချင်​တယ်​ဆိုပါ​တော့ 543 | 544 | ``` {.text} 545 | CMD ["apachectl", "-D", "FOREGROUND" ] 546 | ``` 547 | 548 | ### EXPOSE 549 | 550 | ဒါက container ရဲ့ port ကိုညွှန်းဆိုမဲ့ directive ပါ။ အ​ပေါ်မှာ​တွေခဲ့တဲ့ 551 | docker run -it -p နဲ့ port ချိတ်​တာမှာ ဒီက ညွှန်းဆိုထားတဲ့ port ​တွေနဲ့ 552 | ချိတ်​​ပေးရပါမယ်​။ 553 | 554 | ``` {.text} 555 | EXPOSE 80 556 | EXPOSE 443 557 | ``` 558 | 559 | ### ENV 560 | 561 | ENV directive ကို​တော့ environment variable သတ်​မှတ်​​ပေးချင်​ရင်​ 562 | သုံးတာပါ 563 | 564 | ``` {.text} 565 | ENV PATH=$PATH:/usr/local/psgql/bin/ \ 566 | PG_MAJOR=9.6.0 567 | ``` 568 | 569 | ### VOLUME 570 | 571 | ​နောက်​ဆုံး အ​နေနဲ့​တော့ VOLUME directive ပါ။ သူ့ကို​တော့ mount point 572 | create ဖို့ သုံးပါတယ်​။ သိထားဖို့က သူဟာ externally mounted volumes 573 | ပဲဖြစ်​ပါတယ်​။ 574 | 575 | ``` {.text} 576 | VOLUME ["/data"] 577 | ``` 578 | 579 | \pagebreak 580 | 581 | Docker Port 582 | =========== 583 | 584 | Manage Ports in Docker 585 | ---------------------- 586 | 587 | Docker containers တွေထဲမှာဆိုရင် servicesတွေက သီးခြား port 588 | တစ်ခုစီပေါ်မှာ run လေ့ရှိပါတယ်။ port တစ်ခုပေါ်မှာ run နေတယ် containerရဲ့ 589 | services ‌တွေကို အသုံးပြုချင်တယ်ဆိုရင် container ရဲ့ port ကို Docker 590 | host ရဲ့ port တစ်တစ်ခုခုနဲ့ bindပေးရပါတယ်။ 591 | 592 | ### ဥပမာ ၁ 593 | 594 | အောက်‌ကပုံကိုကြည့်ပါ။ Docker host ထဲမှာ container နှစ်လုံး run နေတာကို 595 | တွေ့ရပါလိမ့်မယ်။ ပထမတစ်ခုကတော့ website တွေ runနေတဲ့ Apache container 596 | ဖြစ်ပြီးတော့ ဒုတိယတစ်ခုကတော့ MySQL container ဖြစ်ပါတယ်။ 597 | 598 | ![](.gitbook/assets/screenshot-132.png) 599 | 600 | အခုကျွန်တော်တို့ port 80 Apache container ပေါမှာ run နေတယ် website 601 | ကိုဝင်ရောက်ကြည့်ရှုဖို့လိုအပ်နေပါတယ်။ အဲတော့ ကျွန်တောတို့ Apache 602 | container port 80 ကို Docker host port 8080 နဲ့ bind လိုက်ကြရအောင်။ 603 | Docker host port 80 နဲ့လဲ bind လို့ရပါတယ်။ 604 | 605 | ဒုတိယ container port 3306 ပေါ်မှာ MySQL run နေပါတယ်။ Host machine ကနဲ့ 606 | MySQL ကို အခြားနည်းလမ်းတွေနဲ့ access လုပ်လို့ရပါတယ်။ 607 | ဒါပေမယ့်ဒီသင်ခန်းစာအတွက် MySQL container port 3306 ကို docker host port 608 | 6603 နဲ့ကျွန်တော် bindလိုက်ပါတယ်။ အခုကျွန်တော်တို့ Host machine ရဲ့ port 609 | 6603 ကိုသုံးပြီး MySQL container ကိုတိုက်ရိုက်ဆက်သွယ်နိုင်ပါတယ်။ 610 | 611 | အောက်က command ကတော့ host system port နဲ့ container port ကို bind ပေးမယ် 612 | command ဖြစ်ပါတယ်။ 613 | 614 | ``` {.bash} 615 | $ docker run -it -p 8080:80 apache_image 616 | $ docker run -it -p 6603:3066 mysql_image 617 | ``` 618 | 619 | ### ဥပမာ ၂ 620 | 621 | ဒီဥပမာမှာတော့ GitHub ပေါ်မှာရှိတယ် ကျွန်တော်တို့ရဲ နမူနာ project 622 | ကိုသုံးရမှာဖြစ်ပါတယ်။ အောက်က command ကိုသုံးပြီးတော့ repository ကို 623 | clone လိုက်ပါ။ 624 | 625 | ``` {.bash} 626 | $ git clone https://github.com/tecrahul/dockerfile 627 | $ cd dockerfile 628 | ``` 629 | 630 | အခု apacheimage ဆိုတဲ့အမည်နဲ့ docker image ကို build လိုက်ပါ။ 631 | 632 | ``` {.bash} 633 | $ docker build -t apacheimage . 634 | ``` 635 | 636 | အခု Docker run command ကိုသုံးပြီး‌တော့ containerကို runလိုက်ပါ။ 637 | container port 80 ပေါ်မှာ Apache service run သွားပါလိမ့်မယ်။ host system 638 | port 8080 ကို container port 80 နှင့် bind ဖြစ်ဖို့ `-p 8080: 80` 639 | ကိုသတ်မှတ်ရပါမယ်။ 640 | 641 | ``` {.bash} 642 | $ docker run -it -p 8080:80 apacheimage 643 | ``` 644 | 645 | အခု Web browser ထဲမှာ host machine ip နဲ့ port 8080 သုံးပြီး access 646 | လုပ်မယ်ဆိုလိုရှိရင် အောက်မှာပြထားတယ်ပုံအတိုင်း container ရဲ့ Apache 647 | service ပေါ်မှာ run နေတယ် web page တစ်မျက်မှာပေါ်လာပါလိမ့်မယ်။ 648 | ကျွန်တော့်ရဲ host machine ip ကတော့ 192.168.1.237 ဖြစ်ပါတယ်။ 649 | 650 | ![](.gitbook/assets/docker_file_and_docker_port.png) 651 | 652 | ### ဥပမာများ 653 | 654 | ကျွန်တော်တို့ container တစ်ခုတည်းနဲ့ port များစွာကို bind နိုင်ပါတယ်။ 655 | ဒါပေမဲ့ image build မလုပ်ခင် port အားလုံးကို dockerfile ထဲမှာ `EXPOSE` 656 | လုပ်ထားရပါမယ်။ 657 | 658 | ``` {.bash} 659 | $ docker run -it -p 8080:80,8081:443 image_name 660 | ``` 661 | 662 | တစ်ကယ်လို့ host machine ရဲ့ interface တစ်ခုခုနဲ့ bind 663 | ချင်တယ်ဆိုလို့ရှိရင် အောက်ကအတိုင်း IP သက်မှတ်ပေးလိုက်လို့ရပါတယ်။ အောက်က 664 | ဉပမာအရ port 8080 နဲ့ 8081 ကို 127.0.0.1 IP နဲ့သာ access လုပ်လို့ရပါတယ်။ 665 | 666 | ``` {.bash} 667 | $ docker run -it -p 127.0.0.1:8080:80,127.0.0.1:8081:443 image_name 668 | $ docker run -it -p 192.168.1.111:8080:80,92.168.1.111:8081:443 image_name 669 | ``` 670 | 671 | \pagebreak 672 | 673 | Docker Networking 674 | ================= 675 | 676 | Docker Networking 677 | ----------------- 678 | 679 | Docker မှာ Network တွေကို docker containers နှင့် ဆက်သွယ်ဖို့အတွက် 680 | create နဲ့ manage လုပ်ဆောင်ချက်တွေ ကို ထောက်ပံ့ပေးထားပါတယ်။ **docker 681 | network command** ကို အသုံးပြုပြီးတော့ Docker network ကို manage 682 | လုပ်လို့ရပါတယ်။ 683 | 684 | **Syntax:** 685 | 686 | ``` {.text} 687 | $ docker network [options] 688 | ``` 689 | 690 | အောက်ပါ Tutorial ကို လေ့လာပြီး Docker network ကို create , list နဲ့ 691 | manage စတဲ့ features တွေကို လုပ်ဆောင်လို့ရပါတယ်။ 692 | 693 | Docker Networks များ ကို List လုပ်ခြင်း။ 694 | ---------------------------------------- 695 | 696 | `ls` option ကို အသုံးပြုပြီး docker host ပေါ်မှာ ရှိတဲ့ docker network 697 | တွေ ကို List လုပ်လို့ရပါတယ်။ 698 | 699 | ``` {.text} 700 | $ docker network ls 701 | ``` 702 | 703 | Docker Network တခု Create လုပ်ခြင်း။ 704 | ------------------------------------ 705 | 706 | Network အမျိုးအစား အမျိုးမျိုးကို Docker မှ ထောက်ပံ့ပေးထားပါတယ်။ သင့်ရဲ့ 707 | system ပေါ်မှာ a bridge Network တခုကို အောက်ပါ command အသုံးပြုပြီး 708 | create လို့ရပါတယ်။ 709 | 710 | **Syntax:** 711 | 712 | ``` {.text} 713 | $ docker network create -d [network_type] [network_name] 714 | ``` 715 | 716 | **Example:** 717 | 718 | ``` {.text} 719 | $ docker network create -d bridge my-bridge-network 720 | ``` 721 | 722 | Container ကို Network ချိတ်ခြင်း။ 723 | --------------------------------- 724 | 725 | Container နာမည် (သို့မဟုတ်) Container ID ကို အသုံးပြုပြီး မည်သည့် 726 | container ကိုမဆို ရှိပြီးသား docker network နဲ့ ချိတ်ဆက်နိုင်ပါတယ်။ 727 | Container တစ်ခုကို Network နဲ့ တစ်ချိန် ချိတ်ဆက်ထားရုံနဲ့ အခြား 728 | container များကိုလဲ တူညီတဲ့ Network တခုတည်းပေါ်မှာ 729 | ဆက်သွယ်လုပ်ဆောင်လို့ရပါတယ်။ 730 | 731 | **Syntax:** 732 | 733 | ``` {.text} 734 | $ docker network connect [network_name] [container_name] 735 | ``` 736 | 737 | **Example:** 738 | 739 | ``` {.text} 740 | $ docker network connect my-bridge-network centos 741 | ``` 742 | 743 | Docker Network နှင့် Container ကို disconnect လုပ်ခြင်း။ 744 | -------------------------------------------------------- 745 | 746 | သင့်အနေနဲ့ Network တခုပေါ်ကနေ container ကို disconnect လုပ်ချင်ရင် 747 | အောက်ပါ command ကို အသုံးပြုနိုင်ပါတယ်။ 748 | 749 | **Syntax:** 750 | 751 | ``` {.text} 752 | $ docker network disconnect [network_name] [container_name] 753 | ``` 754 | 755 | **Example:** 756 | 757 | ``` {.text} 758 | $ docker network disconnect my-bridge-network centos 759 | ``` 760 | 761 | Docker Network တခုရဲ့ အချက်အလက် ကိုကြည့်ခြင်း။ 762 | ---------------------------------------------- 763 | 764 | Docker Network တခုရဲ့ အသေးစိတ်အချက် ကို ကြည့်ချင်ရင် inspect option ကို 765 | အသုံးပြုပြီး ကြည့်လို့ရပါတယ်။ 766 | 767 | ``` {.text} 768 | $ docker network inspect my-bridge-network 769 | ``` 770 | 771 | inspect option ကို အသုံးပြုပြီး Docker Network တခုရဲ့ အသေးစိတ် 772 | အချက်အလက်ကိုကြည့်မယ် ဆိုရင် အခုလိုမြင်ရမှာ ဖြစ်ပါတယ်။ 773 | 774 | Docker Network ကို Remove ခြင်း။ 775 | -------------------------------- 776 | 777 | Docker network တွေကို remove လုပ်မယ်ဆိုရင် rm option ကို 778 | အသုံးပြုလို့ပါတယ်။ 779 | 780 | တခုထက်ပိုတဲ့ docker network တွေကို remove လုပ်ချင်ရင် network ID 781 | (သို့မဟုတ်) network name တွေကို space ခံပြီး အသုံးပြုပြီး remove 782 | လုပ်လို့ရပါတယ်။ 783 | 784 | **Example:** 785 | 786 | ``` {.text} 787 | $ docker network rm my-bridge-network network2 network3 788 | ``` 789 | 790 | သင့်အနေနဲ့ docker ပေါ်က အသုံးမပြုတော့တဲ့ network အားလုံးကို remove 791 | လုပ်ချင်ရင် prune option ကို အသုံးပြုပြီး remove လုပ်လို့ရပါတယ်။ 792 | 793 | ``` {.text} 794 | $ docker network prune 795 | ``` 796 | 797 | \pagebreak 798 | 799 | Docker Networking Example 800 | ========================= 801 | 802 | Docker Networking Example 803 | ------------------------- 804 | 805 | Docker Network tutorial ဖက်ပြီးပြီးဆိုရင် Example လေး 806 | စမ်းလုပ်ကြည့်လို့ရပါတယ်။ 807 | 808 | ကျွန်တော် တို့ ဒီ Tutorial မှာတော့ docker containers နှစ်ခုနဲ့ docker 809 | network အသေးစားလေး တခု လုပ်ပြသွားမှာ ဖြစ်ပါတယ်။ 810 | 811 | > MySQL -- A relational database server. 812 | > 813 | > PHPMyAdmin -- A web based interface to manage MySQL server. 814 | 815 | အခု tutorial မှာတော့ အခြား MySQL server ကို access လုပ်ဖို့အတွက် အခြား 816 | container တခုမှာ run ထားတဲ့ PHPMyAdmin ကို အသုံးပြ ပြသသွားမှာ ဖြစ်ပါတယ်။ 817 | 818 | Network တခု Create လုပ်ခြင်း။ 819 | ----------------------------- 820 | 821 | ပထမဦးစွာ အနေဖြင့် docker network အသစ် တခု ကို Create လုပ်ဖြစ်ပါတယ်။ 822 | my-bridge-network အမည်ရှိသော network အသစ်ကို အောက်ပါ comment အသုံးပြု 823 | ပြီး create လုပ်ပါ။ 824 | 825 | ``` {.text} 826 | $ docker network create -d bridge my-bridge-network 827 | ``` 828 | 829 | MySQL Container ကို Run ခြင်း။ 830 | ------------------------------ 831 | 832 | အခု ကျွန်တော် တို့ MySQL docker container အသစ် ကို Run မှာ ဖြစ်ပါတယ်။ 833 | 834 | Default root user password အသစ်ကို သတ်မှတ်ဖို့အတွက် 835 | MYSQL\_ROOT\_PASSWORD variable ကို အောက်မှာပြထားတဲ့အတိုင်း ရိုက်ပါ။ 836 | 837 | ``` {.text} 838 | $ docker run --name mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql/mysql-server 839 | ``` 840 | 841 | Container တခု create ပြီးနောက် စောစော က ကျွန်တော်တို့ create ထားတဲ့ 842 | my-bridge-network network နဲ့ ချိတ်ဆက်မှာ ဖြစ်ပါတယ်။ 843 | 844 | ``` {.text} 845 | $ docker network connect my-bridge-network mysql 846 | ``` 847 | 848 | နောက် တဆင့် အနေနဲ့ MySQL container ရဲ့ IP address အသစ် 849 | ကိုကြည့်မှာဖြစ်ပါတယ်။ 850 | 851 | ``` {.text} 852 | $ docker inspect mysql | grep "IPAddress" 853 | ``` 854 | 855 | PHPMyAdmin Container ကို Run ခြင်း။ 856 | ----------------------------------- 857 | 858 | အခု ကျွန်တော်တို့ Docker container အသစ်ဖြစ်တဲ့ phpmyadmin ကို run မှာ 859 | ဖြစ်ပါတယ်။ 860 | 861 | MySQL ကို Run ခြင်း နောက်ဆုံးအဆင့်မှာ ရခဲ့တဲ့ MySQL container IP address 862 | ကို PMA\_HOST value အနေနဲ့ထည့်ပါမယ်။ 863 | 864 | ``` {.text} 865 | $ docker run --name phpmyadmin -d -e PMA_HOST=172.21.0.2 -p 8080:80 phpmyadmin/phpmyadmin 866 | ``` 867 | 868 | ပြီးနောက် phpmyadmin container ကို my-bridge-network ထဲ add လိုက်ပါ။ 869 | 870 | ``` {.text} 871 | $ docker network inspect my-bridge-network 872 | ``` 873 | 874 | My-bridge-network Network ရဲ့ အချက်အလက် ကိုကြည့်ခြင်း ။ 875 | ------------------------------------------------------- 876 | 877 | အပေါ်မှာ ပြခဲ့တဲ့ containers နှစ်ခု ကို ကျွန်တော် တို့ my-bridge-network 878 | ထဲ ထည့်ပြီးသွား တဲ့ အတွက် လက်ရှိ my-bridge-network ရဲ့ setting ကို 879 | ကြည့်လိုက်ရအောင် ။ 880 | 881 | ``` {.text} 882 | $ docker network inspect my-bridge-network 883 | ``` 884 | 885 | My-bridge-network ရဲ့ setting ကို ကြည့်ရင်တော့ အခုလိုတွေ့ရမှာဖြစ်ပါတယ်။ 886 | 887 | Allow MySQL to PHPMyAdmin Host 888 | ------------------------------ 889 | 890 | MySQL default အနေနဲ့ကတော့ remote hosts connect လုပ်တာကို 891 | ခွင့်မပြုထားပါဘူး။ 892 | 893 | ဆိုတော့ ကျွန်တော် တို့ က MySQL connection အတွက် phpmyadmin ကို allow 894 | 895 | လုပ်ပေးရမှာ ဖြစ်ပါတယ်။ MySQL container shell access ရဖို့အတွက် အောက်မှာ 896 | ပြထားတဲ့ လုပ်ရမှာဖြစ်ပါတယ်။ 897 | 898 | ``` {.text} 899 | $ docker exec -it mysql bash 900 | ``` 901 | 902 | MySQL server ထဲကို MySQL container create လုပ်တုန်းက ပေးထဲ့ခဲ့တဲ့ 903 | Password ကို အသုံးပြုပြီး Login ဝင်လိုက်ပါ။ 904 | 905 | ``` {.text} 906 | bash-4.2# mysql -u root -p 907 | ``` 908 | 909 | phpmyadmin host ip address နဲ့ user အသစ် create လုပ်လိုက်ပါ။ ဒီ tutorial 910 | ထဲမှာတော့ phpmyadmin host ip address ကတော့ '**172.21.0.3**' ဖြစ်ပါတယ်။ 911 | 912 | ``` {.text} 913 | mysql> GRANT ALL on *.* to 'dbuser'****@****'172.21.0.3' identified by 'secret'; 914 | Query OK, 0 rows affected, 1 warning (0.00 sec) 915 | 916 | mysql> flush privileges; 917 | Query OK, 0 rows affected (0.00 sec) 918 | 919 | mysql> exit 920 | Bye 921 | ``` 922 | 923 | Access MySQL with PHPMyAdmin 924 | ---------------------------- 925 | 926 | နောက်ဆုံးအနေဖြင့် ကျွန်တော် တို့ ရဲ့ docker host system က port 8080 မှ 927 | တဆင့် phpmyadmin web user interface ကို ချိတ်ဆက်လို့ ရသွားပါတယ်။ 928 | 929 | phpMyAdmin ကို MySQL ရဲ့ အချက်အလက်တွေ သုံးပြီး အပေါ်မှာ ပြထားတဲ့ အတိုင်း 930 | Login ဝင်ရန် အသုံးပြုလို့ရပါတယ်။ 931 | 932 | \pagebreak 933 | 934 | Docker Compose 935 | ============== 936 | 937 | Docker Compose 938 | -------------- 939 | 940 | Docker Compose သည် Containers များကို Setup ပြုလုပ်ရာတွင် အသုံးပြုသည့် 941 | Tool တခုဖြစ်သည်။ Docker Compose ကိုသုံးခြင်းဖြင့် docker containers 942 | များကို Compose File တစ်ခုအနေဖြင့် ဖန်တီးနိုင်သည်။ Images and Containers 943 | များကို လည်း Signal Command ဖြင့် လွယ်ကူစွာ build လုပ်နိုင်ပါတယ်။ 944 | 945 | Docker Compose ပြုလုပ်ရန် အဆင့် (3) ဆင့် ရှိသည်။ 946 | 947 | - Dockerfile တွင် သုံးမည့် Services များကို သတ်မှတ်ပေးရန် 948 | - မိမိ Enviroment အတွက် သုံးမည့် Service and Application များကို 949 | docker-file အဖြစ်ပြုလုပ်ပြီး sample.yml format ဖြင့် သိမ်းဆည်းရမည်။ 950 | - Run docker-compose up Command ဖြင့် Docker Containers Services 951 | များကို Run နိုင်သည်။ 952 | 953 | **စက်တွင် Docker Enginer ရှိဖို့လိုပါသည်။ မရှိလျှင် Docker Engine 954 | Installation Section တွင်လေ့လာနိုင်ပါသည်။** 955 | 956 | Install Docker Compose 957 | ---------------------- 958 | 959 | Docker Compose ကို Install ပြုလုပ်ရန် 960 | (Github Page) တွင် 961 | ဝင်ရောက်လေ့လာ၍ ရယူနိုင်ပါသည်။ 962 | 963 | အောက်ပါ Command ဖြင့်လည်း Docker compose 1.16.1 ကို Install 964 | ပြုလုပ်နိုင်သည်။ Install မပြုလုပ်ခင် Docker versition နှင့် Specific 965 | ဖြစ်မဖြစ် စစ်ဆေးရန်လိုအပ်ပါသည်။ 966 | 967 | ``` {.text} 968 | $ curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 969 | 970 | $ chmod +x /usr/local/bin/docker-compose 971 | ``` 972 | 973 | Docker Compose Example File 974 | --------------------------- 975 | 976 | Docker Composer file သည် docker-compose.yml (format) ဖြစ်ပြီး အောက်တွင် 977 | Version 3 docker composer file ကို Sample ပြထားသည်။ ဤ File သည် Sample 978 | ဖြစ်၍ Service တခုဖြစ်သည့် WEB Name တစ်ခုကိုသာ ပြထားသည်။ 979 | 980 | ``` {.text} 981 | version: '3' 982 | services: 983 | db: 984 | image: mysql 985 | container_name: mysql_db 986 | restart: always 987 | environment: 988 | - MYSQL_ROOT_PASSWORD="secret" 989 | web: 990 | image: apache 991 | build: . 992 | container_name: apache_web 993 | restart: always 994 | ports: 995 | - "8080:80" 996 | ``` 997 | 998 | Docker Compose CLI Reference 999 | ---------------------------- 1000 | 1001 | Docker Compose နှင့် Docker Container များကို manage ပြုလုပ်ရန်အတွက် 1002 | docker-compose command ကိုလည်း subcommand အဖြင့် provides လုပ်ပေးသည်။ 1003 | 1004 | အောက်တွင့် Subcommand အချို့ကို လေ့လာနိုင်သည်။ သတိပြုရန်မှာ Container 1005 | Name နှင့် Services name ကို မမှားဖို့ သတိပြုရမည်။ 1006 | 1007 | `build -` build option ဖြင့် images များကို build လုပ်ပြီး Services 1008 | များကို အသုံးပြုနိုင်သည်။ 1009 | 1010 | ``` {.text} 1011 | $ docker-compose build ## Build all services 1012 | $ docker-compose build web ## Build single service 1013 | ``` 1014 | 1015 | `up –` Current Directory အောက်ရှိ docker-composer.yml မှ docker 1016 | container နှင့် Services များကို Create ပြုလုပ်ရန်ဖြစ်သည်။ ( -d ) Switch 1017 | သည် Container ကို daemon mode ဖြင့် run စေရန်ဖြစ်သည်။ 1018 | 1019 | ``` {.text} 1020 | $ docker-compose up -d ## Create all containers 1021 | $ docker-compose up -d web ## Create single container 1022 | ``` 1023 | 1024 | `down –` ဤ Option သည် containers များ၏ Neteork, Container Service and 1025 | Associate Images များကို ရပ်ရန်, ဖျက်ရန် အသုံးပြုနိုင်သည်။ 1026 | 1027 | ``` {.text} 1028 | $ docker-compose down ## Restart all containers 1029 | $ docker-compose down web ## Restart single container 1030 | ``` 1031 | 1032 | `ps –` Container များ၏ Services,Status and Port များ၏ process detail ကို 1033 | သိနိုင်ရန် သုံးသည်။ 1034 | 1035 | ``` {.text} 1036 | $ docker-compose ps 1037 | ``` 1038 | 1039 | `exec –` Running Containers များကို exec ပြုလုပ်ရန်သုံးသည်။ For example, 1040 | Web Service Run နေသည့် Container ကို list-file အနေဖြင့် ကြည့်ရန်.. 1041 | 1042 | ``` {.text} 1043 | $ docker-compose exec web ls -l 1044 | ``` 1045 | 1046 | `start -` Containers များကို Start လုပ်ရန်သုံးသည်။ 1047 | 1048 | ``` {.text} 1049 | $ docker-compose start ## Start all containers 1050 | $ docker-compose start web ## Start single container 1051 | ``` 1052 | 1053 | `stop -` Running Containers များကို ရပ်လိုက်ရန် အသုံးပြုသည်။ 1054 | 1055 | ``` {.text} 1056 | $ docker-compose stop ## Stop all containers 1057 | $ docker-compose stop web ## Stop single container 1058 | ``` 1059 | 1060 | `restart –` 1061 | 1062 | ``` {.text} 1063 | Containers များကို restart ပြုလုပ်ရန် သုံးသည်။ 1064 | ``` 1065 | 1066 | ``` {.text} 1067 | $ docker-compose restart ## Restart all containers 1068 | $ docker-compose restart web ## Restart single container 1069 | ``` 1070 | 1071 | `pause –` Containers များကို pause လုပ်ရန်သုံးသည်။ 1072 | 1073 | ``` {.text} 1074 | $ docker-compose pause ## Start all paused containers 1075 | $ docker-compose pause web ## Start single paused container 1076 | ``` 1077 | 1078 | `rm –` Containers များကို ဖျက်ရန်, ဖယ်ရှားရန်သုံးသည်။ 1079 | 1080 | ``` {.text} 1081 | $ docker-compose rm ## Start all paused containers 1082 | $ docker-compose pause web ## Start single paused container 1083 | ``` 1084 | 1085 | \pagebreak 1086 | 1087 | Docker Compose Example 1088 | ====================== 1089 | 1090 | ### Step 1 -- Create Directory Structure 1091 | 1092 | ပထမဆုံး အနေဖြင့် docker compose အမည်ရှိ directory တစ်ခု တည်ဆောက်ပါမည်။ 1093 | ထို့ နောက် web application သိမ်းဆည်းရန် webapp အမည်ရှိ directory 1094 | တည်ဆောက်ပါမည်။ webapp directory ထဲတွင် web application ကိုစမ်းရန် အတက်ွ 1095 | index.html ကို တည်ဆောက်ပါမည်။ 1096 | 1097 | $ mkdir dockercompose && cd dockercompose 1098 | $ mkdir webapp && echo "It Works"; webapp/index.html 1099 | 1100 | ### Step 2 -- Create Dockerfile for Webapp 1101 | 1102 | ပြီးနောက် web application အတက်ွ လိုအပ်သော dockerfile ကို webapp 1103 | directory ထဲမှာတည်ဆောက်ပါမည်။ dockerfile သည် web application အတက်ွ 1104 | လိုအပ်သော apache web server ပါ၀င်သည့် customized image တည်ဆာက် 1105 | ရန်ဖြစ်ပါသည်။ 1106 | 1107 | ``` {.text} 1108 | $ vim webapp/Dockerfile 1109 | ``` 1110 | 1111 | ထို့ နောက် အောက် ပါ code များကို ပေါင်းထည့်ပါ။ 1112 | 1113 | ``` {.text} 1114 | FROM tecadmin/ubuntu-ssh:16.04 1115 | 1116 | RUN apt-get update \ 1117 | && apt-get install -y apache2 1118 | 1119 | COPY index.html /var/www/html/ 1120 | WORKDIR /var/www/html 1121 | CMD ["apachectl", "-D", "FOREGROUND"] 1122 | EXPOSE 80 1123 | ``` 1124 | 1125 | ### Step 3 -- Create Docker Compose File 1126 | 1127 | ထို့ နောက် လက်ရှိ directory ထဲတင်ွ docker-compose.yml အမည်ရှိ docker 1128 | configuration ဖိုင် တစ်ခုကို တည်ဆောက်ပါမည်။ ထို configuration ဖိုင် သည် 1129 | အသုံးပြုမည့် containers အကုန်လုံးကို ကိုယ်စားပြုမည်ဖြစ်သည်။ 1130 | 1131 | ``` {.text} 1132 | $ vim docker-compose.yml 1133 | ``` 1134 | 1135 | ထို့ နောက် အောက် ပါ code များကို ပေါင်းထည့်ပါ။ 1136 | 1137 | version: '3' 1138 | services: 1139 | db: 1140 | image: mysql 1141 | container_name: mysql_db 1142 | restart: always 1143 | environment: 1144 | - MYSQL_ROOT_PASSWORD="secret" 1145 | web: 1146 | image: apache 1147 | build: ./webapp 1148 | depends_on: 1149 | - db 1150 | container_name: apache_web 1151 | restart: always 1152 | ports: 1153 | - "8080:80" 1154 | 1155 | အထက်ပါ ဖိုင်သည် containers နှစ်ခု အတက်ွဖြစ်သည်။ ပထမ container သည် mysql 1156 | database server အတက်ွဖြစ်ပြီး ဒုတိယသည် web server အတက်ွဖြစ်သည်။ Web 1157 | container သည် application များကို apache server တင်ွ 1158 | အလုပ်လုပ်စေမည်ဖြစ်သည်။ webapp directory ကို build directory အဖြစ် 1159 | သတ်မှတ်ထားခြင်းဖြစ်သည်။ 1160 | 1161 | ### Step 4 -- Build Webapp Image 1162 | 1163 | အောက်ပါ command ဖြင့် webapp directory အတင်ွးရှိ contents များနှင့် 1164 | Dockerfile ကို အသုံးပြု၍ apache အမည်ရှိ image တစ်ခုကို တည်ဆောက်ပါမည်။ 1165 | 1166 | ``` {.text} 1167 | $ docker-compose build 1168 | ``` 1169 | 1170 | > ``` {.text} 1171 | > db uses an image, skipping 1172 | > Building web 1173 | > Step 1/6 : FROM tecadmin/ubuntu-ssh:16.04 1174 | > 16.04: Pulling from tecadmin/ubuntu-ssh 1175 | > b3e1c725a85f: Pull complete 1176 | > 4daad8bdde31: Pull complete 1177 | > 63fe8c0068a8: Pull complete 1178 | > 4a70713c436f: Pull complete 1179 | > bd842a2105a8: Pull complete 1180 | > c41407f48fa7: Pull complete 1181 | > 1fcfeb9b5ef4: Pull complete 1182 | > 13195a7d2240: Pull complete 1183 | > b86be64bbda8: Pull complete 1184 | > 8c951fe917dc: Pull complete 1185 | > f74bc80103b6: Pull complete 1186 | > Digest: sha256:523d6fbc97954e9f77231bf54bfcfbbdd4805349887477fbac4a63dc735d777d 1187 | > Status: Downloaded newer image for tecadmin/ubuntu-ssh:16.04 1188 | > ---> bb63b492da01 1189 | > Step 2/6 : RUN apt-get update && apt-get install -y apache2 1190 | > ---> Running in 00be0dd717ce 1191 | > [[[Removed long output from here]]] 1192 | > ---> 41c731590234 1193 | > Removing intermediate container 00be0dd717ce 1194 | > Step 3/6 : COPY index.html /var/www/html/ 1195 | > ---> 42f84d4c2243 1196 | > Removing intermediate container 945aaee6cbde 1197 | > Step 4/6 : WORKDIR /var/www/html 1198 | > ---> 40bebd21e352 1199 | > Removing intermediate container e13f5f412906 1200 | > Step 5/6 : CMD apachectl -D FOREGROUND 1201 | > ---> Running in ab0db1ef1c6e 1202 | > ---> 587bf2323289 1203 | > Removing intermediate container ab0db1ef1c6e 1204 | > Step 6/6 : EXPOSE 80 1205 | > ---> Running in 7bcbef52d585 1206 | > ---> 8f03d4135394 1207 | > Removing intermediate container 7bcbef52d585 1208 | > Successfully built 8f03d4135394 1209 | > Successfully tagged apache:latest 1210 | > ``` 1211 | 1212 | ### Step 5 -- Launch Docker Containers 1213 | 1214 | docker-compose up ကို အသုံးပြု၍ containers များကို စတင်စေမည်။ Daemon 1215 | mode ကို အသုံးပြုရန် -d option ကို အသုံးပြုနိုင်သည်။ 1216 | 1217 | ``` {.text} 1218 | $ docker-compose up -d 1219 | ``` 1220 | 1221 | ### Step 6 -- Update Content in Web Application 1222 | 1223 | Web application တင်ွ ပြောင်းလဲမှု များပြုလုပ်လိုလျှင် 1224 | 1225 | ``` {.text} 1226 | $ echo "Welcome to Docker Compose Tutorial" >> webapp/index.html 1227 | ``` 1228 | 1229 | ပြီးလျှင် အောက်ပါ command များကို သုံး၍ webapp container ကို ပြန်လည် 1230 | တည်ဆောက်ပြီး စတင် အလုပ်လုပ်စေနိုင်ပါသည်။ 1231 | 1232 | ``` {.text} 1233 | $ docker-compose build 1234 | $ docker-compose up -d 1235 | ``` 1236 | 1237 | \pagebreak 1238 | 1239 | Docker Machine 1240 | ============== 1241 | 1242 | Working With Docker Machine 1243 | --------------------------- 1244 | 1245 | Docker Machine သည် Command Line Tool တစ်ခုဖြစ်ပြီး Dockerized Hosts 1246 | များကို Provisioning and Managing ပြုလုပ်ရန် ဖြစ်သည်။ အရှင်းဆုံးပြောရရင် 1247 | Virtual Machine များကို Docker Engine နဲ့ Local or Remote System အတွက် 1248 | Install ပြုလုပ်နိုင်တယ်။ Docker Machine များသည် Virtualbox, Vmware, 1249 | Digital Ocean နှင့် Amazone စသည့် Platform များပေါ်တွင်လည်း 1250 | ကောင်းစွာအလုပ်လုပ်နိုင်သည်။ 1251 | 1252 | ### Install Docker Machine 1253 | 1254 | Docker Machine ကို install ပြုလုပ်ရန် အောက်တွင်ဖော်ပြထားပါသည်။ ပြီးတော့ 1255 | တွင်လည်း နောက်ဆုံးထွတ် 1256 | Docker Machine Version ကို စစ်ဆေးရွေးချယ်နိုင်ပါသည်။ 1257 | 1258 | ``` {.text} 1259 | ** Please Note: : " https://github.com/docker/machine/releases " 1260 | ``` 1261 | 1262 | #### For Linux Systems: 1263 | 1264 | ``` {.text} 1265 | $ curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine 1266 | 1267 | $ chmod +x /usr/local/bin/docker-machine 1268 | ``` 1269 | 1270 | စသည့် Command ကို အသုံးပြုပြီး Docker Machine ကို Download ပြုလုပ်ပြီး 1271 | Install ပြုလုပ်နိုင်သည်။ 1272 | 1273 | #### For OSX Systems: 1274 | 1275 | ``` {.text} 1276 | $ curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine 1277 | 1278 | $ chmod +x /usr/local/bin/docker-machine 1279 | ``` 1280 | 1281 | စသည့် Command များကို အသုံးပြုပြီး download and install ပြုလုပ်နိုင်သည်။ 1282 | 1283 | #### For Windows Systmes with Git Bash: 1284 | 1285 | Windows 10 နှင့် အထက်တွင်သာ အသုံးပြုရန် အကြံပြုလိုပါသည်။ 1286 | 1287 | ``` {.text} 1288 | $ if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi 1289 | 1290 | $ curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" 1291 | 1292 | $ chmod +x "$HOME/bin/docker-machine.exe" 1293 | ``` 1294 | 1295 | စသည့် Command များကို အသုံးပြုပြီး download and install ပြုလုပ်နိုင်သည်။ 1296 | 1297 | ### Docker Machine Supported Drivers: 1298 | 1299 | Docker Machine အတွက် Drivers များကို local and Cloud System များကို 1300 | Provide လုပ်ပေးပါသည်။ 1301 | 1302 | Dockerized hosts များ၏ ဖော်ပြပါ hosting Service များကို Docker Machine 1303 | တခုတည်းဖြင့် Manage ပြုလုပ်နိုင်ပါသည်။ 1304 | 1305 | - Amazon Web Services 1306 | - Microsoft Azure 1307 | - Digital Ocean 1308 | - Exoscale 1309 | - Google Compute Engine 1310 | - Generic 1311 | - 6Microsoft Hyper-V 1312 | - OpenStack 1313 | - Rackspace 1314 | - IBM Softlayer 1315 | - Oracle VirtualBox 1316 | - VMware vCloud Air 1317 | - VMware Fusion 1318 | - VMware vSphere 1319 | 1320 | \pagebreak 1321 | 1322 | Docker Prune 1323 | ============ 1324 | 1325 | Prune Objects in Docker 1326 | ----------------------- 1327 | 1328 | ပုံမှန်ဆို docker ကသူအသုံးမပြုတော့တဲ့ objects ‌တွေကို 1329 | သူ့ကိုဖျက်ပါလို့မပြောမချင်း မဖျက်ဘဲ ဒီတိုင်းထားထားတတ်ပါတယ်။ ဒီနေရာမှာ 1330 | objects ဆိုတာ docker နဲ့ဆိုင်တဲ့ images, containers, volumes နဲ့ network 1331 | တို့ကိုပြောတာပါ။ ဒါကြောင့် သူ့မှာ unused objects တွေကိုဖျက်ပစ်ဖို့အတွက် 1332 | option တစ်ခုထည့်ပေးထားပါတယ်။ ဒါကတော့ docker prune ဆိုတဲ့ command ပါ။ 1333 | **Syntax:** 1334 | 1335 | ``` {.bash} 1336 | $ docker [object] prune [options] 1337 | ``` 1338 | 1339 | ### Prune all unused Objects. 1340 | 1341 | အောက်က command ကတော့ docker က အသုံးမပြုတော့တဲ့ container, image, volume 1342 | နဲ့ network တွေကို ဖယ်ရှားပေးပါလိမ့်မယ်။ 1343 | 1344 | ``` {.bash} 1345 | $ docker system prune 1346 | ``` 1347 | 1348 | `--‌all option` ကတော့ unused ဖြစ်နေတဲ့ docker 1349 | နဲ့ပါတ်သတ်တာအကုန်ကိုဆိုလိုတာပါ။ 1350 | 1351 | ``` {.bash} 1352 | $ docker system prune --all 1353 | ``` 1354 | 1355 | `--filter` ဆိုတဲ့ option ကတော့ key=value နဲ့တွဲသုံးရပါတယ်။ ဥပမာ အောက်က 1356 | command က until=24 hours ဆိုတာကလွန်ခဲ့တဲ့ 24 နာရီမတိုင်ခင်က build ခဲ့တဲ့ 1357 | images တွေ၊ stop ဖြစ်နေတဲ့ containers တွေ ၊ အသုံးမပြုတော့တဲ့ network 1358 | တွေကိုဖျက်ပစ်မယ်လို့ပြောတာပါ။ 1359 | 1360 | ``` {.bash} 1361 | $ docker system prune --filter "until=24h" 1362 | ``` 1363 | 1364 | ### Prune Images 1365 | 1366 | အောက်က command ကိုတော့ Unused images 1367 | တွေကိုပဲရွေးဖျက်ချင်တယ်ဆိုရင်သုံးလို့ရပါတယ်။ 1368 | 1369 | ``` {.bash} 1370 | $ docker image prune 1371 | ``` 1372 | 1373 | ### Prune containers 1374 | 1375 | Stop/exited ဖြစ်သွားတဲ့ Containers တွေကိုပဲရွေးဖျက်ချင်ရင်တော့ အောက်က 1376 | command ကိုသုံးလို့ရပါတယ်။ 1377 | 1378 | ``` {.bash} 1379 | $ docker container prune 1380 | ``` 1381 | 1382 | ### Prune Volume 1383 | 1384 | အသုံးမပြုတော့တဲ့ volumes တွေကိုဖျက်ချင်တဲ့အခါမှာက အောက်ကလိုမျိုး 1385 | သုံးနိုင်ပါတယ်။ 1386 | 1387 | ``` {.bash} 1388 | $ docker volume prune 1389 | ``` 1390 | 1391 | ### Prune Network 1392 | 1393 | အပေါ်က command တွေလိုပဲ network တွေကိုဖယ်ရှားချင်တဲ့အခါမှာလည်း prune 1394 | ကိုအသုံးပြနိုင်ပါတယ်။ 1395 | 1396 | ``` {.bash} 1397 | $ docker network prune 1398 | ``` 1399 | 1400 | ### Conclusion 1401 | 1402 | Yes or No question တွေမပေးဘဲ တန်းဖျက်ချင်တာသေချာတယ်ဆိုရင်တော့ အနာက်ကနေ 1403 | force option အနေနဲ့ -f ကိုအသုံးပြုပြီးဖျက်နိုင်ပါတယ်။ 1404 | 1405 | ``` {.bash} 1406 | $ docker system prune -f 1407 | $ dokcer image prune -f 1408 | $ docker container prune -f 1409 | $ docker network prune -f 1410 | $ docker volume prune -f 1411 | ``` 1412 | 1413 | Options တွေကိုအခြေအနေအပေါ်မူတည်ပြီးတော့လည်း ကိုယ့်စိတ်ကြိုက် 1414 | တွဲသုံးနိုင်ပါတယ်။ 1415 | 1416 | ``` {.bash} 1417 | $ docker system prune -a -f 1418 | $ dokcer image prune -a -f 1419 | $ docker container prune -a -f 1420 | $ docker network prune -a -f 1421 | $ docker volume prune -a -f 1422 | ``` 1423 | 1424 | Reference from 1425 | [tecadmin](https://tecadmin.net/tutorial/docker/docker-prune-unused-objects/). 1426 | 1427 | \pagebreak 1428 | 1429 | Sponsor 1430 | ======= 1431 | 1432 | Our Hero List 1433 | ------------- 1434 | 1435 | **Becoming a kindly super hero:** 1436 | 1437 | waiyanwinhtain\ 1438 | 1439 | 1440 | khinchanmyaehtun\ 1441 | 1442 | 1443 | pyaephyoaung\ 1444 | 1445 | 1446 | zawyelwin\ 1447 | 1448 | 1449 | thutatun\ 1450 | 1451 | 1452 | kyawkyaw\ 1453 | 1454 | 1455 | nyinyisoewin\ 1456 | 1457 | 1458 | minthatti\ 1459 | 1460 | 1461 | sanjay\ 1462 | 1463 | 1464 | ### Original Content from TecAdmin.net 1465 | 1466 | {% code title="original-article.sh" %} 1467 | 1468 | ``` {.bash} 1469 | # Special Thank to TecAdmin 1470 | lynx https://tecadmin.net/tutorial/docker/ 1471 | ``` 1472 | 1473 | {% endcode %} 1474 | 1475 | ### Relative Content list 1476 | 1477 | **Ubuntu Wiki - Burmese** 1478 | 1479 | - 1480 | - 1481 | 1482 | **Docker Study Jams** 1483 | 1484 | - 1485 | - 1486 | 1487 | #### PDF Download 1488 | 1489 | 1490 | 1491 | \pagebreak 1492 | -------------------------------------------------------------------------------- /latex/body-tex.tex: -------------------------------------------------------------------------------- 1 | \section{Docker Intro}\label{docker-intro} 2 | 3 | \subsection{Docker Intro}\label{docker-intro-1} 4 | 5 | Docker ဆိုတာ software container platform တစ်ခုပဲ ဖြစ်ပါတယ်။ Docker 6 | ဟာဆိုရင် application ​တွေ run ဖို့၊ develop ဖို့၊ ship ဖို့ လုပ်ထားတဲ့ 7 | open source platform တစ်ခုဖြစ်ပါတယ်။Docker က သင့်ရဲ့ application 8 | တစ်ခုစီတိုင်း အတွက် သီးသန့် တည်ရှိတဲ့ environment တစ်ခုကို 9 | ဖန်တီး​ပေးမှာဖြစ်ပါတယ်။ 10 | 11 | \subsection{Docker Engine}\label{docker-engine} 12 | 13 | Docker Engine ဟာဆိုရင် Docker ရဲ့ core ဖြစ်ပြီး Docker containers 14 | ​တွေကို create ပြုလုပ်​ခြင်း၊ shipping လုပ် ခြင်း၊ run ခြင်း စတာ ​တွေကို 15 | လုပ်​ဆောင်​ပေးပါတယ်။ Docker Engine ​တွေက Client- Server architecture အရ 16 | 17 | \begin{itemize} 18 | \itemsep1pt\parskip0pt\parsep0pt 19 | \item 20 | Server daemon process တစ်ခုဟာစဥ်ဆက်မပျက် run ခြင်း\\ 21 | \item 22 | ကျန်ရှိ​သော API ဟာ daemon ​တွေကို ချိတ်ဆက်ပြီး instruction ​တွေ ကို 23 | daemon ​တွေဆီ ​ပေးပို့ခြင်း\\ 24 | \item 25 | Command Line Interface $CLI$ အဖြစ်​ဆောင်ရွက်ခြင်း စတ​တွေကို 26 | လုပ်​ဆောင်​ပေးပါတယ်။ 27 | \end{itemize} 28 | 29 | \begin{figure}[htbp] 30 | \centering 31 | \includegraphics{.gitbook/assets/screenshot-129.png} 32 | \end{figure} 33 | 34 | \textbackslash{}pagebreak 35 | 36 | \section{Docker Features}\label{docker-features} 37 | 38 | \subsection{Features of Docker}\label{features-of-docker} 39 | 40 | \subsubsection{Docker container}\label{docker-container} 41 | 42 | Docker container တစ်ခုဟာ application တစ်ခု packaging လုပ်ဖို့၊ running 43 | လုပ်ဖို့ သီးသန့် environment တစ်ခု အဖြစ်​ရှိ​တာ 44 | ဖြစ်ပါတယ်။ပိုမွန်​မြန်ဆန်​ကောင်းမွန်တဲ့ computing ကိုရနိုင်ဖို့ Docker 45 | မှာ application တစ်ခုကို side by side ယှဥ်လျက် run နိုင်မှာ ဖြစ်ပါတယ်။ 46 | ပြီး​တော့ Single Host တစ်ခုမှာပဲ တစ်ခုထက်ပိုတဲ့ containers ​တွေကို run 47 | နိုင်ပါ​သေးတယ်။ အဲ့ containers ​တွေကိုပဲ run ထားတဲ့ host က္​နေ တစ်ခြား 48 | host တစ်ခုဆီကို ​ပြောင်း​​ရွှေ့ နိုင်ဦးမှာဖြစ်ပါတယ်။ 49 | 50 | \textbackslash{}pagebreak 51 | 52 | \section{Docker Install}\label{docker-install} 53 | 54 | \subsection{Docker installation on 55 | Ubuntu}\label{docker-installation-on-ubuntu} 56 | 57 | \textbf{Docker ကို ubuntu OS မှာ install ပြုလုပ်ဖို့ အောက်ပါ command 58 | တွေကို တခုချင်း terminal တွင်ရိုက်ထည့်ပါ။} 59 | 60 | \begin{itemize} 61 | \itemsep1pt\parskip0pt\parsep0pt 62 | \item 63 | ပထမဆုံး လက်ရှိ package များကို update ပြုလုပ်ပါမယ်။ 64 | \end{itemize} 65 | 66 | \begin{verbatim} 67 | $ sudo apt-get update 68 | \end{verbatim} 69 | 70 | \begin{itemize} 71 | \itemsep1pt\parskip0pt\parsep0pt 72 | \item 73 | ထို့နောက် လိုအပ်တဲ့ package များကို သွင်းပါမယ်။ 74 | \end{itemize} 75 | 76 | \texttt{text \$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common} 77 | 78 | \begin{itemize} 79 | \itemsep1pt\parskip0pt\parsep0pt 80 | \item 81 | ထို့နောက် Docker repository ကို add လုပ်ပါမယ်။ 82 | \end{itemize} 83 | 84 | \texttt{text \$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg \textbar{} sudo apt-key add -} 85 | 86 | \texttt{text \$ sudo add-apt-repository "deb {[}arch=amd64{]} https://download.docker.com/linux/ubuntu \$(lsb\_release -cs) stable"} 87 | 88 | \begin{itemize} 89 | \itemsep1pt\parskip0pt\parsep0pt 90 | \item 91 | နောက်ဆုံးအဆင့်အနေနဲ့ update ပြုလုပ်ပြီး docker ကို သွင်းနိုင်ပါပြီ။ 92 | \end{itemize} 93 | 94 | \texttt{text \$ sudo apt-get update} 95 | 96 | \texttt{text \$ sudo apt-get install docker-ce docker-ce-cli containerd.io} 97 | 98 | \begin{itemize} 99 | \itemsep1pt\parskip0pt\parsep0pt 100 | \item 101 | Docker service run နေကြောင်းကို သိရှိနိုင်ရန် ယခုကဲ့သို ရိုက်ထည့်ပါ။ 102 | \end{itemize} 103 | 104 | \texttt{text \$ sudo systemctl status docker} 105 | 106 | \texttt{Active: active} ဖြစ်နေပါက docker service run နေကြောင်း 107 | သိရှိနိုင်ပါတယ်။ 108 | 109 | Docker daemon service နှင့်အတူ docker cli ကိုပါ တပါးတည်း ထည့်သွင်းထားတဲ့ 110 | အတွက် docker cli ကိုလဲ အသုံးပြုနိုင်မှာဖြစ်ပါတယ်။Docker command များ ကို 111 | ယခုလို ကြည့်ရှူနိုင်ပါတယ်။ 112 | 113 | \begin{verbatim} 114 | $ docker 115 | \end{verbatim} 116 | 117 | \begin{verbatim} 118 | Output: 119 | 120 | 121 | Management Commands: 122 | builder Manage builds 123 | config Manage Docker configs 124 | container Manage containers 125 | context Manage contexts 126 | engine Manage the docker engine 127 | image Manage images 128 | network Manage networks 129 | node Manage Swarm nodes 130 | plugin Manage plugins 131 | secret Manage Docker secrets 132 | service Manage services 133 | stack Manage Docker stacks 134 | swarm Manage Swarm 135 | system Manage Docker 136 | trust Manage trust on Docker images 137 | volume Manage volumes 138 | 139 | Commands: 140 | 141 | attach Attach local standard input, output, and error streams to a running container 142 | build Build an image from a Dockerfile 143 | commit Create a new image from a container's changes 144 | cp Copy files/folders between a container and the local filesystem 145 | create Create a new container 146 | diff Inspect changes to files or directories on a container's filesystem 147 | events Get real time events from the server 148 | exec Run a command in a running container 149 | export Export a container's filesystem as a tar archive 150 | history Show the history of an image 151 | images List images 152 | import Import the contents from a tarball to create a filesystem image 153 | info Display system-wide information 154 | inspect Return low-level information on Docker objects 155 | kill Kill one or more running containers 156 | load Load an image from a tar archive or STDIN 157 | login Log in to a Docker registry 158 | logout Log out from a Docker registry 159 | logs Fetch the logs of a container 160 | pause Pause all processes within one or more containers 161 | port List port mappings or a specific mapping for the container 162 | ps List containers 163 | pull Pull an image or a repository from a registry 164 | push Push an image or a repository to a registry 165 | rename Rename a container 166 | restart Restart one or more containers 167 | rm Remove one or more containers 168 | rmi Remove one or more images 169 | run Run a command in a new container 170 | save Save one or more images to a tar archive (streamed to STDOUT by default) 171 | search Search the Docker Hub for images 172 | start Start one or more stopped containers 173 | stats Display a live stream of container(s) resource usage statistics 174 | stop Stop one or more running containers 175 | tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE 176 | top Display the running processes of a container 177 | unpause Unpause all processes within one or more containers 178 | update Update configuration of one or more containers 179 | version Show the Docker version information 180 | wait Block until one or more containers stop, then print their exit codes 181 | \end{verbatim} 182 | 183 | ဒါပေမယ့် docker ကို ထည့်သွင်းလိုက်ချိန်မှာ root user အနေနဲ့သာ docker နဲ့ 184 | သတ်ဆိုင်တဲ့ command တွေကို ရိုက်သွင်းနိုင်မှာဖြစ်ပါတယ်။ မိမိက docker နဲ့ 185 | command တခုခုကို run မယ်ဆိုရင် sudo command နဲ့သာ အသုံးပြုနိုင်မှာ 186 | ဖြစ်ပါတယ်။ ဥပမာ.. 187 | 188 | \begin{verbatim} 189 | $ sudo docker image ls 190 | \end{verbatim} 191 | 192 | Docker ကို ထည့်သွင်း ချိန် docker ဆိုတဲ့ linux user group တခုကို docker 193 | က create လုပ်သွားမှာဖြစ်ပါတယ်။ တကယ်လို့ မိမိက sudo ကို အမြဲ 194 | မထည့်ပေးစေချင်ဘူးဆိုရင် docker group ထဲကို လက်ရှိ user ကို add 195 | ပေးလိုက်ခြင်းဖြစ် sudo command ကို အမြဲရိုက်ထည့်ပေးစရာမလိုပဲ 196 | အသုံးပြုနိုင်ပါတယ်။ 197 | 198 | \begin{verbatim} 199 | $ sudo usermod -aG docker ${USER} 200 | \end{verbatim} 201 | 202 | ထို့နောက် docker service ကို restart ချပါ။ 203 | 204 | \begin{verbatim} 205 | $ sudo systemctl restart docker 206 | \end{verbatim} 207 | 208 | Docker service active ဖြစ်လာပါက docker ကို စတင် 209 | အသုံးပြုနိုင်မှာဖြစ်ပါတယ်။ 210 | 211 | \textbackslash{}pagebreak 212 | 213 | \section{Docker Container}\label{docker-container-1} 214 | 215 | \subsection{Docker Container}\label{docker-container-2} 216 | 217 | Docker container ဆိုတာ docker image တစ်ခုကို run လိုက်တဲ့အခါမှာ 218 | တည်ဆောက်လိုက်တဲ့ instance လေးတစ်ခုပဲ ဖြစ်ပါတယ်။ Container တစ်လုံးဟာ 219 | application တွေကို အလုပ်လုပ်စေဖို့အတွက်လိုအပ်တဲ့ libraries တွေနဲ့ 220 | setting တွေကိုသာ ပေါင်းစပ်ဖွဲ့စည်းထားတာ ဖြစ်ပါတယ်။ အဲ့ဒါဟာ Application 221 | တစ်ခုအတွက် အရမ်းကိုပေ့ါးပါးပြီး အလွယ်တစ်ကူရွှေ့ပြောင်းလို့ရ လောက်အောင် 222 | သေးငယ်တဲ့ environment တစ်ခုပဲ ဖြစ်ပါတယ်။ 223 | 224 | \subsection{Run Docker Container}\label{run-docker-container} 225 | 226 | System ပေါ်မှာ Docker Container တစ်လုံးကို စတင်မောင်းနှင်ရန်အတွက် docker 227 | run command ကို အသုံးပြုပါတယ်။ ဥပမာအားဖြင့် - အောက်ပါ command 228 | ကိုရိုက်လျှင် hello-world image ကိုအသုံးပြု၍ docker container တစ်လုံးကို 229 | တည်ဆောက်ပါလိမ့်မယ်။ 230 | 231 | \begin{verbatim} 232 | $ docker run hello-world 233 | \end{verbatim} 234 | 235 | အခု .. CentOS operating system ကို အသုံးပြုပြီးတေ့ာ အလုပ်လုပ်နေမယ့် 236 | docker container တစ်လုံးကို တည်ဆောက်ပါမယ်။ -it ဆိုတဲ့ option က 237 | pseudo-TTY အသုံးပြုလို့ရတဲ့ interactive session တစ်ခုကို ပေးပါတယ်။ 238 | အဲ့ဒီကနေ container shell ကို ချက်ချင်းသုံးလို့ရပါလိမ့်မယ်။ 239 | 240 | \begin{verbatim} 241 | $ docker run -it centos 242 | \end{verbatim} 243 | 244 | \begin{figure}[htbp] 245 | \centering 246 | \includegraphics{.gitbook/assets/2_run_ti_centos.png} 247 | \end{figure} 248 | 249 | ကျွန်တော်တို့ customized လုပ်ထားတဲ့ ssh access enabled လုပ်ထားတဲ့ Ubuntu 250 | docker image ကိုလည်း 251 | \href{https://hub.docker.com/r/tecadmin/ubuntu-ssh/}{docker hub 252 | repository} မှာ စမ်းကြည့်လို့ရပါတယ်။ 253 | 254 | \begin{verbatim} 255 | $ sudo docker run -d -p 2222:22 tecadmin/ubuntu-ssh:16.04 256 | \end{verbatim} 257 | 258 | \subsection{List Docker Containers}\label{list-docker-containers} 259 | 260 | လက်ရှိ System ပေါ်မှာ အလုပ်လုပ်နေတဲ့ containers တွေအားလုံးကို list 261 | ထုတ်ကြည့်ချင်ရင် docker ps command ကိုသုံးပါတယ်။ အဲဒီ command က 262 | ရပ်ထားတဲ့ container တွေကိုတော့ list ထုတ်ပြမှာ မဟုတ်ပါဘူး။ အဲ့ဒါက 263 | Container ID, Container နာမည် နဲ့ container နဲ့ပတ်သက်တဲ့ 264 | အခြားအသုံးဝင်တဲ့ information တွေကိုပါ ပြပေးမှာဖြစ်ပါတယ်။ 265 | 266 | \begin{verbatim} 267 | $ docker ps 268 | \end{verbatim} 269 | 270 | အပေါ်က command မှာ -a ဆိုတဲ့ option ကိုပါ ထည့်သုံးမယ်ဆိုရင်တော့ 271 | ရပ်ထားတဲ့ container တွေကိုပါ list ထုတ်ပြပေးမှာဖြစ်ပါတယ်။ 272 | 273 | \begin{verbatim} 274 | $ docker ps -a 275 | \end{verbatim} 276 | 277 | \begin{figure}[htbp] 278 | \centering 279 | \includegraphics{.gitbook/assets/4a_ps-large-resolution.png} 280 | \end{figure} 281 | 282 | \subsection{Find all Details of 283 | Container}\label{find-all-details-of-container} 284 | 285 | Docker container တစ်လုံးနဲ့ပတ်သက်တဲ့ အသေးစိတ်အချက်အလက်အားလုံးကို 286 | ရှာချင်တဲ့အခါမှာတော့ docker inspect command ကို အသုံးပြုပါတယ်။ Container 287 | ရဲ့ အသေးစိတ်အချက်အလက်တွေကို သိချင်တယ်ဆိုရင်တော့ ကိုယ်သိချင်တဲ့ container 288 | ရဲ့ container ID သို့မဟုတ် container နာမည်ကို 289 | တိတိကျကျထည့်ပေးရမှာဖြစ်ပါတယ်။ 290 | 291 | \begin{verbatim} 292 | $ docker inspect cc5d74cf8250 293 | \end{verbatim} 294 | 295 | \subsection{Delete Docker Container}\label{delete-docker-container} 296 | 297 | System ထဲမှာရှိနေတဲ့ docker container ကို ဖျက်ချင်တယ်ဆိုရင်တော့ docker 298 | rm command ကို အသုံးပြုပါတယ်။ Container ကိုဖျက်ချင်တယ်ဆိုရင်တော့ 299 | ကိုယ်ဖျက်ချင်တဲ့ container ရဲ့ container ID သို့မဟုတ် container နာမည်ကို 300 | တိတိကျကျထည့်ပေးရမှာဖြစ်ပါတယ်။ 301 | 302 | \begin{verbatim} 303 | $ docker stop cc5d74cf8250 304 | $ docker rm cc5d74cf8250 305 | \end{verbatim} 306 | 307 | \textbackslash{}pagebreak 308 | 309 | \section{Docker Images}\label{docker-images} 310 | 311 | \subsection{Docker Images}\label{docker-images-1} 312 | 313 | Docker image ဆိုတာကတော့ container တစ်ခုမှာ လိုချင်တဲ့ application တွေ 314 | ကိုအသုံးပြုလို့ရအောင်ပြုလုပ်ထားတဲ့ file တစ်ခုပါပဲ။ Docker image တွေဟာ 315 | ပြုလုပ်ပြီးတဲ့အချိန်ကစပြီး ဖျက်လိုက်တဲ့အချိန်အထိ 316 | အပြောင်းအလဲမရှိနိုင်ပါဘူး။ ထပ်ပြီးပြင်ဆင်လို့လည်းမရနိုင်ပါဘူး။ ပြီးတော့ 317 | image တွေဟာ တစ်ခြားသူတွေနဲ့လည်း မျှဝေအသုံးပြုနိုင်ပါသေးတယ်။ 318 | ဆိုလိုတာကတော့ တစ်ယောက်ပြုလုပ်ထားတဲ့ image ကိုသုံးပြီး နောက်တစ်ယောက်က 319 | ထပ်တူကျတဲ့ container တစ်ခုကို အသုံးပြုနိုင်တာမျိုးပါ။ 320 | 321 | အောက်မှာတော့ docker images တွေကိုအသုံးပြုဖို့အတွက် အခြေခံကျတဲ့ command 322 | တွေကို အကျဥ်းဖော်ပြပေးထားပါတယ်။ 323 | 324 | \subsection{List Docker Images}\label{list-docker-images} 325 | 326 | docker images ဆိုတဲ့ command နဲ့ ကိုယ့်စနစ်ထဲက အသုံးပြုလို့ရတဲ့ image 327 | တွေကိုစစ်ကြည့်လို့ရနိုင်ပါတယ်။ 328 | 329 | \begin{verbatim} 330 | $ docker images 331 | \end{verbatim} 332 | 333 | \begin{figure}[htbp] 334 | \centering 335 | \includegraphics{.gitbook/assets/1_ls.png} 336 | \end{figure} 337 | 338 | \subsection{Search Docker Images}\label{search-docker-images} 339 | 340 | docker search ဆိုတဲ့ command ကတော့ \href{https://hub.docker.com/}{docker 341 | hub} ကနေ လိုချင်တဲ့ image ကိုရှာတဲ့အခါသုံးပါတယ်။ ဥပမာ WordPress အတွက် 342 | images တွေကိုရှာမယ်ဆိုရင် - 343 | 344 | \begin{verbatim} 345 | $ docker search wordpress 346 | \end{verbatim} 347 | 348 | \begin{figure}[htbp] 349 | \centering 350 | \includegraphics{.gitbook/assets/2_search-large-resolution.png} 351 | \end{figure} 352 | 353 | \subsection{Download Docker Images}\label{download-docker-images} 354 | 355 | လိုချင်တဲ့ image ကိုရှာတွေ့ပြီဆိုရင်တော့ docker pull ဆိုတဲ့ command နဲ့ 356 | ကိုယ့်စက်ထဲကို download ဆွဲနိုင်ပါတယ်။ ဥပမာ Docker hub ကနေ WordPress 357 | အတွက်နောက်ဆုံးversion ဖြစ်တဲ့image ကို download ချမယ်ဆိုရင် 358 | 359 | \begin{verbatim} 360 | $ docker pull wordpress 361 | \end{verbatim} 362 | 363 | \begin{figure}[htbp] 364 | \centering 365 | \includegraphics{.gitbook/assets/3_pull_wordpress.png} 366 | \end{figure} 367 | 368 | \subsection{Delete Docker Images}\label{delete-docker-images} 369 | 370 | မလိုအပ်တော့တဲ့ image တွေကို ဖျက်ပစ်ဖို့အတွက်ကတော့ docker rmi ဆိုတဲ့ 371 | command ကိုသုံးပါတယ်။ ဥပမာ - 372 | 373 | \begin{verbatim} 374 | $ docker rmi wordpress 375 | \end{verbatim} 376 | 377 | \begin{figure}[htbp] 378 | \centering 379 | \includegraphics{.gitbook/assets/4_rmi.png} 380 | \end{figure} 381 | 382 | \textbackslash{}pagebreak 383 | 384 | \section{Dockerfile}\label{dockerfile} 385 | 386 | \subsection{Working with Dockerfile}\label{working-with-dockerfile} 387 | 388 | Dockerfile ဆိုတာ နာမည်​အတိုင်းပဲ file တစ်​ခုပါပဲ။ သူ့ဆီမှာ တိကျတဲ့ 389 | instructions ​တွေပါမယ်​ အဲ့ instructions ​တွေနဲ့ ကိုယ်​လိုချင်​တဲ့ 390 | customized images ​တွေကို​ build လုပ်​ပါတယ်​ Default အ​နေနဲ့​တော့ 391 | နာမည်​ကို Dockerfile လို့ တ​ဝေမသိမ်း​ပေးရပါမယ်​။ 392 | 393 | \subsection{Build Image with 394 | Dockerfile}\label{build-image-with-dockerfile} 395 | 396 | \begin{verbatim} 397 | $ docker build -t image_name . 398 | \end{verbatim} 399 | 400 | \begin{figure}[htbp] 401 | \centering 402 | \includegraphics{.gitbook/assets/1_docker_build.png} 403 | \end{figure} 404 | 405 | ဒါက​တော့ ​ရေးပြီးသား dockerfile နဲ့ image build လုပ်​တဲ့ command ပါ။ 406 | \texttt{-t}ဆိုတာ tag name ကိုကိုယ်​စားပြုပါတယ်​ သူ့အ​နောက်​မှာ image 407 | name လိုက်​ပါတယ်​ ​သေချာကြည်​့ပါ command အဆုံးမှာ \texttt{( . )} 408 | ပါပါတယ်​ သူက current working directory မှာ ရှိတဲ့ Dockerfile 409 | ကိုယူပြီးသုံးမယ်​လို့ ဆိုလိုတာပါ အကယ်​၍ ခင်​​ဗျားမှာသာ Dockerfile 410 | တစ်​ခုမက ရှိ​နေရင်​ သို့မဟုတ်​ Dockerfile မှာ နာမည်​အစ D ကသာ small 411 | letter $d$ ဖြစ်​​နေခဲ့မယ်​ဆိုရင်​ error တက်​နိုင်​ပါတယ်​ 412 | 413 | \begin{verbatim} 414 | $ docker build -t image_name -f /path/to/Dockerfile 415 | \end{verbatim} 416 | 417 | ဒီ command ကလဲ image build တဲ့ command ပါပဲ။ ထူးခြားတာက​တော့ \texttt{-f} 418 | flag ကိုသုံးထားတာပါ။ Current working directory ထဲကမဟုတ်​ပဲ ခင်​​ဗျားရဲ့ 419 | file system ထဲက တစ်​​နေရာရာမှာ ရှိတဲ့ Dockerfile ကို ​ခေါ်သုံးချင်​ရင်​ 420 | ဒီလို သုံးရပါမယ်​။ 421 | 422 | \subsection{Create a Dockerfile}\label{create-a-dockerfile} 423 | 424 | ဒီ​နေရာမှာ အစမ်​း​အ​နေနဲ့ Github ​ပေါ်က sample project ကိုယူသုံးပါ့မယ်​ 425 | 426 | \begin{verbatim} 427 | $ git clone https://github.com/tecrahul/dockerfile 428 | $ cd dockerfile 429 | $ docker build -t apacheimage . 430 | \end{verbatim} 431 | 432 | \begin{figure}[htbp] 433 | \centering 434 | \includegraphics{.gitbook/assets/3c_apacheimage_build.png} 435 | \end{figure} 436 | 437 | အ​ပေါ်က command သုံး​ကြောင်းပြီးရင်​ image တစ်​ခု​ဆောက်​ပြီးပါပြီ 438 | ​ဆောက်​ပြီးသား images ​တွေကို docker images ဆိုတဲ့ command 439 | နဲ့​ခေါ်ကြည့်နိုင်​ပါတယ်​။ 440 | 441 | \subsection{Launch Container with 442 | Image}\label{launch-container-with-image} 443 | 444 | \begin{verbatim} 445 | $ docker run -it -p 8080:80 apacheimage 446 | \end{verbatim} 447 | 448 | ဒီcommand နဲ့ ​ဆောက်​ပြီးသား image ကိုသုံးပြီး container 449 | တစ်​ခုတည်​​ဆောက်​ပါတယ်​။ \texttt{i}က interactive နဲ့ \texttt{t}က tty ကို 450 | ကိုယ်​စားပြုပါတယ်​။ \texttt{-p}ဆိုတာက​တော့ port သတ်​မှတ်​​ပေးတာပါ၊ ဒီ 451 | ဥပမာမှာဆို ကိုယ့် host system ရဲ့ port 8080 နဲ့ container ရဲ့ port 80ကို 452 | ချိတ်​​ပေးဖို့ သုံးထားတာကို ​တွေ့ရမှာပါ။ အ​ရှေ့က ကိုယ်​့ host systemရဲ့ 453 | port ကြားမှာ full column \texttt{( : )} နဲ့ အ​နောက်​က container ရဲ့ port 454 | ကို​ရေးရမှာပါ။ 455 | 456 | \textbackslash{}pagebreak 457 | 458 | \section{Dockerfile Directives}\label{dockerfile-directives} 459 | 460 | \subsection{What are Dockerfile 461 | Directives}\label{what-are-dockerfile-directives} 462 | 463 | အ​ရှေ့မှာ Dockerfile ကိုသုံးပြီး image ​ဆောက်​ အဲ့ image 464 | ကိုသုံးပြီး​တော့ container ​တွေ ​ဆောက်​တာကို မြင်​ခဲ့ရပြီးပါပြီ။ 465 | 466 | အခု​ပြောမှာက​တော့ အဲ့ Dockerfile ကို ဘယ်​လို​ရေးမလဲဆိုတာပါ။ 467 | 468 | Dockerfile ကို Docker directive ​တွေနဲ့​ရေးရတာပါ။ 469 | 470 | \subsubsection{FROM}\label{from} 471 | 472 | ဒီ FROM ဆိုတဲ့ directive ကို base image ယူသုံးဖို့အတွက်​ သုံးတာပါ။ ဥပမာ 473 | ခင်​​ဗျားက ubuntu command ​တွေ သုံးလို့ရမဲ့ container 474 | တစ်​လုံးလိုချင်​တာဆိုရင်​ \texttt{FROM ubuntu} ဆိုပြီးသုံးရမှာပါ။ 475 | 476 | Default အ​နေနဲ့ဆို docker store မှာရှိတဲ့ ubuntu version ​တွေထဲကမှ 477 | latest version ကို ယူသုံးသွားမှာပါ အဲ့လိုမှမဟုတ်​ဘူး latest 478 | လိုချင်​တာမဟုတ်​ဘူး ကိုယ်​လိုချင်​တာ သက်​သက်​ဆို အခုလို​ရေးလို့ရပါတယ်​ 479 | \texttt{FROM tecadmin/ubuntu-ssh:16.04} 480 | 481 | \subsubsection{LABEL}\label{label} 482 | 483 | ဒါက​တော့ နာမည်​အတိုင်​းပဲ label တပ်​တာပါ။ 484 | \texttt{Maintainer addres​s,vendor name,image version,release date} 485 | အစရှိသဖြင့်​ပေါ့။ ဥပမာ 486 | 487 | \begin{verbatim} 488 | LABEL maintainer="rahul@tecadmin.net" 489 | LABEL vendor="TecAdmin" 490 | LABEL com.example.version="0.01" 491 | \end{verbatim} 492 | 493 | လို့ ရိုက်​လိုက်​ရုံပါပဲ။ အကြံပြု လိုတာက​တော့ တစ်​ line ထဲကို space ခံ 494 | single line ခံပြီး ​ရေးတာကိုပါ။ Image build တဲ့အချိန်​မှာ 495 | စာ​ကြောင်းတစ်​​ကြောင်းကို layer တစ်​ခု ​ဆောက်​တာပါ Layer နည်း​လေ 496 | မြန်​​လေပါပဲ။ 497 | 498 | \begin{verbatim} 499 | LABEL maintainer="rahul@tecadmin.net" vendor="TecAdmin" \ 500 | com.example.version="0.01" 501 | \end{verbatim} 502 | 503 | \subsubsection{RUN}\label{run} 504 | 505 | RUN ကို​တော့ လိုအပ်​တဲ့ command​တွေ run ဖို့သုံးပါတယ်။ ဥပမာ 506 | လိုအပ်တဲ့​package​တွေ သွင်းဖို့လိုတဲ့အခါမျိုး​ပေါ့။ 507 | 508 | \begin{verbatim} 509 | RUN apt-get update 510 | RUN apt-get install -y apache2 automake build-essential curl ​​ 511 | \end{verbatim} 512 | 513 | ဒီ​နေရာမှာလဲ အ​ပေါ်ကလို တစ်​​ကြောင်းထဲဖြစ်​​အောင်​ ​ရေးသင့်ပါတယ်​။ Layer 514 | နည်း​လေ​ကောင်း​လေပါ။ 515 | 516 | \begin{verbatim} 517 | RUN apt-get update && apt-get install -y \ 518 | automake \ 519 | build-essential \ 520 | curl 521 | \end{verbatim} 522 | 523 | \subsubsection{COPY}\label{copy} 524 | 525 | ဒါကို​တော့ ကိုယ့်စက်​ထဲမှာရှိတဲ့ files ​တွေ directories ​တွေကို 526 | ​ဆောက်​မယ့် image ​ပေါ်copy ကူးချင်​ရင်​ သုံးပါတယ်။​ 527 | 528 | \begin{verbatim} 529 | COPY html/* /var/www/html/ 530 | COPY *.conf /etc/apache2/sites-available/ 531 | \end{verbatim} 532 | 533 | ပထမ command ရိုက်​လိုက်​ရင်​ host ရဲ့ html directory ​အောက်​က file 534 | အကုန်​ကို image ရဲ့ /var/www/html/ ​အောက်​ကို copy ကူသွားမှာပါ။ 535 | 536 | ဒုတိယ command က​တော့ host ရဲ့ .conf extension file အားလုံးကို image ရဲ့ 537 | /etc/apache2/sites-available/ ​အောက်​ကို​ပေါ့။ 538 | 539 | \subsubsection{WORKDIR}\label{workdir} 540 | 541 | ဒိ directive ကို​တော့ dockerfile ရဲ့အခြား​သော directives ​တွေဖြစ်​တဲ့ 542 | \texttt{RUN,CMD,ENTRYPOINT,COPY,ADD} ​တွေရဲ့ working directory 543 | သတ်​မှတ်​​ပေးဖို့သုံးပါတယ်​ 544 | 545 | \begin{verbatim} 546 | WORKDIR /opt 547 | \end{verbatim} 548 | 549 | \subsubsection{CMD}\label{cmd} 550 | 551 | CMD directive ကို​တော့ image မှာပါတဲ့ service,software ​တွေကို container 552 | launch လုပ်​​တာနဲ့ run ဖို့သုံးပါတယ်။​ သူ့ရဲ့ syntax က​တော့ 553 | 554 | \begin{verbatim} 555 | CMD ["executable","param1","param2"] 556 | CMD ["executable","param1","param2"] 557 | \end{verbatim} 558 | 559 | အကယ်​၍ခင်​​ဗျားက apache service ကို runချင်​တယ်​ဆိုပါ​တော့ 560 | 561 | \begin{verbatim} 562 | CMD ["apachectl", "-D", "FOREGROUND" ] 563 | \end{verbatim} 564 | 565 | \subsubsection{EXPOSE}\label{expose} 566 | 567 | ဒါက container ရဲ့ port ကိုညွှန်းဆိုမဲ့ directive ပါ။ အ​ပေါ်မှာ​တွေခဲ့တဲ့ 568 | docker run -it -p နဲ့ port ချိတ်​တာမှာ ဒီက ညွှန်းဆိုထားတဲ့ port ​တွေနဲ့ 569 | ချိတ်​​ပေးရပါမယ်​။ 570 | 571 | \begin{verbatim} 572 | EXPOSE 80 573 | EXPOSE 443 574 | \end{verbatim} 575 | 576 | \subsubsection{ENV}\label{env} 577 | 578 | ENV directive ကို​တော့ environment variable သတ်​မှတ်​​ပေးချင်​ရင်​ 579 | သုံးတာပါ 580 | 581 | \begin{verbatim} 582 | ENV PATH=$PATH:/usr/local/psgql/bin/ \ 583 | PG_MAJOR=9.6.0 584 | \end{verbatim} 585 | 586 | \subsubsection{VOLUME}\label{volume} 587 | 588 | ​နောက်​ဆုံး အ​နေနဲ့​တော့ VOLUME directive ပါ။ သူ့ကို​တော့ mount point 589 | create ဖို့ သုံးပါတယ်​။ သိထားဖို့က သူဟာ externally mounted volumes 590 | ပဲဖြစ်​ပါတယ်​။ 591 | 592 | \begin{verbatim} 593 | VOLUME ["/data"] 594 | \end{verbatim} 595 | 596 | \textbackslash{}pagebreak 597 | 598 | \section{Docker Port}\label{docker-port} 599 | 600 | \subsection{Manage Ports in Docker}\label{manage-ports-in-docker} 601 | 602 | Docker containers တွေထဲမှာဆိုရင် servicesတွေက သီးခြား port 603 | တစ်ခုစီပေါ်မှာ run လေ့ရှိပါတယ်။ port တစ်ခုပေါ်မှာ run နေတယ် containerရဲ့ 604 | services ‌တွေကို အသုံးပြုချင်တယ်ဆိုရင် container ရဲ့ port ကို Docker 605 | host ရဲ့ port တစ်တစ်ခုခုနဲ့ bindပေးရပါတယ်။ 606 | 607 | \subsubsection{ဥပမာ ၁}\label{ux1025ux1015ux1019} 608 | 609 | အောက်‌ကပုံကိုကြည့်ပါ။ Docker host ထဲမှာ container နှစ်လုံး run နေတာကို 610 | တွေ့ရပါလိမ့်မယ်။ ပထမတစ်ခုကတော့ website တွေ runနေတဲ့ Apache container 611 | ဖြစ်ပြီးတော့ ဒုတိယတစ်ခုကတော့ MySQL container ဖြစ်ပါတယ်။ 612 | 613 | \begin{figure}[htbp] 614 | \centering 615 | \includegraphics{.gitbook/assets/screenshot-132.png} 616 | \end{figure} 617 | 618 | အခုကျွန်တော်တို့ port 80 Apache container ပေါမှာ run နေတယ် website 619 | ကိုဝင်ရောက်ကြည့်ရှုဖို့လိုအပ်နေပါတယ်။ အဲတော့ ကျွန်တောတို့ Apache 620 | container port 80 ကို Docker host port 8080 နဲ့ bind လိုက်ကြရအောင်။ 621 | Docker host port 80 နဲ့လဲ bind လို့ရပါတယ်။ 622 | 623 | ဒုတိယ container port 3306 ပေါ်မှာ MySQL run နေပါတယ်။ Host machine ကနဲ့ 624 | MySQL ကို အခြားနည်းလမ်းတွေနဲ့ access လုပ်လို့ရပါတယ်။ 625 | ဒါပေမယ့်ဒီသင်ခန်းစာအတွက် MySQL container port 3306 ကို docker host port 626 | 6603 နဲ့ကျွန်တော် bindလိုက်ပါတယ်။ အခုကျွန်တော်တို့ Host machine ရဲ့ port 627 | 6603 ကိုသုံးပြီး MySQL container ကိုတိုက်ရိုက်ဆက်သွယ်နိုင်ပါတယ်။ 628 | 629 | အောက်က command ကတော့ host system port နဲ့ container port ကို bind ပေးမယ် 630 | command ဖြစ်ပါတယ်။ 631 | 632 | \begin{verbatim} 633 | $ docker run -it -p 8080:80 apache_image 634 | $ docker run -it -p 6603:3066 mysql_image 635 | \end{verbatim} 636 | 637 | \subsubsection{ဥပမာ ၂ \{\#-1\}}\label{ux1025ux1015ux1019--1} 638 | 639 | ဒီဥပမာမှာတော့ GitHub ပေါ်မှာရှိတယ် ကျွန်တော်တို့ရဲ နမူနာ project 640 | ကိုသုံးရမှာဖြစ်ပါတယ်။ အောက်က command ကိုသုံးပြီးတော့ repository ကို 641 | clone လိုက်ပါ။ 642 | 643 | \begin{verbatim} 644 | $ git clone https://github.com/tecrahul/dockerfile 645 | $ cd dockerfile 646 | \end{verbatim} 647 | 648 | အခု apacheimage ဆိုတဲ့အမည်နဲ့ docker image ကို build လိုက်ပါ။ 649 | 650 | \begin{verbatim} 651 | $ docker build -t apacheimage . 652 | \end{verbatim} 653 | 654 | အခု Docker run command ကိုသုံးပြီး‌တော့ containerကို runလိုက်ပါ။ 655 | container port 80 ပေါ်မှာ Apache service run သွားပါလိမ့်မယ်။ host system 656 | port 8080 ကို container port 80 နှင့် bind ဖြစ်ဖို့ \texttt{-p 8080: 80} 657 | ကိုသတ်မှတ်ရပါမယ်။ 658 | 659 | \begin{verbatim} 660 | $ docker run -it -p 8080:80 apacheimage 661 | \end{verbatim} 662 | 663 | အခု Web browser ထဲမှာ host machine ip နဲ့ port 8080 သုံးပြီး access 664 | လုပ်မယ်ဆိုလိုရှိရင် အောက်မှာပြထားတယ်ပုံအတိုင်း container ရဲ့ Apache 665 | service ပေါ်မှာ run နေတယ် web page တစ်မျက်မှာပေါ်လာပါလိမ့်မယ်။ 666 | ကျွန်တော့်ရဲ host machine ip ကတော့ 192.168.1.237 ဖြစ်ပါတယ်။ 667 | 668 | \begin{figure}[htbp] 669 | \centering 670 | \includegraphics{.gitbook/assets/docker_file_and_docker_port.png} 671 | \end{figure} 672 | 673 | \subsubsection{ဥပမာများ}\label{ux1025ux1015ux1019ux1019} 674 | 675 | ကျွန်တော်တို့ container တစ်ခုတည်းနဲ့ port များစွာကို bind နိုင်ပါတယ်။ 676 | ဒါပေမဲ့ image build မလုပ်ခင် port အားလုံးကို dockerfile ထဲမှာ 677 | \texttt{EXPOSE} လုပ်ထားရပါမယ်။ 678 | 679 | \begin{verbatim} 680 | $ docker run -it -p 8080:80,8081:443 image_name 681 | \end{verbatim} 682 | 683 | တစ်ကယ်လို့ host machine ရဲ့ interface တစ်ခုခုနဲ့ bind 684 | ချင်တယ်ဆိုလို့ရှိရင် အောက်ကအတိုင်း IP သက်မှတ်ပေးလိုက်လို့ရပါတယ်။ အောက်က 685 | ဉပမာအရ port 8080 နဲ့ 8081 ကို 127.0.0.1 IP နဲ့သာ access လုပ်လို့ရပါတယ်။ 686 | 687 | \begin{verbatim} 688 | $ docker run -it -p 127.0.0.1:8080:80,127.0.0.1:8081:443 image_name 689 | $ docker run -it -p 192.168.1.111:8080:80,92.168.1.111:8081:443 image_name 690 | \end{verbatim} 691 | 692 | \pagebreak 693 | 694 | \section{Docker Networking}\label{docker-networking} 695 | 696 | \subsection{Docker Networking}\label{docker-networking-1} 697 | 698 | Docker မှာ Network တွေကို docker containers နှင့် ဆက်သွယ်ဖို့အတွက် 699 | create နဲ့ manage လုပ်ဆောင်ချက်တွေ ကို ထောက်ပံ့ပေးထားပါတယ်။ 700 | \textbf{docker network command} ကို အသုံးပြုပြီးတော့ Docker network ကို 701 | manage လုပ်လို့ရပါတယ်။ 702 | 703 | \textbf{Syntax:} 704 | 705 | \begin{verbatim} 706 | $ docker network [options] 707 | \end{verbatim} 708 | 709 | အောက်ပါ Tutorial ကို လေ့လာပြီး Docker network ကို create , list နဲ့ 710 | manage စတဲ့ features တွေကို လုပ်ဆောင်လို့ရပါတယ်။ 711 | 712 | \subsection{Docker Networks များ ကို List 713 | လုပ်ခြင်း။}\label{docker-networks---list-} 714 | 715 | \texttt{ls} option ကို အသုံးပြုပြီး docker host ပေါ်မှာ ရှိတဲ့ docker 716 | network တွေ ကို List လုပ်လို့ရပါတယ်။ 717 | 718 | \begin{verbatim} 719 | $ docker network ls 720 | \end{verbatim} 721 | 722 | \subsection{Docker Network တခု Create 723 | လုပ်ခြင်း။}\label{docker-network--create-} 724 | 725 | Network အမျိုးအစား အမျိုးမျိုးကို Docker မှ ထောက်ပံ့ပေးထားပါတယ်။ သင့်ရဲ့ 726 | system ပေါ်မှာ a bridge Network တခုကို အောက်ပါ command အသုံးပြုပြီး 727 | create လို့ရပါတယ်။ 728 | 729 | \textbf{Syntax:} 730 | 731 | \begin{verbatim} 732 | $ docker network create -d [network_type] [network_name] 733 | \end{verbatim} 734 | 735 | \textbf{Example:} 736 | 737 | \begin{verbatim} 738 | $ docker network create -d bridge my-bridge-network 739 | \end{verbatim} 740 | 741 | \subsection{Container ကို Network 742 | ချိတ်ခြင်း။}\label{container--network-} 743 | 744 | Container နာမည် $သို့မဟုတ်$ Container ID ကို အသုံးပြုပြီး မည်သည့် 745 | container ကိုမဆို ရှိပြီးသား docker network နဲ့ ချိတ်ဆက်နိုင်ပါတယ်။ 746 | Container တစ်ခုကို Network နဲ့ တစ်ချိန် ချိတ်ဆက်ထားရုံနဲ့ အခြား 747 | container များကိုလဲ တူညီတဲ့ Network တခုတည်းပေါ်မှာ 748 | ဆက်သွယ်လုပ်ဆောင်လို့ရပါတယ်။ 749 | 750 | \textbf{Syntax:} 751 | 752 | \begin{verbatim} 753 | $ docker network connect [network_name] [container_name] 754 | \end{verbatim} 755 | 756 | \textbf{Example:} 757 | 758 | \begin{verbatim} 759 | $ docker network connect my-bridge-network centos 760 | \end{verbatim} 761 | 762 | \subsection{Docker Network နှင့် Container ကို disconnect 763 | လုပ်ခြင်း။}\label{docker-network--container--disconnect-} 764 | 765 | သင့်အနေနဲ့ Network တခုပေါ်ကနေ container ကို disconnect လုပ်ချင်ရင် 766 | အောက်ပါ command ကို အသုံးပြုနိုင်ပါတယ်။ 767 | 768 | \textbf{Syntax:} 769 | 770 | \begin{verbatim} 771 | $ docker network disconnect [network_name] [container_name] 772 | \end{verbatim} 773 | 774 | \textbf{Example:} 775 | 776 | \begin{verbatim} 777 | $ docker network disconnect my-bridge-network centos 778 | \end{verbatim} 779 | 780 | \subsection{Docker Network တခုရဲ့ အချက်အလက် 781 | ကိုကြည့်ခြင်း။}\label{docker-network---} 782 | 783 | Docker Network တခုရဲ့ အသေးစိတ်အချက် ကို ကြည့်ချင်ရင် inspect option ကို 784 | အသုံးပြုပြီး ကြည့်လို့ရပါတယ်။ 785 | 786 | \begin{verbatim} 787 | $ docker network inspect my-bridge-network 788 | \end{verbatim} 789 | 790 | inspect option ကို အသုံးပြုပြီး Docker Network တခုရဲ့ အသေးစိတ် 791 | အချက်အလက်ကိုကြည့်မယ် ဆိုရင် အခုလိုမြင်ရမှာ ဖြစ်ပါတယ်။ 792 | 793 | \subsection{Docker Network ကို Remove 794 | ခြင်း။}\label{docker-network--remove-} 795 | 796 | Docker network တွေကို remove လုပ်မယ်ဆိုရင် rm option ကို 797 | အသုံးပြုလို့ပါတယ်။ 798 | 799 | တခုထက်ပိုတဲ့ docker network တွေကို remove လုပ်ချင်ရင် network ID 800 | $သို့မဟုတ်$ network name တွေကို space ခံပြီး အသုံးပြုပြီး remove 801 | လုပ်လို့ရပါတယ်။ 802 | 803 | \textbf{Example:} 804 | 805 | \begin{verbatim} 806 | $ docker network rm my-bridge-network network2 network3 807 | \end{verbatim} 808 | 809 | သင့်အနေနဲ့ docker ပေါ်က အသုံးမပြုတော့တဲ့ network အားလုံးကို remove 810 | လုပ်ချင်ရင် prune option ကို အသုံးပြုပြီး remove လုပ်လို့ရပါတယ်။ 811 | 812 | \begin{verbatim} 813 | $ docker network prune 814 | \end{verbatim} 815 | 816 | \textbackslash{}pagebreak 817 | 818 | \section{Docker Networking Example}\label{docker-networking-example} 819 | 820 | \subsection{Docker Networking 821 | Example}\label{docker-networking-example-1} 822 | 823 | Docker Network tutorial ဖက်ပြီးပြီးဆိုရင် Example လေး 824 | စမ်းလုပ်ကြည့်လို့ရပါတယ်။ 825 | 826 | ကျွန်တော် တို့ ဒီ Tutorial မှာတော့ docker containers နှစ်ခုနဲ့ docker 827 | network အသေးစားလေး တခု လုပ်ပြသွားမှာ ဖြစ်ပါတယ်။ 828 | 829 | \begin{quote} 830 | MySQL -- A relational database server. 831 | 832 | PHPMyAdmin -- A web based interface to manage MySQL server. 833 | \end{quote} 834 | 835 | အခု tutorial မှာတော့ အခြား MySQL server ကို access လုပ်ဖို့အတွက် အခြား 836 | container တခုမှာ run ထားတဲ့ PHPMyAdmin ကို အသုံးပြ ပြသသွားမှာ ဖြစ်ပါတယ်။ 837 | 838 | \subsection{Network တခု Create လုပ်ခြင်း။}\label{network--create-} 839 | 840 | ပထမဦးစွာ အနေဖြင့် docker network အသစ် တခု ကို Create လုပ်ဖြစ်ပါတယ်။ 841 | my-bridge-network အမည်ရှိသော network အသစ်ကို အောက်ပါ comment အသုံးပြု 842 | ပြီး create လုပ်ပါ။ 843 | 844 | \begin{verbatim} 845 | $ docker network create -d bridge my-bridge-network 846 | \end{verbatim} 847 | 848 | \subsection{MySQL Container ကို Run ခြင်း။}\label{mysql-container--run-} 849 | 850 | အခု ကျွန်တော် တို့ MySQL docker container အသစ် ကို Run မှာ ဖြစ်ပါတယ်။ 851 | 852 | Default root user password အသစ်ကို သတ်မှတ်ဖို့အတွက် 853 | MYSQL\_ROOT\_PASSWORD variable ကို အောက်မှာပြထားတဲ့အတိုင်း ရိုက်ပါ။ 854 | 855 | \begin{verbatim} 856 | $ docker run --name mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql/mysql-server 857 | \end{verbatim} 858 | 859 | Container တခု create ပြီးနောက် စောစော က ကျွန်တော်တို့ create ထားတဲ့ 860 | my-bridge-network network နဲ့ ချိတ်ဆက်မှာ ဖြစ်ပါတယ်။ 861 | 862 | \begin{verbatim} 863 | $ docker network connect my-bridge-network mysql 864 | \end{verbatim} 865 | 866 | နောက် တဆင့် အနေနဲ့ MySQL container ရဲ့ IP address အသစ် 867 | ကိုကြည့်မှာဖြစ်ပါတယ်။ 868 | 869 | \begin{verbatim} 870 | $ docker inspect mysql | grep "IPAddress" 871 | \end{verbatim} 872 | 873 | \subsection{PHPMyAdmin Container ကို Run 874 | ခြင်း။}\label{phpmyadmin-container--run-} 875 | 876 | အခု ကျွန်တော်တို့ Docker container အသစ်ဖြစ်တဲ့ phpmyadmin ကို run မှာ 877 | ဖြစ်ပါတယ်။ 878 | 879 | MySQL ကို Run ခြင်း နောက်ဆုံးအဆင့်မှာ ရခဲ့တဲ့ MySQL container IP address 880 | ကို PMA\_HOST value အနေနဲ့ထည့်ပါမယ်။ 881 | 882 | \begin{verbatim} 883 | $ docker run --name phpmyadmin -d -e PMA_HOST=172.21.0.2 -p 8080:80 phpmyadmin/phpmyadmin 884 | \end{verbatim} 885 | 886 | ပြီးနောက် phpmyadmin container ကို my-bridge-network ထဲ add လိုက်ပါ။ 887 | 888 | \begin{verbatim} 889 | $ docker network inspect my-bridge-network 890 | \end{verbatim} 891 | 892 | \subsection{My-bridge-network Network ရဲ့ အချက်အလက် ကိုကြည့်ခြင်း 893 | ။}\label{my-bridge-network-network---} 894 | 895 | အပေါ်မှာ ပြခဲ့တဲ့ containers နှစ်ခု ကို ကျွန်တော် တို့ my-bridge-network 896 | ထဲ ထည့်ပြီးသွား တဲ့ အတွက် လက်ရှိ my-bridge-network ရဲ့ setting ကို 897 | ကြည့်လိုက်ရအောင် ။ 898 | 899 | \begin{verbatim} 900 | $ docker network inspect my-bridge-network 901 | \end{verbatim} 902 | 903 | My-bridge-network ရဲ့ setting ကို ကြည့်ရင်တော့ အခုလိုတွေ့ရမှာဖြစ်ပါတယ်။ 904 | 905 | \subsection{Allow MySQL to PHPMyAdmin 906 | Host}\label{allow-mysql-to-phpmyadmin-host} 907 | 908 | MySQL default အနေနဲ့ကတော့ remote hosts connect လုပ်တာကို 909 | ခွင့်မပြုထားပါဘူး။ 910 | 911 | ဆိုတော့ ကျွန်တော် တို့ က MySQL connection အတွက် phpmyadmin ကို allow 912 | 913 | လုပ်ပေးရမှာ ဖြစ်ပါတယ်။ MySQL container shell access ရဖို့အတွက် အောက်မှာ 914 | ပြထားတဲ့ လုပ်ရမှာဖြစ်ပါတယ်။ 915 | 916 | \begin{verbatim} 917 | $ docker exec -it mysql bash 918 | \end{verbatim} 919 | 920 | MySQL server ထဲကို MySQL container create လုပ်တုန်းက ပေးထဲ့ခဲ့တဲ့ 921 | Password ကို အသုံးပြုပြီး Login ဝင်လိုက်ပါ။ 922 | 923 | \begin{verbatim} 924 | bash-4.2# mysql -u root -p 925 | \end{verbatim} 926 | 927 | phpmyadmin host ip address နဲ့ user အသစ် create လုပ်လိုက်ပါ။ ဒီ tutorial 928 | ထဲမှာတော့ phpmyadmin host ip address ကတော့ `\textbf{172.21.0.3}` 929 | ဖြစ်ပါတယ်။ 930 | 931 | \begin{verbatim} 932 | mysql> GRANT ALL on *.* to 'dbuser'****@****'172.21.0.3' identified by 'secret'; 933 | Query OK, 0 rows affected, 1 warning (0.00 sec) 934 | 935 | mysql> flush privileges; 936 | Query OK, 0 rows affected (0.00 sec) 937 | 938 | mysql> exit 939 | Bye 940 | \end{verbatim} 941 | 942 | \subsection{Access MySQL with 943 | PHPMyAdmin}\label{access-mysql-with-phpmyadmin} 944 | 945 | နောက်ဆုံးအနေဖြင့် ကျွန်တော် တို့ ရဲ့ docker host system က port 8080 မှ 946 | တဆင့် phpmyadmin web user interface ကို ချိတ်ဆက်လို့ ရသွားပါတယ်။ 947 | 948 | phpMyAdmin ကို MySQL ရဲ့ အချက်အလက်တွေ သုံးပြီး အပေါ်မှာ ပြထားတဲ့ အတိုင်း 949 | Login ဝင်ရန် အသုံးပြုလို့ရပါတယ်။ 950 | 951 | \textbackslash{}pagebreak 952 | 953 | \section{Docker Compose}\label{docker-compose} 954 | 955 | \subsection{Docker Compose}\label{docker-compose-1} 956 | 957 | Docker Compose သည် Containers များကို Setup ပြုလုပ်ရာတွင် အသုံးပြုသည့် 958 | Tool တခုဖြစ်သည်။ Docker Compose ကိုသုံးခြင်းဖြင့် docker containers 959 | များကို Compose File တစ်ခုအနေဖြင့် ဖန်တီးနိုင်သည်။ Images and Containers 960 | များကို လည်း Signal Command ဖြင့် လွယ်ကူစွာ build လုပ်နိုင်ပါတယ်။ 961 | 962 | Docker Compose ပြုလုပ်ရန် အဆင့် $3$ ဆင့် ရှိသည်။ 963 | 964 | \begin{itemize} 965 | \itemsep1pt\parskip0pt\parsep0pt 966 | \item 967 | Dockerfile တွင် သုံးမည့် Services များကို သတ်မှတ်ပေးရန်\\ 968 | \item 969 | မိမိ Enviroment အတွက် သုံးမည့် Service and Application များကို 970 | docker-file အဖြစ်ပြုလုပ်ပြီး sample.yml format ဖြင့် သိမ်းဆည်းရမည်။\\ 971 | \item 972 | Run docker-compose up Command ဖြင့် Docker Containers Services များကို 973 | Run နိုင်သည်။ 974 | \end{itemize} 975 | 976 | \textbf{စက်တွင် Docker Enginer ရှိဖို့လိုပါသည်။ မရှိလျှင် Docker Engine 977 | Installation Section တွင်လေ့လာနိုင်ပါသည်။} 978 | 979 | \subsection{Install Docker Compose}\label{install-docker-compose} 980 | 981 | Docker Compose ကို Install ပြုလုပ်ရန် 982 | \href{https://github.com/docker/compose/releases}{\url{https://github.com/docker/compose/releases}} 983 | $Github Page$ တွင် ဝင်ရောက်လေ့လာ၍ ရယူနိုင်ပါသည်။ 984 | 985 | အောက်ပါ Command ဖြင့်လည်း Docker compose 1.16.1 ကို Install 986 | ပြုလုပ်နိုင်သည်။ Install မပြုလုပ်ခင် Docker versition နှင့် Specific 987 | ဖြစ်မဖြစ် စစ်ဆေးရန်လိုအပ်ပါသည်။ 988 | 989 | \begin{verbatim} 990 | $ curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 991 | 992 | $ chmod +x /usr/local/bin/docker-compose 993 | \end{verbatim} 994 | 995 | \subsection{Docker Compose Example 996 | File}\label{docker-compose-example-file} 997 | 998 | Docker Composer file သည် docker-compose.yml $format$ ဖြစ်ပြီး အောက်တွင် 999 | Version 3 docker composer file ကို Sample ပြထားသည်။ ဤ File သည် Sample 1000 | ဖြစ်၍ Service တခုဖြစ်သည့် WEB Name တစ်ခုကိုသာ ပြထားသည်။ 1001 | 1002 | \begin{verbatim} 1003 | version: '3' 1004 | services: 1005 | db: 1006 | image: mysql 1007 | container_name: mysql_db 1008 | restart: always 1009 | environment: 1010 | - MYSQL_ROOT_PASSWORD="secret" 1011 | web: 1012 | image: apache 1013 | build: . 1014 | container_name: apache_web 1015 | restart: always 1016 | ports: 1017 | - "8080:80" 1018 | \end{verbatim} 1019 | 1020 | \subsection{Docker Compose CLI 1021 | Reference}\label{docker-compose-cli-reference} 1022 | 1023 | Docker Compose နှင့် Docker Container များကို manage ပြုလုပ်ရန်အတွက် 1024 | docker-compose command ကိုလည်း subcommand အဖြင့် provides လုပ်ပေးသည်။ 1025 | 1026 | အောက်တွင့် Subcommand အချို့ကို လေ့လာနိုင်သည်။ သတိပြုရန်မှာ Container 1027 | Name နှင့် Services name ကို မမှားဖို့ သတိပြုရမည်။ 1028 | 1029 | \texttt{build -} build option ဖြင့် images များကို build လုပ်ပြီး 1030 | Services များကို အသုံးပြုနိုင်သည်။ 1031 | 1032 | \begin{verbatim} 1033 | $ docker-compose build ## Build all services 1034 | $ docker-compose build web ## Build single service 1035 | \end{verbatim} 1036 | 1037 | \texttt{up –} Current Directory အောက်ရှိ docker-composer.yml မှ docker 1038 | container နှင့် Services များကို Create ပြုလုပ်ရန်ဖြစ်သည်။ ( -d ) Switch 1039 | သည် Container ကို daemon mode ဖြင့် run စေရန်ဖြစ်သည်။ 1040 | 1041 | \begin{verbatim} 1042 | $ docker-compose up -d ## Create all containers 1043 | $ docker-compose up -d web ## Create single container 1044 | \end{verbatim} 1045 | 1046 | \texttt{down –} ဤ Option သည် containers များ၏ Neteork, Container Service 1047 | and Associate Images များကို ရပ်ရန်, ဖျက်ရန် အသုံးပြုနိုင်သည်။ 1048 | 1049 | \begin{verbatim} 1050 | $ docker-compose down ## Restart all containers 1051 | $ docker-compose down web ## Restart single container 1052 | \end{verbatim} 1053 | 1054 | \texttt{ps –} Container များ၏ Services,Status and Port များ၏ process 1055 | detail ကို သိနိုင်ရန် သုံးသည်။ 1056 | 1057 | \begin{verbatim} 1058 | $ docker-compose ps 1059 | \end{verbatim} 1060 | 1061 | \texttt{exec –} Running Containers များကို exec ပြုလုပ်ရန်သုံးသည်။ For 1062 | example, Web Service Run နေသည့် Container ကို list-file အနေဖြင့် 1063 | ကြည့်ရန်.. 1064 | 1065 | \begin{verbatim} 1066 | $ docker-compose exec web ls -l 1067 | \end{verbatim} 1068 | 1069 | \texttt{start -} Containers များကို Start လုပ်ရန်သုံးသည်။ 1070 | 1071 | \begin{verbatim} 1072 | $ docker-compose start ## Start all containers 1073 | $ docker-compose start web ## Start single container 1074 | \end{verbatim} 1075 | 1076 | \texttt{stop -} Running Containers များကို ရပ်လိုက်ရန် အသုံးပြုသည်။ 1077 | 1078 | \begin{verbatim} 1079 | $ docker-compose stop ## Stop all containers 1080 | $ docker-compose stop web ## Stop single container 1081 | \end{verbatim} 1082 | 1083 | \texttt{restart –} 1084 | 1085 | \begin{verbatim} 1086 | Containers များကို restart ပြုလုပ်ရန် သုံးသည်။ 1087 | \end{verbatim} 1088 | 1089 | \begin{verbatim} 1090 | $ docker-compose restart ## Restart all containers 1091 | $ docker-compose restart web ## Restart single container 1092 | \end{verbatim} 1093 | 1094 | \texttt{pause –} Containers များကို pause လုပ်ရန်သုံးသည်။ 1095 | 1096 | \begin{verbatim} 1097 | $ docker-compose pause ## Start all paused containers 1098 | $ docker-compose pause web ## Start single paused container 1099 | \end{verbatim} 1100 | 1101 | \texttt{rm –} Containers များကို ဖျက်ရန်, ဖယ်ရှားရန်သုံးသည်။ 1102 | 1103 | \begin{verbatim} 1104 | $ docker-compose rm ## Start all paused containers 1105 | $ docker-compose pause web ## Start single paused container 1106 | \end{verbatim} 1107 | 1108 | \textbackslash{}pagebreak 1109 | 1110 | \section{Docker Compose Example}\label{docker-compose-example} 1111 | 1112 | \subsubsection{Step 1 -- Create Directory 1113 | Structure}\label{step-1-create-directory-structure} 1114 | 1115 | ပထမဆုံး အနေဖြင့် docker compose အမည်ရှိ directory တစ်ခု တည်ဆောက်ပါမည်။ 1116 | ထို့ နောက် web application သိမ်းဆည်းရန် webapp အမည်ရှိ directory 1117 | တည်ဆောက်ပါမည်။ webapp directory ထဲတွင် web application ကိုစမ်းရန် အတက်ွ 1118 | index.html ကို တည်ဆောက်ပါမည်။ 1119 | 1120 | \begin{verbatim} 1121 | $ mkdir dockercompose && cd dockercompose 1122 | $ mkdir webapp && echo "It Works"; webapp/index.html 1123 | \end{verbatim} 1124 | 1125 | \subsubsection{Step 2 -- Create Dockerfile for 1126 | Webapp}\label{step-2-create-dockerfile-for-webapp} 1127 | 1128 | ပြီးနောက် web application အတက်ွ လိုအပ်သော dockerfile ကို webapp 1129 | directory ထဲမှာတည်ဆောက်ပါမည်။ dockerfile သည် web application အတက်ွ 1130 | လိုအပ်သော apache web server ပါ၀င်သည့် customized image တည်ဆာက် 1131 | ရန်ဖြစ်ပါသည်။ 1132 | 1133 | \begin{verbatim} 1134 | $ vim webapp/Dockerfile 1135 | \end{verbatim} 1136 | 1137 | ထို့ နောက် အောက် ပါ code များကို ပေါင်းထည့်ပါ။ 1138 | 1139 | \begin{verbatim} 1140 | FROM tecadmin/ubuntu-ssh:16.04 1141 | 1142 | RUN apt-get update \ 1143 | && apt-get install -y apache2 1144 | 1145 | COPY index.html /var/www/html/ 1146 | WORKDIR /var/www/html 1147 | CMD ["apachectl", "-D", "FOREGROUND"] 1148 | EXPOSE 80 1149 | \end{verbatim} 1150 | 1151 | \subsubsection{Step 3 -- Create Docker Compose 1152 | File}\label{step-3-create-docker-compose-file} 1153 | 1154 | ထို့ နောက် လက်ရှိ directory ထဲတင်ွ docker-compose.yml အမည်ရှိ docker 1155 | configuration ဖိုင် တစ်ခုကို တည်ဆောက်ပါမည်။ ထို configuration ဖိုင် သည် 1156 | အသုံးပြုမည့် containers အကုန်လုံးကို ကိုယ်စားပြုမည်ဖြစ်သည်။ 1157 | 1158 | \begin{verbatim} 1159 | $ vim docker-compose.yml 1160 | \end{verbatim} 1161 | 1162 | ထို့ နောက် အောက် ပါ code များကို ပေါင်းထည့်ပါ။ 1163 | 1164 | \begin{verbatim} 1165 | version: '3' 1166 | services: 1167 | db: 1168 | image: mysql 1169 | container_name: mysql_db 1170 | restart: always 1171 | environment: 1172 | - MYSQL_ROOT_PASSWORD="secret" 1173 | web: 1174 | image: apache 1175 | build: ./webapp 1176 | depends_on: 1177 | - db 1178 | container_name: apache_web 1179 | restart: always 1180 | ports: 1181 | - "8080:80" 1182 | \end{verbatim} 1183 | 1184 | အထက်ပါ ဖိုင်သည် containers နှစ်ခု အတက်ွဖြစ်သည်။ ပထမ container သည် mysql 1185 | database server အတက်ွဖြစ်ပြီး ဒုတိယသည် web server အတက်ွဖြစ်သည်။ Web 1186 | container သည် application များကို apache server တင်ွ 1187 | အလုပ်လုပ်စေမည်ဖြစ်သည်။ webapp directory ကို build directory အဖြစ် 1188 | သတ်မှတ်ထားခြင်းဖြစ်သည်။ 1189 | 1190 | \subsubsection{Step 4 -- Build Webapp 1191 | Image}\label{step-4-build-webapp-image} 1192 | 1193 | အောက်ပါ command ဖြင့် webapp directory အတင်ွးရှိ contents များနှင့် 1194 | Dockerfile ကို အသုံးပြု၍ apache အမည်ရှိ image တစ်ခုကို တည်ဆောက်ပါမည်။ 1195 | 1196 | \begin{verbatim} 1197 | $ docker-compose build 1198 | \end{verbatim} 1199 | 1200 | \begin{quote} 1201 | \begin{verbatim} 1202 | db uses an image, skipping 1203 | Building web 1204 | Step 1/6 : FROM tecadmin/ubuntu-ssh:16.04 1205 | 16.04: Pulling from tecadmin/ubuntu-ssh 1206 | b3e1c725a85f: Pull complete 1207 | 4daad8bdde31: Pull complete 1208 | 63fe8c0068a8: Pull complete 1209 | 4a70713c436f: Pull complete 1210 | bd842a2105a8: Pull complete 1211 | c41407f48fa7: Pull complete 1212 | 1fcfeb9b5ef4: Pull complete 1213 | 13195a7d2240: Pull complete 1214 | b86be64bbda8: Pull complete 1215 | 8c951fe917dc: Pull complete 1216 | f74bc80103b6: Pull complete 1217 | Digest: sha256:523d6fbc97954e9f77231bf54bfcfbbdd4805349887477fbac4a63dc735d777d 1218 | Status: Downloaded newer image for tecadmin/ubuntu-ssh:16.04 1219 | ---> bb63b492da01 1220 | Step 2/6 : RUN apt-get update && apt-get install -y apache2 1221 | ---> Running in 00be0dd717ce 1222 | [[[Removed long output from here]]] 1223 | ---> 41c731590234 1224 | Removing intermediate container 00be0dd717ce 1225 | Step 3/6 : COPY index.html /var/www/html/ 1226 | ---> 42f84d4c2243 1227 | Removing intermediate container 945aaee6cbde 1228 | Step 4/6 : WORKDIR /var/www/html 1229 | ---> 40bebd21e352 1230 | Removing intermediate container e13f5f412906 1231 | Step 5/6 : CMD apachectl -D FOREGROUND 1232 | ---> Running in ab0db1ef1c6e 1233 | ---> 587bf2323289 1234 | Removing intermediate container ab0db1ef1c6e 1235 | Step 6/6 : EXPOSE 80 1236 | ---> Running in 7bcbef52d585 1237 | ---> 8f03d4135394 1238 | Removing intermediate container 7bcbef52d585 1239 | Successfully built 8f03d4135394 1240 | Successfully tagged apache:latest 1241 | \end{verbatim} 1242 | \end{quote} 1243 | 1244 | \subsubsection{Step 5 -- Launch Docker 1245 | Containers}\label{step-5-launch-docker-containers} 1246 | 1247 | docker-compose up ကို အသုံးပြု၍ containers များကို စတင်စေမည်။ Daemon 1248 | mode ကို အသုံးပြုရန် -d option ကို အသုံးပြုနိုင်သည်။ 1249 | 1250 | \begin{verbatim} 1251 | $ docker-compose up -d 1252 | \end{verbatim} 1253 | 1254 | \subsubsection{Step 6 -- Update Content in Web Application 1255 | }\label{step-6-update-content-in-web-application} 1256 | 1257 | Web application တင်ွ ပြောင်းလဲမှု များပြုလုပ်လိုလျှင် 1258 | 1259 | \begin{verbatim} 1260 | $ echo "Welcome to Docker Compose Tutorial" >> webapp/index.html 1261 | \end{verbatim} 1262 | 1263 | ပြီးလျှင် အောက်ပါ command များကို သုံး၍ webapp container ကို ပြန်လည် 1264 | တည်ဆောက်ပြီး စတင် အလုပ်လုပ်စေနိုင်ပါသည်။ 1265 | 1266 | \begin{verbatim} 1267 | $ docker-compose build 1268 | $ docker-compose up -d 1269 | \end{verbatim} 1270 | 1271 | \textbackslash{}pagebreak 1272 | 1273 | \section{Docker Machine}\label{docker-machine} 1274 | 1275 | \subsection{Working With Docker 1276 | Machine}\label{working-with-docker-machine} 1277 | 1278 | Docker Machine သည် Command Line Tool တစ်ခုဖြစ်ပြီး Dockerized Hosts 1279 | များကို Provisioning and Managing ပြုလုပ်ရန် ဖြစ်သည်။ အရှင်းဆုံးပြောရရင် 1280 | Virtual Machine များကို Docker Engine နဲ့ Local or Remote System အတွက် 1281 | Install ပြုလုပ်နိုင်တယ်။ Docker Machine များသည် Virtualbox, Vmware, 1282 | Digital Ocean နှင့် Amazone စသည့် Platform များပေါ်တွင်လည်း 1283 | ကောင်းစွာအလုပ်လုပ်နိုင်သည်။ 1284 | 1285 | \subsubsection{Install Docker Machine}\label{install-docker-machine} 1286 | 1287 | Docker Machine ကို install ပြုလုပ်ရန် အောက်တွင်ဖော်ပြထားပါသည်။ ပြီးတော့ 1288 | \href{https://github.com/docker/machine/releases}{\url{https://github.com/docker/machine/releases}} 1289 | တွင်လည်း နောက်ဆုံးထွတ် Docker Machine Version ကို 1290 | စစ်ဆေးရွေးချယ်နိုင်ပါသည်။ 1291 | 1292 | \begin{verbatim} 1293 | ** Please Note: : " https://github.com/docker/machine/releases " 1294 | \end{verbatim} 1295 | 1296 | \paragraph{For Linux Systems:}\label{for-linux-systems} 1297 | 1298 | \begin{verbatim} 1299 | $ curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine 1300 | 1301 | $ chmod +x /usr/local/bin/docker-machine 1302 | \end{verbatim} 1303 | 1304 | စသည့် Command ကို အသုံးပြုပြီး Docker Machine ကို Download ပြုလုပ်ပြီး 1305 | Install ပြုလုပ်နိုင်သည်။ 1306 | 1307 | \paragraph{For OSX Systems:}\label{for-osx-systems} 1308 | 1309 | \begin{verbatim} 1310 | $ curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine 1311 | 1312 | $ chmod +x /usr/local/bin/docker-machine 1313 | \end{verbatim} 1314 | 1315 | စသည့် Command များကို အသုံးပြုပြီး download and install ပြုလုပ်နိုင်သည်။ 1316 | 1317 | \paragraph{For Windows Systmes with Git 1318 | Bash:}\label{for-windows-systmes-with-git-bash} 1319 | 1320 | Windows 10 နှင့် အထက်တွင်သာ အသုံးပြုရန် အကြံပြုလိုပါသည်။ 1321 | 1322 | \begin{verbatim} 1323 | $ if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi 1324 | 1325 | $ curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" 1326 | 1327 | $ chmod +x "$HOME/bin/docker-machine.exe" 1328 | \end{verbatim} 1329 | 1330 | စသည့် Command များကို အသုံးပြုပြီး download and install ပြုလုပ်နိုင်သည်။ 1331 | 1332 | \subsubsection{Docker Machine Supported 1333 | Drivers:}\label{docker-machine-supported-drivers} 1334 | 1335 | Docker Machine အတွက် Drivers များကို local and Cloud System များကို 1336 | Provide လုပ်ပေးပါသည်။ 1337 | 1338 | Dockerized hosts များ၏ ဖော်ပြပါ hosting Service များကို Docker Machine 1339 | တခုတည်းဖြင့် Manage ပြုလုပ်နိုင်ပါသည်။ 1340 | 1341 | \begin{itemize} 1342 | \itemsep1pt\parskip0pt\parsep0pt 1343 | \item 1344 | Amazon Web Services\\ 1345 | \item 1346 | Microsoft Azure\\ 1347 | \item 1348 | Digital Ocean\\ 1349 | \item 1350 | Exoscale\\ 1351 | \item 1352 | Google Compute Engine\\ 1353 | \item 1354 | Generic\\ 1355 | \item 1356 | 6Microsoft Hyper-V\\ 1357 | \item 1358 | OpenStack\\ 1359 | \item 1360 | Rackspace\\ 1361 | \item 1362 | IBM Softlayer\\ 1363 | \item 1364 | Oracle VirtualBox\\ 1365 | \item 1366 | VMware vCloud Air\\ 1367 | \item 1368 | VMware Fusion\\ 1369 | \item 1370 | VMware vSphere 1371 | \end{itemize} 1372 | 1373 | \textbackslash{}pagebreak 1374 | 1375 | \section{Docker Prune}\label{docker-prune} 1376 | 1377 | \subsection{Prune Objects in Docker}\label{prune-objects-in-docker} 1378 | 1379 | ပုံမှန်ဆို docker ကသူအသုံးမပြုတော့တဲ့ objects ‌တွေကို 1380 | သူ့ကိုဖျက်ပါလို့မပြောမချင်း မဖျက်ဘဲ ဒီတိုင်းထားထားတတ်ပါတယ်။ ဒီနေရာမှာ 1381 | objects ဆိုတာ docker နဲ့ဆိုင်တဲ့ images, containers, volumes နဲ့ network 1382 | တို့ကိုပြောတာပါ။ ဒါကြောင့် သူ့မှာ unused objects တွေကိုဖျက်ပစ်ဖို့အတွက် 1383 | option တစ်ခုထည့်ပေးထားပါတယ်။ ဒါကတော့ docker prune ဆိုတဲ့ command ပါ။ 1384 | \textbf{Syntax:} 1385 | 1386 | \begin{verbatim} 1387 | $ docker [object] prune [options] 1388 | \end{verbatim} 1389 | 1390 | \subsubsection{Prune all unused 1391 | Objects.}\label{prune-all-unused-objects.} 1392 | 1393 | အောက်က command ကတော့ docker က အသုံးမပြုတော့တဲ့ container, image, volume 1394 | နဲ့ network တွေကို ဖယ်ရှားပေးပါလိမ့်မယ်။ 1395 | 1396 | \begin{verbatim} 1397 | $ docker system prune 1398 | \end{verbatim} 1399 | 1400 | \texttt{-{}-‌all option} ကတော့ unused ဖြစ်နေတဲ့ docker 1401 | နဲ့ပါတ်သတ်တာအကုန်ကိုဆိုလိုတာပါ။ 1402 | 1403 | \begin{verbatim} 1404 | $ docker system prune --all 1405 | \end{verbatim} 1406 | 1407 | \texttt{-{}-filter} ဆိုတဲ့ option ကတော့ key=value နဲ့တွဲသုံးရပါတယ်။ ဥပမာ 1408 | အောက်က command က until=24 hours ဆိုတာကလွန်ခဲ့တဲ့ 24 နာရီမတိုင်ခင်က build 1409 | ခဲ့တဲ့ images တွေ၊ stop ဖြစ်နေတဲ့ containers တွေ ၊ အသုံးမပြုတော့တဲ့ 1410 | network တွေကိုဖျက်ပစ်မယ်လို့ပြောတာပါ။ 1411 | 1412 | \begin{verbatim} 1413 | $ docker system prune --filter "until=24h" 1414 | \end{verbatim} 1415 | 1416 | \subsubsection{Prune Images}\label{prune-images} 1417 | 1418 | အောက်က command ကိုတော့ Unused images 1419 | တွေကိုပဲရွေးဖျက်ချင်တယ်ဆိုရင်သုံးလို့ရပါတယ်။ 1420 | 1421 | \begin{verbatim} 1422 | $ docker image prune 1423 | \end{verbatim} 1424 | 1425 | \subsubsection{Prune containers}\label{prune-containers} 1426 | 1427 | Stop/exited ဖြစ်သွားတဲ့ Containers တွေကိုပဲရွေးဖျက်ချင်ရင်တော့ အောက်က 1428 | command ကိုသုံးလို့ရပါတယ်။ 1429 | 1430 | \begin{verbatim} 1431 | $ docker container prune 1432 | \end{verbatim} 1433 | 1434 | \subsubsection{Prune Volume}\label{prune-volume} 1435 | 1436 | အသုံးမပြုတော့တဲ့ volumes တွေကိုဖျက်ချင်တဲ့အခါမှာက အောက်ကလိုမျိုး 1437 | သုံးနိုင်ပါတယ်။ 1438 | 1439 | \begin{verbatim} 1440 | $ docker volume prune 1441 | \end{verbatim} 1442 | 1443 | \subsubsection{Prune Network}\label{prune-network} 1444 | 1445 | အပေါ်က command တွေလိုပဲ network တွေကိုဖယ်ရှားချင်တဲ့အခါမှာလည်း prune 1446 | ကိုအသုံးပြနိုင်ပါတယ်။ 1447 | 1448 | \begin{verbatim} 1449 | $ docker network prune 1450 | \end{verbatim} 1451 | 1452 | \subsubsection{Conclusion}\label{conclusion} 1453 | 1454 | Yes or No question တွေမပေးဘဲ တန်းဖျက်ချင်တာသေချာတယ်ဆိုရင်တော့ အနာက်ကနေ 1455 | force option အနေနဲ့ -f ကိုအသုံးပြုပြီးဖျက်နိုင်ပါတယ်။ 1456 | 1457 | \begin{verbatim} 1458 | $ docker system prune -f 1459 | $ dokcer image prune -f 1460 | $ docker container prune -f 1461 | $ docker network prune -f 1462 | $ docker volume prune -f 1463 | \end{verbatim} 1464 | 1465 | Options တွေကိုအခြေအနေအပေါ်မူတည်ပြီးတော့လည်း ကိုယ့်စိတ်ကြိုက် 1466 | တွဲသုံးနိုင်ပါတယ်။ 1467 | 1468 | \begin{verbatim} 1469 | $ docker system prune -a -f 1470 | $ dokcer image prune -a -f 1471 | $ docker container prune -a -f 1472 | $ docker network prune -a -f 1473 | $ docker volume prune -a -f 1474 | \end{verbatim} 1475 | 1476 | Reference from 1477 | \href{https://tecadmin.net/tutorial/docker/docker-prune-unused-objects/}{tecadmin}. 1478 | 1479 | \textbackslash{}pagebreak 1480 | 1481 | \begin{center}\rule{3in}{0.4pt}\end{center} 1482 | 1483 | \subsection{description: Content and Translator 1484 | List}\label{description-content-and-translator-list} 1485 | 1486 | \section{Sponsor}\label{sponsor} 1487 | 1488 | \subsection{Our Hero List}\label{our-hero-list} 1489 | 1490 | \textbf{Becoming a kindly super hero:} 1491 | 1492 | waiyanwinhtain\\\href{https://fb.com/waiyanwinhtain2016}{\url{https://fb.com/waiyanwinhtain2016}} 1493 | 1494 | khinchanmyaehtun\\\href{https://fb.com/profile.php?id=100010791125505}{\url{https://fb.com/profile.php?id=100010791125505}} 1495 | 1496 | pyaephyoaung\\\href{https://fb.com/pyae.aung.7127}{\url{https://fb.com/pyae.aung.7127}} 1497 | 1498 | zawyelwin\\\href{https://fb.com/zawye.lwin.9}{\url{https://fb.com/zawye.lwin.9}} 1499 | 1500 | thutatun\\\href{https://fb.com/tamoeout.pisi}{\url{https://fb.com/tamoeout.pisi}} 1501 | 1502 | kyawkyaw\\\href{https://fb.com/alin.thit.79}{\url{https://fb.com/alin.thit.79}} 1503 | 1504 | nyinyisoewin\\\href{https://fb.com/NyiNyiSoeWin.nnsw}{\url{https://fb.com/NyiNyiSoeWin.nnsw}} 1505 | 1506 | minthatti\\\href{https://fb.com/thuta.livingunderthesamebluesky}{\url{https://fb.com/thuta.livingunderthesamebluesky}} 1507 | 1508 | sanjay\\\href{https://fb.com/sanjay.ttg}{\url{https://fb.com/sanjay.ttg}} 1509 | 1510 | \subsubsection{Original Content from 1511 | TecAdmin.net}\label{original-content-from-tecadmin.net} 1512 | 1513 | \{\% code title=``original-article.sh'' \%\} 1514 | 1515 | \begin{verbatim} 1516 | # Special Thank to TecAdmin 1517 | lynx https://tecadmin.net/tutorial/docker/ 1518 | \end{verbatim} 1519 | 1520 | \{\% endcode \%\} 1521 | 1522 | \subsubsection{Relative Content list}\label{relative-content-list} 1523 | 1524 | \textbf{Ubuntu Wiki - Burmese} 1525 | 1526 | \begin{itemize} 1527 | \itemsep1pt\parskip0pt\parsep0pt 1528 | \item 1529 | \href{https://ubuntu-mm.net/umw/}{\url{https://ubuntu-mm.net/umw/}}\\ 1530 | \item 1531 | \href{https://github.com/fossmyanmar/ubuntu-mm-wiki}{\url{https://github.com/fossmyanmar/ubuntu-mm-wiki}} 1532 | \end{itemize} 1533 | 1534 | \textbf{Docker Study Jams} 1535 | 1536 | \begin{itemize} 1537 | \itemsep1pt\parskip0pt\parsep0pt 1538 | \item 1539 | \href{http://docker-study-jams.herokuapp.com/}{\url{http://docker-study-jams.herokuapp.com/}}\\ 1540 | \item 1541 | \href{https://github.com/fossmyanmar/docker-kubernetes}{\url{https://github.com/fossmyanmar/docker-kubernetes}} 1542 | \end{itemize} 1543 | 1544 | \paragraph{PDF Download}\label{pdf-download} 1545 | 1546 | \href{https://github.com/fossmyanmar/docker-quick-start/raw/master/latex/Docker_Quick_Start-Pyidaungsu_Khayay.pdf}{{[}https://github.com/fossmyanmar/docker-quick-start/raw/master/latex/Docker\textbackslash{}\_Quick\textbackslash{}\_Start-Pyidaungsu\textbackslash{}\_Khayay.pdf{]}(https://github.com/fossmyanmar/docker-quick-start/raw/master/latex/Docker\_Quick\_Start-Pyidaungsu\_Khayay.pdf)} 1547 | 1548 | \textbackslash{}pagebreak 1549 | -------------------------------------------------------------------------------- /latex/body.md: -------------------------------------------------------------------------------- 1 | # Docker Intro 2 | 3 | ## Docker Intro 4 | 5 | Docker ဆိုတာ software container platform တစ်ခုပဲ ဖြစ်ပါတယ်။ Docker ဟာဆိုရင် application ​တွေ run ဖို့၊ develop ဖို့၊ ship ဖို့ လုပ်ထားတဲ့ open source platform တစ်ခုဖြစ်ပါတယ်။Docker က သင့်ရဲ့ application တစ်ခုစီတိုင်း အတွက် သီးသန့် တည်ရှိတဲ့ environment တစ်ခုကို ဖန်တီး​ပေးမှာဖြစ်ပါတယ်။ 6 | 7 | ## Docker Engine 8 | 9 | Docker Engine ဟာဆိုရင် Docker ရဲ့ core ဖြစ်ပြီး Docker containers ​တွေကို create ပြုလုပ်​ခြင်း၊ shipping လုပ် ခြင်း၊ run ခြင်း စတာ ​တွေကို လုပ်​ဆောင်​ပေးပါတယ်။ Docker Engine ​တွေက Client- Server architecture အရ 10 | 11 | * Server daemon process တစ်ခုဟာစဥ်ဆက်မပျက် run ခြင်း 12 | * ကျန်ရှိ​သော API ဟာ daemon ​တွေကို ချိတ်ဆက်ပြီး instruction ​တွေ ကို daemon ​တွေဆီ ​ပေးပို့ခြင်း 13 | * Command Line Interface \(CLI\) အဖြစ်​ဆောင်ရွက်ခြင်း စတ​တွေကို လုပ်​ဆောင်​ပေးပါတယ်။ 14 | 15 | ![](.gitbook/assets/screenshot-129.png) 16 | 17 | \pagebreak 18 | 19 | # Docker Features 20 | 21 | ## Features of Docker 22 | 23 | ### Docker container 24 | 25 | Docker container တစ်ခုဟာ application တစ်ခု packaging လုပ်ဖို့၊ running လုပ်ဖို့ သီးသန့် environment တစ်ခု အဖြစ်​ရှိ​တာ ဖြစ်ပါတယ်။ပိုမွန်​မြန်ဆန်​ကောင်းမွန်တဲ့ computing ကိုရနိုင်ဖို့ Docker မှာ application တစ်ခုကို side by side ယှဥ်လျက် run နိုင်မှာ ဖြစ်ပါတယ်။ ပြီး​တော့ Single Host တစ်ခုမှာပဲ တစ်ခုထက်ပိုတဲ့ containers ​တွေကို run နိုင်ပါ​သေးတယ်။ အဲ့ containers ​တွေကိုပဲ run ထားတဲ့ host က္​နေ တစ်ခြား host တစ်ခုဆီကို ​ပြောင်း​​ရွှေ့ နိုင်ဦးမှာဖြစ်ပါတယ်။ 26 | 27 | \pagebreak 28 | 29 | # Docker Install 30 | 31 | ## Docker installation on Ubuntu 32 | 33 | **Docker ကို ubuntu OS မှာ install ပြုလုပ်ဖို့ အောက်ပါ command တွေကို တခုချင်း terminal တွင်ရိုက်ထည့်ပါ။** 34 | 35 | * ပထမဆုံး လက်ရှိ package များကို update ပြုလုပ်ပါမယ်။ 36 | 37 | ```text 38 | $ sudo apt-get update 39 | ``` 40 | 41 | * ထို့နောက် လိုအပ်တဲ့ package များကို သွင်းပါမယ်။ 42 | 43 | ```text 44 | $ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 45 | ``` 46 | 47 | * ထို့နောက် Docker repository ကို add လုပ်ပါမယ်။ 48 | 49 | ```text 50 | $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 51 | ``` 52 | 53 | ```text 54 | $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 55 | ``` 56 | 57 | * နောက်ဆုံးအဆင့်အနေနဲ့ update ပြုလုပ်ပြီး docker ကို သွင်းနိုင်ပါပြီ။ 58 | 59 | ```text 60 | $ sudo apt-get update 61 | ``` 62 | 63 | ```text 64 | $ sudo apt-get install docker-ce docker-ce-cli containerd.io 65 | ``` 66 | 67 | * Docker service run နေကြောင်းကို သိရှိနိုင်ရန် ယခုကဲ့သို ရိုက်ထည့်ပါ။ 68 | 69 | ```text 70 | $ sudo systemctl status docker 71 | ``` 72 | 73 | `Active: active` ဖြစ်နေပါက docker service run နေကြောင်း သိရှိနိုင်ပါတယ်။ 74 | 75 | Docker daemon service နှင့်အတူ docker cli ကိုပါ တပါးတည်း ထည့်သွင်းထားတဲ့ အတွက် docker cli ကိုလဲ အသုံးပြုနိုင်မှာဖြစ်ပါတယ်။Docker command များ ကို ယခုလို ကြည့်ရှူနိုင်ပါတယ်။ 76 | 77 | ```text 78 | $ docker 79 | ``` 80 | 81 | ```text 82 | Output: 83 | 84 | 85 | Management Commands: 86 | builder Manage builds 87 | config Manage Docker configs 88 | container Manage containers 89 | context Manage contexts 90 | engine Manage the docker engine 91 | image Manage images 92 | network Manage networks 93 | node Manage Swarm nodes 94 | plugin Manage plugins 95 | secret Manage Docker secrets 96 | service Manage services 97 | stack Manage Docker stacks 98 | swarm Manage Swarm 99 | system Manage Docker 100 | trust Manage trust on Docker images 101 | volume Manage volumes 102 | 103 | Commands: 104 | 105 | attach Attach local standard input, output, and error streams to a running container 106 | build Build an image from a Dockerfile 107 | commit Create a new image from a container's changes 108 | cp Copy files/folders between a container and the local filesystem 109 | create Create a new container 110 | diff Inspect changes to files or directories on a container's filesystem 111 | events Get real time events from the server 112 | exec Run a command in a running container 113 | export Export a container's filesystem as a tar archive 114 | history Show the history of an image 115 | images List images 116 | import Import the contents from a tarball to create a filesystem image 117 | info Display system-wide information 118 | inspect Return low-level information on Docker objects 119 | kill Kill one or more running containers 120 | load Load an image from a tar archive or STDIN 121 | login Log in to a Docker registry 122 | logout Log out from a Docker registry 123 | logs Fetch the logs of a container 124 | pause Pause all processes within one or more containers 125 | port List port mappings or a specific mapping for the container 126 | ps List containers 127 | pull Pull an image or a repository from a registry 128 | push Push an image or a repository to a registry 129 | rename Rename a container 130 | restart Restart one or more containers 131 | rm Remove one or more containers 132 | rmi Remove one or more images 133 | run Run a command in a new container 134 | save Save one or more images to a tar archive (streamed to STDOUT by default) 135 | search Search the Docker Hub for images 136 | start Start one or more stopped containers 137 | stats Display a live stream of container(s) resource usage statistics 138 | stop Stop one or more running containers 139 | tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE 140 | top Display the running processes of a container 141 | unpause Unpause all processes within one or more containers 142 | update Update configuration of one or more containers 143 | version Show the Docker version information 144 | wait Block until one or more containers stop, then print their exit codes 145 | ``` 146 | 147 | ဒါပေမယ့် docker ကို ထည့်သွင်းလိုက်ချိန်မှာ root user အနေနဲ့သာ docker နဲ့ သတ်ဆိုင်တဲ့ command တွေကို ရိုက်သွင်းနိုင်မှာဖြစ်ပါတယ်။ မိမိက docker နဲ့ command တခုခုကို run မယ်ဆိုရင် sudo command နဲ့သာ အသုံးပြုနိုင်မှာ ဖြစ်ပါတယ်။ ဥပမာ.. 148 | 149 | ```text 150 | $ sudo docker image ls 151 | ``` 152 | 153 | Docker ကို ထည့်သွင်း ချိန် docker ဆိုတဲ့ linux user group တခုကို docker က create လုပ်သွားမှာဖြစ်ပါတယ်။ တကယ်လို့ မိမိက sudo ကို အမြဲ မထည့်ပေးစေချင်ဘူးဆိုရင် docker group ထဲကို လက်ရှိ user ကို add ပေးလိုက်ခြင်းဖြစ် sudo command ကို အမြဲရိုက်ထည့်ပေးစရာမလိုပဲ အသုံးပြုနိုင်ပါတယ်။ 154 | 155 | ```text 156 | $ sudo usermod -aG docker ${USER} 157 | ``` 158 | 159 | ထို့နောက် docker service ကို restart ချပါ။ 160 | 161 | ```text 162 | $ sudo systemctl restart docker 163 | ``` 164 | 165 | Docker service active ဖြစ်လာပါက docker ကို စတင် အသုံးပြုနိုင်မှာဖြစ်ပါတယ်။ 166 | 167 | \pagebreak 168 | 169 | # Docker Container 170 | 171 | ## Docker Container 172 | 173 | Docker container ဆိုတာ docker image တစ်ခုကို run လိုက်တဲ့အခါမှာ တည်ဆောက်လိုက်တဲ့ instance လေးတစ်ခုပဲ ဖြစ်ပါတယ်။ Container တစ်လုံးဟာ application တွေကို အလုပ်လုပ်စေဖို့အတွက်လိုအပ်တဲ့ libraries တွေနဲ့ setting တွေကိုသာ ပေါင်းစပ်ဖွဲ့စည်းထားတာ ဖြစ်ပါတယ်။ အဲ့ဒါဟာ Application တစ်ခုအတွက် အရမ်းကိုပေ့ါးပါးပြီး အလွယ်တစ်ကူရွှေ့ပြောင်းလို့ရ လောက်အောင် သေးငယ်တဲ့ environment တစ်ခုပဲ ဖြစ်ပါတယ်။ 174 | 175 | ## Run Docker Container 176 | 177 | System ပေါ်မှာ Docker Container တစ်လုံးကို စတင်မောင်းနှင်ရန်အတွက် docker run command ကို အသုံးပြုပါတယ်။ ဥပမာအားဖြင့် - အောက်ပါ command ကိုရိုက်လျှင် hello-world image ကိုအသုံးပြု၍ docker container တစ်လုံးကို တည်ဆောက်ပါလိမ့်မယ်။ 178 | 179 | ```text 180 | $ docker run hello-world 181 | ``` 182 | 183 | အခု .. CentOS operating system ကို အသုံးပြုပြီးတေ့ာ အလုပ်လုပ်နေမယ့် docker container တစ်လုံးကို တည်ဆောက်ပါမယ်။ -it ဆိုတဲ့ option က pseudo-TTY အသုံးပြုလို့ရတဲ့ interactive session တစ်ခုကို ပေးပါတယ်။ အဲ့ဒီကနေ container shell ကို ချက်ချင်းသုံးလို့ရပါလိမ့်မယ်။ 184 | 185 | ```text 186 | $ docker run -it centos 187 | ``` 188 | 189 | ![](.gitbook/assets/2_run_ti_centos.png) 190 | 191 | ကျွန်တော်တို့ customized လုပ်ထားတဲ့ ssh access enabled လုပ်ထားတဲ့ Ubuntu docker image ကိုလည်း [docker hub repository](https://hub.docker.com/r/tecadmin/ubuntu-ssh/) မှာ စမ်းကြည့်လို့ရပါတယ်။ 192 | 193 | ```text 194 | $ sudo docker run -d -p 2222:22 tecadmin/ubuntu-ssh:16.04 195 | ``` 196 | 197 | ## List Docker Containers 198 | 199 | လက်ရှိ System ပေါ်မှာ အလုပ်လုပ်နေတဲ့ containers တွေအားလုံးကို list ထုတ်ကြည့်ချင်ရင် docker ps command ကိုသုံးပါတယ်။ အဲဒီ command က ရပ်ထားတဲ့ container တွေကိုတော့ list ထုတ်ပြမှာ မဟုတ်ပါဘူး။ အဲ့ဒါက Container ID, Container နာမည် နဲ့ container နဲ့ပတ်သက်တဲ့ အခြားအသုံးဝင်တဲ့ information တွေကိုပါ ပြပေးမှာဖြစ်ပါတယ်။ 200 | 201 | ```text 202 | $ docker ps 203 | ``` 204 | 205 | အပေါ်က command မှာ -a ဆိုတဲ့ option ကိုပါ ထည့်သုံးမယ်ဆိုရင်တော့ ရပ်ထားတဲ့ container တွေကိုပါ list ထုတ်ပြပေးမှာဖြစ်ပါတယ်။ 206 | 207 | ```text 208 | $ docker ps -a 209 | ``` 210 | 211 | ![](.gitbook/assets/4a_ps-large-resolution.png) 212 | 213 | ## Find all Details of Container 214 | 215 | Docker container တစ်လုံးနဲ့ပတ်သက်တဲ့ အသေးစိတ်အချက်အလက်အားလုံးကို ရှာချင်တဲ့အခါမှာတော့ docker inspect command ကို အသုံးပြုပါတယ်။ Container ရဲ့ အသေးစိတ်အချက်အလက်တွေကို သိချင်တယ်ဆိုရင်တော့ ကိုယ်သိချင်တဲ့ container ရဲ့ container ID သို့မဟုတ် container နာမည်ကို တိတိကျကျထည့်ပေးရမှာဖြစ်ပါတယ်။ 216 | 217 | ```text 218 | $ docker inspect cc5d74cf8250 219 | ``` 220 | 221 | ## Delete Docker Container 222 | 223 | System ထဲမှာရှိနေတဲ့ docker container ကို ဖျက်ချင်တယ်ဆိုရင်တော့ docker rm command ကို အသုံးပြုပါတယ်။ Container ကိုဖျက်ချင်တယ်ဆိုရင်တော့ ကိုယ်ဖျက်ချင်တဲ့ container ရဲ့ container ID သို့မဟုတ် container နာမည်ကို တိတိကျကျထည့်ပေးရမှာဖြစ်ပါတယ်။ 224 | 225 | ```text 226 | $ docker stop cc5d74cf8250 227 | $ docker rm cc5d74cf8250 228 | ``` 229 | 230 | \pagebreak 231 | 232 | # Docker Images 233 | 234 | ## Docker Images 235 | 236 | Docker image ဆိုတာကတော့ container တစ်ခုမှာ လိုချင်တဲ့ application တွေ ကိုအသုံးပြုလို့ရအောင်ပြုလုပ်ထားတဲ့ file တစ်ခုပါပဲ။ Docker image တွေဟာ ပြုလုပ်ပြီးတဲ့အချိန်ကစပြီး ဖျက်လိုက်တဲ့အချိန်အထိ အပြောင်းအလဲမရှိနိုင်ပါဘူး။ ထပ်ပြီးပြင်ဆင်လို့လည်းမရနိုင်ပါဘူး။ ပြီးတော့ image တွေဟာ တစ်ခြားသူတွေနဲ့လည်း မျှဝေအသုံးပြုနိုင်ပါသေးတယ်။ ဆိုလိုတာကတော့ တစ်ယောက်ပြုလုပ်ထားတဲ့ image ကိုသုံးပြီး နောက်တစ်ယောက်က ထပ်တူကျတဲ့ container တစ်ခုကို အသုံးပြုနိုင်တာမျိုးပါ။ 237 | 238 | အောက်မှာတော့ docker images တွေကိုအသုံးပြုဖို့အတွက် အခြေခံကျတဲ့ command တွေကို အကျဥ်းဖော်ပြပေးထားပါတယ်။ 239 | 240 | ## List Docker Images 241 | 242 | docker images ဆိုတဲ့ command နဲ့ ကိုယ့်စနစ်ထဲက အသုံးပြုလို့ရတဲ့ image တွေကိုစစ်ကြည့်လို့ရနိုင်ပါတယ်။ 243 | 244 | ```text 245 | $ docker images 246 | ``` 247 | 248 | ![](.gitbook/assets/1_ls.png) 249 | 250 | ## Search Docker Images 251 | 252 | docker search ဆိုတဲ့ command ကတော့ [docker hub](https://hub.docker.com/) ကနေ လိုချင်တဲ့ image ကိုရှာတဲ့အခါသုံးပါတယ်။ ဥပမာ WordPress အတွက် images တွေကိုရှာမယ်ဆိုရင် - 253 | 254 | ```text 255 | $ docker search wordpress 256 | ``` 257 | 258 | ![](.gitbook/assets/2_search-large-resolution.png) 259 | 260 | ## Download Docker Images 261 | 262 | လိုချင်တဲ့ image ကိုရှာတွေ့ပြီဆိုရင်တော့ docker pull ဆိုတဲ့ command နဲ့ ကိုယ့်စက်ထဲကို download ဆွဲနိုင်ပါတယ်။ ဥပမာ Docker hub ကနေ WordPress အတွက်နောက်ဆုံးversion ဖြစ်တဲ့image ကို download ချမယ်ဆိုရင် 263 | 264 | ```text 265 | $ docker pull wordpress 266 | ``` 267 | 268 | ![](.gitbook/assets/3_pull_wordpress.png) 269 | 270 | ## Delete Docker Images 271 | 272 | မလိုအပ်တော့တဲ့ image တွေကို ဖျက်ပစ်ဖို့အတွက်ကတော့ docker rmi ဆိုတဲ့ command ကိုသုံးပါတယ်။ ဥပမာ - 273 | 274 | ```text 275 | $ docker rmi wordpress 276 | ``` 277 | 278 | ![](.gitbook/assets/4_rmi.png) 279 | 280 | \pagebreak 281 | 282 | # Dockerfile 283 | 284 | ## Working with Dockerfile 285 | 286 | Dockerfile ဆိုတာ နာမည်​အတိုင်းပဲ file တစ်​ခုပါပဲ။ သူ့ဆီမှာ တိကျတဲ့ instructions ​တွေပါမယ်​ အဲ့ instructions ​တွေနဲ့ ကိုယ်​လိုချင်​တဲ့ customized images ​တွေကို​ build လုပ်​ပါတယ်​ Default အ​နေနဲ့​တော့ နာမည်​ကို Dockerfile လို့ တ​ဝေမသိမ်း​ပေးရပါမယ်​။ 287 | 288 | ## Build Image with Dockerfile 289 | 290 | ```text 291 | $ docker build -t image_name . 292 | ``` 293 | 294 | ![](.gitbook/assets/1_docker_build.png) 295 | 296 | ဒါက​တော့ ​ရေးပြီးသား dockerfile နဲ့ image build လုပ်​တဲ့ command ပါ။ `-t`ဆိုတာ tag name ကိုကိုယ်​စားပြုပါတယ်​ သူ့အ​နောက်​မှာ image name လိုက်​ပါတယ်​ ​သေချာကြည်​့ပါ command အဆုံးမှာ `( . )` ပါပါတယ်​ သူက current working directory မှာ ရှိတဲ့ Dockerfile ကိုယူပြီးသုံးမယ်​လို့ ဆိုလိုတာပါ အကယ်​၍ ခင်​​ဗျားမှာသာ Dockerfile တစ်​ခုမက ရှိ​နေရင်​ သို့မဟုတ်​ Dockerfile မှာ နာမည်​အစ D ကသာ small letter \(d\) ဖြစ်​​နေခဲ့မယ်​ဆိုရင်​ error တက်​နိုင်​ပါတယ်​ 297 | 298 | ```text 299 | $ docker build -t image_name -f /path/to/Dockerfile 300 | ``` 301 | 302 | 303 | 304 | ဒီ command ကလဲ image build တဲ့ command ပါပဲ။ ထူးခြားတာက​တော့ `-f` flag ကိုသုံးထားတာပါ။ Current working directory ထဲကမဟုတ်​ပဲ ခင်​​ဗျားရဲ့ file system ထဲက တစ်​​နေရာရာမှာ ရှိတဲ့ Dockerfile ကို ​ခေါ်သုံးချင်​ရင်​ ဒီလို သုံးရပါမယ်​။ 305 | 306 | ## Create a Dockerfile 307 | 308 | ဒီ​နေရာမှာ အစမ်​း​အ​နေနဲ့ Github ​ပေါ်က sample project ကိုယူသုံးပါ့မယ်​ 309 | 310 | ```text 311 | $ git clone https://github.com/tecrahul/dockerfile 312 | $ cd dockerfile 313 | $ docker build -t apacheimage . 314 | ``` 315 | 316 | ![](.gitbook/assets/3c_apacheimage_build.png) 317 | 318 | အ​ပေါ်က command သုံး​ကြောင်းပြီးရင်​ image တစ်​ခု​ဆောက်​ပြီးပါပြီ ​ဆောက်​ပြီးသား images ​တွေကို docker images ဆိုတဲ့ command နဲ့​ခေါ်ကြည့်နိုင်​ပါတယ်​။ 319 | 320 | ## Launch Container with Image 321 | 322 | ```text 323 | $ docker run -it -p 8080:80 apacheimage 324 | ``` 325 | 326 | ဒီcommand နဲ့ ​ဆောက်​ပြီးသား image ကိုသုံးပြီး container တစ်​ခုတည်​​ဆောက်​ပါတယ်​။ `i`က interactive နဲ့ `t`က tty ကို ကိုယ်​စားပြုပါတယ်​။ `-p`ဆိုတာက​တော့ port သတ်​မှတ်​​ပေးတာပါ၊ ဒီ ဥပမာမှာဆို ကိုယ့် host system ရဲ့ port 8080 နဲ့ container ရဲ့ port 80ကို ချိတ်​​ပေးဖို့ သုံးထားတာကို ​တွေ့ရမှာပါ။ အ​ရှေ့က ကိုယ်​့ host systemရဲ့ port ကြားမှာ full column `( : )` နဲ့ အ​နောက်​က container ရဲ့ port ကို​ရေးရမှာပါ။ 327 | 328 | \pagebreak 329 | 330 | # Dockerfile Directives 331 | 332 | ## What are Dockerfile Directives 333 | 334 | အ​ရှေ့မှာ Dockerfile ကိုသုံးပြီး image ​ဆောက်​ အဲ့ image ကိုသုံးပြီး​တော့ container ​တွေ ​ဆောက်​တာကို မြင်​ခဲ့ရပြီးပါပြီ။ 335 | 336 | အခု​ပြောမှာက​တော့ အဲ့ Dockerfile ကို ဘယ်​လို​ရေးမလဲဆိုတာပါ။ 337 | 338 | Dockerfile ကို Docker directive ​တွေနဲ့​ရေးရတာပါ။ 339 | 340 | ### FROM 341 | 342 | ဒီ FROM ဆိုတဲ့ directive ကို base image ယူသုံးဖို့အတွက်​ သုံးတာပါ။ ဥပမာ ခင်​​ဗျားက ubuntu command ​တွေ သုံးလို့ရမဲ့ container တစ်​လုံးလိုချင်​တာဆိုရင်​ `FROM ubuntu` ဆိုပြီးသုံးရမှာပါ။ 343 | 344 | Default အ​နေနဲ့ဆို docker store မှာရှိတဲ့ ubuntu version ​တွေထဲကမှ latest version ကို ယူသုံးသွားမှာပါ အဲ့လိုမှမဟုတ်​ဘူး latest လိုချင်​တာမဟုတ်​ဘူး ကိုယ်​လိုချင်​တာ သက်​သက်​ဆို အခုလို​ရေးလို့ရပါတယ်​ `FROM tecadmin/ubuntu-ssh:16.04` 345 | 346 | ### LABEL 347 | 348 | ဒါက​တော့ နာမည်​အတိုင်​းပဲ label တပ်​တာပါ။ `Maintainer addres​s,vendor name,image version,release date` အစရှိသဖြင့်​ပေါ့။ ဥပမာ 349 | 350 | ```text 351 | LABEL maintainer="rahul@tecadmin.net" 352 | LABEL vendor="TecAdmin" 353 | LABEL com.example.version="0.01" 354 | ``` 355 | 356 | လို့ ရိုက်​လိုက်​ရုံပါပဲ။ အကြံပြု လိုတာက​တော့ တစ်​ line ထဲကို space ခံ single line ခံပြီး ​ရေးတာကိုပါ။ Image build တဲ့အချိန်​မှာ စာ​ကြောင်းတစ်​​ကြောင်းကို layer တစ်​ခု ​ဆောက်​တာပါ Layer နည်း​လေ မြန်​​လေပါပဲ။ 357 | 358 | ```text 359 | LABEL maintainer="rahul@tecadmin.net" vendor="TecAdmin" \ 360 | com.example.version="0.01" 361 | ``` 362 | 363 | ### RUN 364 | 365 | RUN ကို​တော့ လိုအပ်​တဲ့ command​တွေ run ဖို့သုံးပါတယ်။ ဥပမာ လိုအပ်တဲ့​package​တွေ သွင်းဖို့လိုတဲ့အခါမျိုး​ပေါ့။ 366 | 367 | ```text 368 | RUN apt-get update 369 | RUN apt-get install -y apache2 automake build-essential curl ​​ 370 | ``` 371 | 372 | ဒီ​နေရာမှာလဲ အ​ပေါ်ကလို တစ်​​ကြောင်းထဲဖြစ်​​အောင်​ ​ရေးသင့်ပါတယ်​။ Layer နည်း​လေ​ကောင်း​လေပါ။ 373 | 374 | ```text 375 | RUN apt-get update && apt-get install -y \ 376 | automake \ 377 | build-essential \ 378 | curl 379 | ``` 380 | 381 | ### COPY 382 | 383 | ဒါကို​တော့ ကိုယ့်စက်​ထဲမှာရှိတဲ့ files ​တွေ directories ​တွေကို ​ဆောက်​မယ့် image ​ပေါ်copy ကူးချင်​ရင်​ သုံးပါတယ်။​ 384 | 385 | ```text 386 | COPY html/* /var/www/html/ 387 | COPY *.conf /etc/apache2/sites-available/ 388 | ``` 389 | 390 | ပထမ command ရိုက်​လိုက်​ရင်​ host ရဲ့ html directory ​အောက်​က file အကုန်​ကို image ရဲ့ /var/www/html/ ​အောက်​ကို copy ကူသွားမှာပါ။ 391 | 392 | ဒုတိယ command က​တော့ host ရဲ့ .conf extension file အားလုံးကို image ရဲ့ /etc/apache2/sites-available/ ​အောက်​ကို​ပေါ့။ 393 | 394 | ### WORKDIR 395 | 396 | ဒိ directive ကို​တော့ dockerfile ရဲ့အခြား​သော directives ​တွေဖြစ်​တဲ့ `RUN,CMD,ENTRYPOINT,COPY,ADD` ​တွေရဲ့ working directory သတ်​မှတ်​​ပေးဖို့သုံးပါတယ်​ 397 | 398 | ```text 399 | WORKDIR /opt 400 | ``` 401 | 402 | ### CMD 403 | 404 | CMD directive ကို​တော့ image မှာပါတဲ့ service,software ​တွေကို container launch လုပ်​​တာနဲ့ run ဖို့သုံးပါတယ်။​ သူ့ရဲ့ syntax က​တော့ 405 | 406 | ```text 407 | CMD ["executable","param1","param2"] 408 | CMD ["executable","param1","param2"] 409 | ``` 410 | 411 | အကယ်​၍ခင်​​ဗျားက apache service ကို runချင်​တယ်​ဆိုပါ​တော့ 412 | 413 | ```text 414 | CMD ["apachectl", "-D", "FOREGROUND" ] 415 | ``` 416 | 417 | ### EXPOSE 418 | 419 | ဒါက container ရဲ့ port ကိုညွှန်းဆိုမဲ့ directive ပါ။ အ​ပေါ်မှာ​တွေခဲ့တဲ့ docker run -it -p နဲ့ port ချိတ်​တာမှာ ဒီက ညွှန်းဆိုထားတဲ့ port ​တွေနဲ့ ချိတ်​​ပေးရပါမယ်​။ 420 | 421 | ```text 422 | EXPOSE 80 423 | EXPOSE 443 424 | ``` 425 | 426 | ### ENV 427 | 428 | ENV directive ကို​တော့ environment variable သတ်​မှတ်​​ပေးချင်​ရင်​ သုံးတာပါ 429 | 430 | ```text 431 | ENV PATH=$PATH:/usr/local/psgql/bin/ \ 432 | PG_MAJOR=9.6.0 433 | ``` 434 | 435 | ### VOLUME 436 | 437 | ​နောက်​ဆုံး အ​နေနဲ့​တော့ VOLUME directive ပါ။ သူ့ကို​တော့ mount point create ဖို့ သုံးပါတယ်​။ သိထားဖို့က သူဟာ externally mounted volumes ပဲဖြစ်​ပါတယ်​။ 438 | 439 | ```text 440 | VOLUME ["/data"] 441 | ``` 442 | 443 | \pagebreak 444 | 445 | # Docker Port 446 | 447 | ## Manage Ports in Docker 448 | 449 | Docker containers တွေထဲမှာဆိုရင် servicesတွေက သီးခြား port တစ်ခုစီပေါ်မှာ run လေ့ရှိပါတယ်။ port တစ်ခုပေါ်မှာ run နေတယ် containerရဲ့ services ‌တွေကို အသုံးပြုချင်တယ်ဆိုရင် container ရဲ့ port ကို Docker host ရဲ့ port တစ်တစ်ခုခုနဲ့ bindပေးရပါတယ်။ 450 | 451 | ### ဥပမာ ၁ 452 | 453 | အောက်‌ကပုံကိုကြည့်ပါ။ Docker host ထဲမှာ container နှစ်လုံး run နေတာကို တွေ့ရပါလိမ့်မယ်။ ပထမတစ်ခုကတော့ website တွေ runနေတဲ့ Apache container ဖြစ်ပြီးတော့ ဒုတိယတစ်ခုကတော့ MySQL container ဖြစ်ပါတယ်။ 454 | 455 | 456 | ![](.gitbook/assets/screenshot-132.png) 457 | 458 | အခုကျွန်တော်တို့ port 80 Apache container ပေါမှာ run နေတယ် website ကိုဝင်ရောက်ကြည့်ရှုဖို့လိုအပ်နေပါတယ်။ အဲတော့ ကျွန်တောတို့ Apache container port 80 ကို Docker host port 8080 နဲ့ bind လိုက်ကြရအောင်။ Docker host port 80 နဲ့လဲ bind လို့ရပါတယ်။ 459 | 460 | ဒုတိယ container port 3306 ပေါ်မှာ MySQL run နေပါတယ်။ Host machine ကနဲ့ MySQL ကို အခြားနည်းလမ်းတွေနဲ့ access လုပ်လို့ရပါတယ်။ ဒါပေမယ့်ဒီသင်ခန်းစာအတွက် MySQL container port 3306 ကို docker host port 6603 နဲ့ကျွန်တော် bindလိုက်ပါတယ်။ အခုကျွန်တော်တို့ Host machine ရဲ့ port 6603 ကိုသုံးပြီး MySQL container ကိုတိုက်ရိုက်ဆက်သွယ်နိုင်ပါတယ်။ 461 | 462 | အောက်က command ကတော့ host system port နဲ့ container port ကို bind ပေးမယ် command ဖြစ်ပါတယ်။ 463 | 464 | ```bash 465 | $ docker run -it -p 8080:80 apache_image 466 | $ docker run -it -p 6603:3066 mysql_image 467 | ``` 468 | 469 | ### ဥပမာ ၂ 470 | 471 | ဒီဥပမာမှာတော့ GitHub ပေါ်မှာရှိတယ် ကျွန်တော်တို့ရဲ နမူနာ project ကိုသုံးရမှာဖြစ်ပါတယ်။ အောက်က command ကိုသုံးပြီးတော့ repository ကို clone လိုက်ပါ။ 472 | 473 | ```bash 474 | $ git clone https://github.com/tecrahul/dockerfile 475 | $ cd dockerfile 476 | ``` 477 | 478 | အခု apacheimage ဆိုတဲ့အမည်နဲ့ docker image ကို build လိုက်ပါ။ 479 | 480 | ```bash 481 | $ docker build -t apacheimage . 482 | ``` 483 | 484 | အခု Docker run command ကိုသုံးပြီး‌တော့ containerကို runလိုက်ပါ။ container port 80 ပေါ်မှာ Apache service run သွားပါလိမ့်မယ်။ host system port 8080 ကို container port 80 နှင့် bind ဖြစ်ဖို့ `-p 8080: 80` ကိုသတ်မှတ်ရပါမယ်။ 485 | 486 | ```bash 487 | $ docker run -it -p 8080:80 apacheimage 488 | ``` 489 | 490 | အခု Web browser ထဲမှာ host machine ip နဲ့ port 8080 သုံးပြီး access လုပ်မယ်ဆိုလိုရှိရင် အောက်မှာပြထားတယ်ပုံအတိုင်း container ရဲ့ Apache service ပေါ်မှာ run နေတယ် web page တစ်မျက်မှာပေါ်လာပါလိမ့်မယ်။ ကျွန်တော့်ရဲ host machine ip ကတော့ 192.168.1.237 ဖြစ်ပါတယ်။ 491 | 492 | ![](.gitbook/assets/docker_file_and_docker_port.png) 493 | 494 | ### ဥပမာများ 495 | 496 | ကျွန်တော်တို့ container တစ်ခုတည်းနဲ့ port များစွာကို bind နိုင်ပါတယ်။ ဒါပေမဲ့ image build မလုပ်ခင် port အားလုံးကို dockerfile ထဲမှာ `EXPOSE` လုပ်ထားရပါမယ်။ 497 | 498 | ```bash 499 | $ docker run -it -p 8080:80,8081:443 image_name 500 | ``` 501 | 502 | တစ်ကယ်လို့ host machine ရဲ့ interface တစ်ခုခုနဲ့ bind ချင်တယ်ဆိုလို့ရှိရင် အောက်ကအတိုင်း IP သက်မှတ်ပေးလိုက်လို့ရပါတယ်။ အောက်က ဉပမာအရ port 8080 နဲ့ 8081 ကို 127.0.0.1 IP နဲ့သာ access လုပ်လို့ရပါတယ်။ 503 | 504 | ```bash 505 | $ docker run -it -p 127.0.0.1:8080:80,127.0.0.1:8081:443 image_name 506 | $ docker run -it -p 192.168.1.111:8080:80,92.168.1.111:8081:443 image_name 507 | ``` 508 | 509 | \pagebreak 510 | 511 | # Docker Networking 512 | 513 | ## Docker Networking 514 | 515 | Docker မှာ Network တွေကို docker containers နှင့် ဆက်သွယ်ဖို့အတွက် create နဲ့ manage လုပ်ဆောင်ချက်တွေ ကို ထောက်ပံ့ပေးထားပါတယ်။ **docker network command** ကို အသုံးပြုပြီးတော့ Docker network ကို manage လုပ်လို့ရပါတယ်။ 516 | 517 | **Syntax:** 518 | 519 | ```text 520 | $ docker network [options] 521 | ``` 522 | 523 | အောက်ပါ Tutorial ကို လေ့လာပြီး Docker network ကို create , list နဲ့ manage စတဲ့ features တွေကို လုပ်ဆောင်လို့ရပါတယ်။ 524 | 525 | ## Docker Networks များ ကို List လုပ်ခြင်း။ 526 | 527 | `ls` option ကို အသုံးပြုပြီး docker host ပေါ်မှာ ရှိတဲ့ docker network တွေ ကို List လုပ်လို့ရပါတယ်။ 528 | 529 | ```text 530 | $ docker network ls 531 | ``` 532 | 533 | ## Docker Network တခု Create လုပ်ခြင်း။ 534 | 535 | Network အမျိုးအစား အမျိုးမျိုးကို Docker မှ ထောက်ပံ့ပေးထားပါတယ်။ သင့်ရဲ့ system ပေါ်မှာ a bridge Network တခုကို အောက်ပါ command အသုံးပြုပြီး create လို့ရပါတယ်။ 536 | 537 | **Syntax:** 538 | 539 | ```text 540 | $ docker network create -d [network_type] [network_name] 541 | ``` 542 | 543 | **Example:** 544 | 545 | ```text 546 | $ docker network create -d bridge my-bridge-network 547 | ``` 548 | 549 | ## Container ကို Network ချိတ်ခြင်း။ 550 | 551 | Container နာမည် \(သို့မဟုတ်\) Container ID ကို အသုံးပြုပြီး မည်သည့် container ကိုမဆို ရှိပြီးသား docker network နဲ့ ချိတ်ဆက်နိုင်ပါတယ်။ Container တစ်ခုကို Network နဲ့ တစ်ချိန် ချိတ်ဆက်ထားရုံနဲ့ အခြား container များကိုလဲ တူညီတဲ့ Network တခုတည်းပေါ်မှာ ဆက်သွယ်လုပ်ဆောင်လို့ရပါတယ်။ 552 | 553 | **Syntax:** 554 | 555 | ```text 556 | $ docker network connect [network_name] [container_name] 557 | ``` 558 | 559 | **Example:** 560 | 561 | ```text 562 | $ docker network connect my-bridge-network centos 563 | ``` 564 | 565 | ## Docker Network နှင့် Container ကို disconnect လုပ်ခြင်း။ 566 | 567 | သင့်အနေနဲ့ Network တခုပေါ်ကနေ container ကို disconnect လုပ်ချင်ရင် အောက်ပါ command ကို အသုံးပြုနိုင်ပါတယ်။ 568 | 569 | **Syntax:** 570 | 571 | ```text 572 | $ docker network disconnect [network_name] [container_name] 573 | ``` 574 | 575 | **Example:** 576 | 577 | ```text 578 | $ docker network disconnect my-bridge-network centos 579 | ``` 580 | 581 | ## Docker Network တခုရဲ့ အချက်အလက် ကိုကြည့်ခြင်း။ 582 | 583 | Docker Network တခုရဲ့ အသေးစိတ်အချက် ကို ကြည့်ချင်ရင် inspect option ကို အသုံးပြုပြီး ကြည့်လို့ရပါတယ်။ 584 | 585 | ```text 586 | $ docker network inspect my-bridge-network 587 | ``` 588 | 589 | inspect option ကို အသုံးပြုပြီး Docker Network တခုရဲ့ အသေးစိတ် အချက်အလက်ကိုကြည့်မယ် ဆိုရင် အခုလိုမြင်ရမှာ ဖြစ်ပါတယ်။ 590 | 591 | ## Docker Network ကို Remove ခြင်း။ 592 | 593 | Docker network တွေကို remove လုပ်မယ်ဆိုရင် rm option ကို အသုံးပြုလို့ပါတယ်။ 594 | 595 | တခုထက်ပိုတဲ့ docker network တွေကို remove လုပ်ချင်ရင် network ID \(သို့မဟုတ်\) network name တွေကို space ခံပြီး အသုံးပြုပြီး remove လုပ်လို့ရပါတယ်။ 596 | 597 | **Example:** 598 | 599 | ```text 600 | $ docker network rm my-bridge-network network2 network3 601 | ``` 602 | 603 | သင့်အနေနဲ့ docker ပေါ်က အသုံးမပြုတော့တဲ့ network အားလုံးကို remove လုပ်ချင်ရင် prune option ကို အသုံးပြုပြီး remove လုပ်လို့ရပါတယ်။ 604 | 605 | ```text 606 | $ docker network prune 607 | ``` 608 | 609 | \pagebreak 610 | 611 | # Docker Networking Example 612 | 613 | ## Docker Networking Example 614 | 615 | Docker Network tutorial ဖက်ပြီးပြီးဆိုရင် Example လေး စမ်းလုပ်ကြည့်လို့ရပါတယ်။ 616 | 617 | ကျွန်တော် တို့ ဒီ Tutorial မှာတော့ docker containers နှစ်ခုနဲ့ docker network အသေးစားလေး တခု လုပ်ပြသွားမှာ ဖြစ်ပါတယ်။ 618 | 619 | > MySQL – A relational database server. 620 | > 621 | > PHPMyAdmin – A web based interface to manage MySQL server. 622 | 623 | အခု tutorial မှာတော့ အခြား MySQL server ကို access လုပ်ဖို့အတွက် အခြား container တခုမှာ run ထားတဲ့ PHPMyAdmin ကို အသုံးပြ ပြသသွားမှာ ဖြစ်ပါတယ်။ 624 | 625 | ## Network တခု Create လုပ်ခြင်း။ 626 | 627 | ပထမဦးစွာ အနေဖြင့် docker network အသစ် တခု ကို Create လုပ်ဖြစ်ပါတယ်။ my-bridge-network အမည်ရှိသော network အသစ်ကို အောက်ပါ comment အသုံးပြု ပြီး create လုပ်ပါ။ 628 | 629 | ```text 630 | $ docker network create -d bridge my-bridge-network 631 | ``` 632 | 633 | ## MySQL Container ကို Run ခြင်း။ 634 | 635 | အခု ကျွန်တော် တို့ MySQL docker container အသစ် ကို Run မှာ ဖြစ်ပါတယ်။ 636 | 637 | Default root user password အသစ်ကို သတ်မှတ်ဖို့အတွက် MYSQL\_ROOT\_PASSWORD variable ကို အောက်မှာပြထားတဲ့အတိုင်း ရိုက်ပါ။ 638 | 639 | ```text 640 | $ docker run --name mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql/mysql-server 641 | ``` 642 | 643 | Container တခု create ပြီးနောက် စောစော က ကျွန်တော်တို့ create ထားတဲ့ my-bridge-network network နဲ့ ချိတ်ဆက်မှာ ဖြစ်ပါတယ်။ 644 | 645 | ```text 646 | $ docker network connect my-bridge-network mysql 647 | ``` 648 | 649 | နောက် တဆင့် အနေနဲ့ MySQL container ရဲ့ IP address အသစ် ကိုကြည့်မှာဖြစ်ပါတယ်။ 650 | 651 | ```text 652 | $ docker inspect mysql | grep "IPAddress" 653 | ``` 654 | 655 | ## PHPMyAdmin Container ကို Run ခြင်း။ 656 | 657 | အခု ကျွန်တော်တို့ Docker container အသစ်ဖြစ်တဲ့ phpmyadmin ကို run မှာ ဖြစ်ပါတယ်။ 658 | 659 | MySQL ကို Run ခြင်း နောက်ဆုံးအဆင့်မှာ ရခဲ့တဲ့ MySQL container IP address ကို PMA\_HOST value အနေနဲ့ထည့်ပါမယ်။ 660 | 661 | ```text 662 | $ docker run --name phpmyadmin -d -e PMA_HOST=172.21.0.2 -p 8080:80 phpmyadmin/phpmyadmin 663 | ``` 664 | 665 | ပြီးနောက် phpmyadmin container ကို my-bridge-network ထဲ add လိုက်ပါ။ 666 | 667 | ```text 668 | $ docker network inspect my-bridge-network 669 | ``` 670 | 671 | ## My-bridge-network Network ရဲ့ အချက်အလက် ကိုကြည့်ခြင်း ။ 672 | 673 | အပေါ်မှာ ပြခဲ့တဲ့ containers နှစ်ခု ကို ကျွန်တော် တို့ my-bridge-network ထဲ ထည့်ပြီးသွား တဲ့ အတွက် လက်ရှိ my-bridge-network ရဲ့ setting ကို ကြည့်လိုက်ရအောင် ။ 674 | 675 | ```text 676 | $ docker network inspect my-bridge-network 677 | ``` 678 | 679 | My-bridge-network ရဲ့ setting ကို ကြည့်ရင်တော့ အခုလိုတွေ့ရမှာဖြစ်ပါတယ်။ 680 | 681 | ## Allow MySQL to PHPMyAdmin Host 682 | 683 | MySQL default အနေနဲ့ကတော့ remote hosts connect လုပ်တာကို ခွင့်မပြုထားပါဘူး။ 684 | 685 | ဆိုတော့ ကျွန်တော် တို့ က MySQL connection အတွက် phpmyadmin ကို allow 686 | 687 | လုပ်ပေးရမှာ ဖြစ်ပါတယ်။ MySQL container shell access ရဖို့အတွက် အောက်မှာ ပြထားတဲ့ လုပ်ရမှာဖြစ်ပါတယ်။ 688 | 689 | ```text 690 | $ docker exec -it mysql bash 691 | ``` 692 | 693 | MySQL server ထဲကို MySQL container create လုပ်တုန်းက ပေးထဲ့ခဲ့တဲ့ Password ကို အသုံးပြုပြီး Login ဝင်လိုက်ပါ။ 694 | 695 | ```text 696 | bash-4.2# mysql -u root -p 697 | ``` 698 | 699 | phpmyadmin host ip address နဲ့ user အသစ် create လုပ်လိုက်ပါ။ ဒီ tutorial ထဲမှာတော့ phpmyadmin host ip address ကတော့ ‘**172.21.0.3**‘ ဖြစ်ပါတယ်။ 700 | 701 | ```text 702 | mysql> GRANT ALL on *.* to 'dbuser'****@****'172.21.0.3' identified by 'secret'; 703 | Query OK, 0 rows affected, 1 warning (0.00 sec) 704 | 705 | mysql> flush privileges; 706 | Query OK, 0 rows affected (0.00 sec) 707 | 708 | mysql> exit 709 | Bye 710 | ``` 711 | 712 | ## Access MySQL with PHPMyAdmin 713 | 714 | နောက်ဆုံးအနေဖြင့် ကျွန်တော် တို့ ရဲ့ docker host system က port 8080 မှ တဆင့် phpmyadmin web user interface ကို ချိတ်ဆက်လို့ ရသွားပါတယ်။ 715 | 716 | phpMyAdmin ကို MySQL ရဲ့ အချက်အလက်တွေ သုံးပြီး အပေါ်မှာ ပြထားတဲ့ အတိုင်း Login ဝင်ရန် အသုံးပြုလို့ရပါတယ်။ 717 | 718 | \pagebreak 719 | 720 | # Docker Compose 721 | 722 | ## Docker Compose 723 | 724 | Docker Compose သည် Containers များကို Setup ပြုလုပ်ရာတွင် အသုံးပြုသည့် Tool တခုဖြစ်သည်။ Docker Compose ကိုသုံးခြင်းဖြင့် docker containers များကို Compose File တစ်ခုအနေဖြင့် ဖန်တီးနိုင်သည်။ Images and Containers များကို လည်း Signal Command ဖြင့် လွယ်ကူစွာ build လုပ်နိုင်ပါတယ်။ 725 | 726 | Docker Compose ပြုလုပ်ရန် အဆင့် \(3\) ဆင့် ရှိသည်။ 727 | 728 | * Dockerfile တွင် သုံးမည့် Services များကို သတ်မှတ်ပေးရန် 729 | * မိမိ Enviroment အတွက် သုံးမည့် Service and Application များကို docker-file အဖြစ်ပြုလုပ်ပြီး sample.yml format ဖြင့် သိမ်းဆည်းရမည်။ 730 | * Run docker-compose up Command ဖြင့် Docker Containers Services များကို Run နိုင်သည်။ 731 | 732 | **စက်တွင် Docker Enginer ရှိဖို့လိုပါသည်။ မရှိလျှင် Docker Engine Installation Section တွင်လေ့လာနိုင်ပါသည်။** 733 | 734 | ## Install Docker Compose 735 | 736 | Docker Compose ကို Install ပြုလုပ်ရန် [https://github.com/docker/compose/releases](https://github.com/docker/compose/releases) \(Github Page\) တွင် ဝင်ရောက်လေ့လာ၍ ရယူနိုင်ပါသည်။ 737 | 738 | အောက်ပါ Command ဖြင့်လည်း Docker compose 1.16.1 ကို Install ပြုလုပ်နိုင်သည်။ Install မပြုလုပ်ခင် Docker versition နှင့် Specific ဖြစ်မဖြစ် စစ်ဆေးရန်လိုအပ်ပါသည်။ 739 | 740 | ```text 741 | $ curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 742 | 743 | $ chmod +x /usr/local/bin/docker-compose 744 | ``` 745 | 746 | ## Docker Compose Example File 747 | 748 | Docker Composer file သည် docker-compose.yml \(format\) ဖြစ်ပြီး အောက်တွင် Version 3 docker composer file ကို Sample ပြထားသည်။ ဤ File သည် Sample ဖြစ်၍ Service တခုဖြစ်သည့် WEB Name တစ်ခုကိုသာ ပြထားသည်။ 749 | 750 | ```text 751 | version: '3' 752 | services: 753 | db: 754 | image: mysql 755 | container_name: mysql_db 756 | restart: always 757 | environment: 758 | - MYSQL_ROOT_PASSWORD="secret" 759 | web: 760 | image: apache 761 | build: . 762 | container_name: apache_web 763 | restart: always 764 | ports: 765 | - "8080:80" 766 | ``` 767 | 768 | ## Docker Compose CLI Reference 769 | 770 | Docker Compose နှင့် Docker Container များကို manage ပြုလုပ်ရန်အတွက် docker-compose command ကိုလည်း subcommand အဖြင့် provides လုပ်ပေးသည်။ 771 | 772 | အောက်တွင့် Subcommand အချို့ကို လေ့လာနိုင်သည်။ သတိပြုရန်မှာ Container Name နှင့် Services name ကို မမှားဖို့ သတိပြုရမည်။ 773 | 774 | `build -` build option ဖြင့် images များကို build လုပ်ပြီး Services များကို အသုံးပြုနိုင်သည်။ 775 | 776 | ```text 777 | $ docker-compose build ## Build all services 778 | $ docker-compose build web ## Build single service 779 | ``` 780 | 781 | `up –` Current Directory အောက်ရှိ docker-composer.yml မှ docker container နှင့် Services များကို Create ပြုလုပ်ရန်ဖြစ်သည်။ \( -d \) Switch သည် Container ကို daemon mode ဖြင့် run စေရန်ဖြစ်သည်။ 782 | 783 | ```text 784 | $ docker-compose up -d ## Create all containers 785 | $ docker-compose up -d web ## Create single container 786 | ``` 787 | 788 | `down –` ဤ Option သည် containers များ၏ Neteork, Container Service and Associate Images များကို ရပ်ရန်, ဖျက်ရန် အသုံးပြုနိုင်သည်။ 789 | 790 | ```text 791 | $ docker-compose down ## Restart all containers 792 | $ docker-compose down web ## Restart single container 793 | ``` 794 | 795 | `ps –` Container များ၏ Services,Status and Port များ၏ process detail ကို သိနိုင်ရန် သုံးသည်။ 796 | 797 | ```text 798 | $ docker-compose ps 799 | ``` 800 | 801 | `exec –` Running Containers များကို exec ပြုလုပ်ရန်သုံးသည်။ For example, Web Service Run နေသည့် Container ကို list-file အနေဖြင့် ကြည့်ရန်.. 802 | 803 | ```text 804 | $ docker-compose exec web ls -l 805 | ``` 806 | 807 | `start -` Containers များကို Start လုပ်ရန်သုံးသည်။ 808 | 809 | ```text 810 | $ docker-compose start ## Start all containers 811 | $ docker-compose start web ## Start single container 812 | ``` 813 | 814 | `stop -` Running Containers များကို ရပ်လိုက်ရန် အသုံးပြုသည်။ 815 | 816 | ```text 817 | $ docker-compose stop ## Stop all containers 818 | $ docker-compose stop web ## Stop single container 819 | ``` 820 | 821 | `restart –` 822 | 823 | ```text 824 | Containers များကို restart ပြုလုပ်ရန် သုံးသည်။ 825 | ``` 826 | 827 | ```text 828 | $ docker-compose restart ## Restart all containers 829 | $ docker-compose restart web ## Restart single container 830 | ``` 831 | 832 | `pause –` Containers များကို pause လုပ်ရန်သုံးသည်။ 833 | 834 | ```text 835 | $ docker-compose pause ## Start all paused containers 836 | $ docker-compose pause web ## Start single paused container 837 | ``` 838 | 839 | `rm –` Containers များကို ဖျက်ရန်, ဖယ်ရှားရန်သုံးသည်။ 840 | 841 | ```text 842 | $ docker-compose rm ## Start all paused containers 843 | $ docker-compose pause web ## Start single paused container 844 | ``` 845 | 846 | \pagebreak 847 | 848 | # Docker Compose Example 849 | 850 | ### Step 1 – Create Directory Structure 851 | 852 | ပထမဆုံး အနေဖြင့် docker compose အမည်ရှိ directory တစ်ခု တည်ဆောက်ပါမည်။ ထို့ နောက် web application သိမ်းဆည်းရန် webapp အမည်ရှိ directory တည်ဆောက်ပါမည်။ webapp directory ထဲတွင် web application ကိုစမ်းရန် အတက်ွ index.html ကို တည်ဆောက်ပါမည်။ 853 | 854 | ``` 855 | $ mkdir dockercompose && cd dockercompose 856 | $ mkdir webapp && echo "It Works"; webapp/index.html 857 | ``` 858 | 859 | ### Step 2 – Create Dockerfile for Webapp 860 | 861 | ပြီးနောက် web application အတက်ွ လိုအပ်သော dockerfile ကို webapp directory ထဲမှာတည်ဆောက်ပါမည်။ dockerfile သည် web application အတက်ွ လိုအပ်သော apache web server ပါ၀င်သည့် customized image တည်ဆာက် ရန်ဖြစ်ပါသည်။ 862 | 863 | ```text 864 | $ vim webapp/Dockerfile 865 | ``` 866 | 867 | ထို့ နောက် အောက် ပါ code များကို ပေါင်းထည့်ပါ။ 868 | 869 | ```text 870 | FROM tecadmin/ubuntu-ssh:16.04 871 | 872 | RUN apt-get update \ 873 | && apt-get install -y apache2 874 | 875 | COPY index.html /var/www/html/ 876 | WORKDIR /var/www/html 877 | CMD ["apachectl", "-D", "FOREGROUND"] 878 | EXPOSE 80 879 | ``` 880 | 881 | ### Step 3 – Create Docker Compose File 882 | 883 | ထို့ နောက် လက်ရှိ directory ထဲတင်ွ docker-compose.yml အမည်ရှိ docker configuration ဖိုင် တစ်ခုကို တည်ဆောက်ပါမည်။ ထို configuration ဖိုင် သည် အသုံးပြုမည့် containers အကုန်လုံးကို ကိုယ်စားပြုမည်ဖြစ်သည်။ 884 | 885 | ```text 886 | $ vim docker-compose.yml 887 | ``` 888 | 889 | ထို့ နောက် အောက် ပါ code များကို ပေါင်းထည့်ပါ။ 890 | 891 | ``` 892 | version: '3' 893 | services: 894 | db: 895 | image: mysql 896 | container_name: mysql_db 897 | restart: always 898 | environment: 899 | - MYSQL_ROOT_PASSWORD="secret" 900 | web: 901 | image: apache 902 | build: ./webapp 903 | depends_on: 904 | - db 905 | container_name: apache_web 906 | restart: always 907 | ports: 908 | - "8080:80" 909 | ``` 910 | 911 | အထက်ပါ ဖိုင်သည် containers နှစ်ခု အတက်ွဖြစ်သည်။ ပထမ container သည် mysql database server အတက်ွဖြစ်ပြီး ဒုတိယသည် web server အတက်ွဖြစ်သည်။ Web container သည် application များကို apache server တင်ွ အလုပ်လုပ်စေမည်ဖြစ်သည်။ webapp directory ကို build directory အဖြစ် သတ်မှတ်ထားခြင်းဖြစ်သည်။ 912 | 913 | ### Step 4 – Build Webapp Image 914 | 915 | အောက်ပါ command ဖြင့် webapp directory အတင်ွးရှိ contents များနှင့် Dockerfile ကို အသုံးပြု၍ apache အမည်ရှိ image တစ်ခုကို တည်ဆောက်ပါမည်။ 916 | 917 | ```text 918 | $ docker-compose build 919 | ``` 920 | 921 | 922 | 923 | > ```text 924 | > db uses an image, skipping 925 | > Building web 926 | > Step 1/6 : FROM tecadmin/ubuntu-ssh:16.04 927 | > 16.04: Pulling from tecadmin/ubuntu-ssh 928 | > b3e1c725a85f: Pull complete 929 | > 4daad8bdde31: Pull complete 930 | > 63fe8c0068a8: Pull complete 931 | > 4a70713c436f: Pull complete 932 | > bd842a2105a8: Pull complete 933 | > c41407f48fa7: Pull complete 934 | > 1fcfeb9b5ef4: Pull complete 935 | > 13195a7d2240: Pull complete 936 | > b86be64bbda8: Pull complete 937 | > 8c951fe917dc: Pull complete 938 | > f74bc80103b6: Pull complete 939 | > Digest: sha256:523d6fbc97954e9f77231bf54bfcfbbdd4805349887477fbac4a63dc735d777d 940 | > Status: Downloaded newer image for tecadmin/ubuntu-ssh:16.04 941 | > ---> bb63b492da01 942 | > Step 2/6 : RUN apt-get update && apt-get install -y apache2 943 | > ---> Running in 00be0dd717ce 944 | > [[[Removed long output from here]]] 945 | > ---> 41c731590234 946 | > Removing intermediate container 00be0dd717ce 947 | > Step 3/6 : COPY index.html /var/www/html/ 948 | > ---> 42f84d4c2243 949 | > Removing intermediate container 945aaee6cbde 950 | > Step 4/6 : WORKDIR /var/www/html 951 | > ---> 40bebd21e352 952 | > Removing intermediate container e13f5f412906 953 | > Step 5/6 : CMD apachectl -D FOREGROUND 954 | > ---> Running in ab0db1ef1c6e 955 | > ---> 587bf2323289 956 | > Removing intermediate container ab0db1ef1c6e 957 | > Step 6/6 : EXPOSE 80 958 | > ---> Running in 7bcbef52d585 959 | > ---> 8f03d4135394 960 | > Removing intermediate container 7bcbef52d585 961 | > Successfully built 8f03d4135394 962 | > Successfully tagged apache:latest 963 | > ``` 964 | 965 | ### Step 5 – Launch Docker Containers 966 | 967 | docker-compose up ကို အသုံးပြု၍ containers များကို စတင်စေမည်။ Daemon mode ကို အသုံးပြုရန် -d option ကို အသုံးပြုနိုင်သည်။ 968 | 969 | ```text 970 | $ docker-compose up -d 971 | ``` 972 | 973 | ### Step 6 – Update Content in Web Application 974 | 975 | Web application တင်ွ ပြောင်းလဲမှု များပြုလုပ်လိုလျှင် 976 | 977 | ```text 978 | $ echo "Welcome to Docker Compose Tutorial" >> webapp/index.html 979 | ``` 980 | 981 | ပြီးလျှင် အောက်ပါ command များကို သုံး၍ webapp container ကို ပြန်လည် တည်ဆောက်ပြီး စတင် အလုပ်လုပ်စေနိုင်ပါသည်။ 982 | 983 | ```text 984 | $ docker-compose build 985 | $ docker-compose up -d 986 | ``` 987 | 988 | 989 | 990 | 991 | 992 | \pagebreak 993 | 994 | # Docker Machine 995 | 996 | ## Working With Docker Machine 997 | 998 | Docker Machine သည် Command Line Tool တစ်ခုဖြစ်ပြီး Dockerized Hosts များကို Provisioning and Managing ပြုလုပ်ရန် ဖြစ်သည်။ အရှင်းဆုံးပြောရရင် Virtual Machine များကို Docker Engine နဲ့ Local or Remote System အတွက် Install ပြုလုပ်နိုင်တယ်။ Docker Machine များသည် Virtualbox, Vmware, Digital Ocean နှင့် Amazone စသည့် Platform များပေါ်တွင်လည်း ကောင်းစွာအလုပ်လုပ်နိုင်သည်။ 999 | 1000 | ### Install Docker Machine 1001 | 1002 | Docker Machine ကို install ပြုလုပ်ရန် အောက်တွင်ဖော်ပြထားပါသည်။ ပြီးတော့ [https://github.com/docker/machine/releases](https://github.com/docker/machine/releases) တွင်လည်း နောက်ဆုံးထွတ် Docker Machine Version ကို စစ်ဆေးရွေးချယ်နိုင်ပါသည်။ 1003 | 1004 | ```text 1005 | ** Please Note: : " https://github.com/docker/machine/releases " 1006 | ``` 1007 | 1008 | #### For Linux Systems: 1009 | 1010 | ```text 1011 | $ curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine 1012 | 1013 | $ chmod +x /usr/local/bin/docker-machine 1014 | ``` 1015 | 1016 | စသည့် Command ကို အသုံးပြုပြီး Docker Machine ကို Download ပြုလုပ်ပြီး Install ပြုလုပ်နိုင်သည်။ 1017 | 1018 | #### For OSX Systems: 1019 | 1020 | ```text 1021 | $ curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine 1022 | 1023 | $ chmod +x /usr/local/bin/docker-machine 1024 | ``` 1025 | 1026 | စသည့် Command များကို အသုံးပြုပြီး download and install ပြုလုပ်နိုင်သည်။ 1027 | 1028 | #### For Windows Systmes with Git Bash: 1029 | 1030 | Windows 10 နှင့် အထက်တွင်သာ အသုံးပြုရန် အကြံပြုလိုပါသည်။ 1031 | 1032 | ```text 1033 | $ if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi 1034 | 1035 | $ curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" 1036 | 1037 | $ chmod +x "$HOME/bin/docker-machine.exe" 1038 | ``` 1039 | 1040 | စသည့် Command များကို အသုံးပြုပြီး download and install ပြုလုပ်နိုင်သည်။ 1041 | 1042 | ### Docker Machine Supported Drivers: 1043 | 1044 | Docker Machine အတွက် Drivers များကို local and Cloud System များကို Provide လုပ်ပေးပါသည်။ 1045 | 1046 | Dockerized hosts များ၏ ဖော်ပြပါ hosting Service များကို Docker Machine တခုတည်းဖြင့် Manage ပြုလုပ်နိုင်ပါသည်။ 1047 | 1048 | * Amazon Web Services 1049 | * Microsoft Azure 1050 | * Digital Ocean 1051 | * Exoscale 1052 | * Google Compute Engine 1053 | * Generic 1054 | * 6Microsoft Hyper-V 1055 | * OpenStack 1056 | * Rackspace 1057 | * IBM Softlayer 1058 | * Oracle VirtualBox 1059 | * VMware vCloud Air 1060 | * VMware Fusion 1061 | * VMware vSphere 1062 | 1063 | \pagebreak 1064 | 1065 | # Docker Prune 1066 | 1067 | ## Prune Objects in Docker 1068 | 1069 | ပုံမှန်ဆို docker ကသူအသုံးမပြုတော့တဲ့ objects ‌တွေကို သူ့ကိုဖျက်ပါလို့မပြောမချင်း မဖျက်ဘဲ ဒီတိုင်းထားထားတတ်ပါတယ်။ ဒီနေရာမှာ objects ဆိုတာ docker နဲ့ဆိုင်တဲ့ images, containers, volumes နဲ့ network တို့ကိုပြောတာပါ။ ဒါကြောင့် သူ့မှာ unused objects တွေကိုဖျက်ပစ်ဖို့အတွက် option တစ်ခုထည့်ပေးထားပါတယ်။ ဒါကတော့ docker prune ဆိုတဲ့ command ပါ။ **Syntax:** 1070 | 1071 | ```bash 1072 | $ docker [object] prune [options] 1073 | ``` 1074 | 1075 | ### Prune all unused Objects. 1076 | 1077 | အောက်က command ကတော့ docker က အသုံးမပြုတော့တဲ့ container, image, volume နဲ့ network တွေကို ဖယ်ရှားပေးပါလိမ့်မယ်။ 1078 | 1079 | ```bash 1080 | $ docker system prune 1081 | ``` 1082 | 1083 | `--‌all option` ကတော့ unused ဖြစ်နေတဲ့ docker နဲ့ပါတ်သတ်တာအကုန်ကိုဆိုလိုတာပါ။ 1084 | 1085 | ```bash 1086 | $ docker system prune --all 1087 | ``` 1088 | 1089 | `--filter` ဆိုတဲ့ option ကတော့ key=value နဲ့တွဲသုံးရပါတယ်။ ဥပမာ အောက်က command က until=24 hours ဆိုတာကလွန်ခဲ့တဲ့ 24 နာရီမတိုင်ခင်က build ခဲ့တဲ့ images တွေ၊ stop ဖြစ်နေတဲ့ containers တွေ ၊ အသုံးမပြုတော့တဲ့ network တွေကိုဖျက်ပစ်မယ်လို့ပြောတာပါ။ 1090 | 1091 | ```bash 1092 | $ docker system prune --filter "until=24h" 1093 | ``` 1094 | 1095 | ### Prune Images 1096 | 1097 | အောက်က command ကိုတော့ Unused images တွေကိုပဲရွေးဖျက်ချင်တယ်ဆိုရင်သုံးလို့ရပါတယ်။ 1098 | 1099 | ```bash 1100 | $ docker image prune 1101 | ``` 1102 | 1103 | ### Prune containers 1104 | 1105 | Stop/exited ဖြစ်သွားတဲ့ Containers တွေကိုပဲရွေးဖျက်ချင်ရင်တော့ အောက်က command ကိုသုံးလို့ရပါတယ်။ 1106 | 1107 | ```bash 1108 | $ docker container prune 1109 | ``` 1110 | 1111 | ### Prune Volume 1112 | 1113 | အသုံးမပြုတော့တဲ့ volumes တွေကိုဖျက်ချင်တဲ့အခါမှာက အောက်ကလိုမျိုး သုံးနိုင်ပါတယ်။ 1114 | 1115 | ```bash 1116 | $ docker volume prune 1117 | ``` 1118 | 1119 | ### Prune Network 1120 | 1121 | အပေါ်က command တွေလိုပဲ network တွေကိုဖယ်ရှားချင်တဲ့အခါမှာလည်း prune ကိုအသုံးပြနိုင်ပါတယ်။ 1122 | 1123 | ```bash 1124 | $ docker network prune 1125 | ``` 1126 | 1127 | ### Conclusion 1128 | 1129 | Yes or No question တွေမပေးဘဲ တန်းဖျက်ချင်တာသေချာတယ်ဆိုရင်တော့ အနာက်ကနေ force option အနေနဲ့ -f ကိုအသုံးပြုပြီးဖျက်နိုင်ပါတယ်။ 1130 | 1131 | ```bash 1132 | $ docker system prune -f 1133 | $ dokcer image prune -f 1134 | $ docker container prune -f 1135 | $ docker network prune -f 1136 | $ docker volume prune -f 1137 | ``` 1138 | 1139 | Options တွေကိုအခြေအနေအပေါ်မူတည်ပြီးတော့လည်း ကိုယ့်စိတ်ကြိုက် တွဲသုံးနိုင်ပါတယ်။ 1140 | 1141 | ```bash 1142 | $ docker system prune -a -f 1143 | $ dokcer image prune -a -f 1144 | $ docker container prune -a -f 1145 | $ docker network prune -a -f 1146 | $ docker volume prune -a -f 1147 | ``` 1148 | 1149 | Reference from [tecadmin](https://tecadmin.net/tutorial/docker/docker-prune-unused-objects/). 1150 | 1151 | \pagebreak 1152 | 1153 | --- 1154 | description: Content and Translator List 1155 | --- 1156 | 1157 | # Sponsor 1158 | 1159 | ## Our Hero List 1160 | 1161 | **Becoming a kindly super hero:** 1162 | 1163 | waiyanwinhtain 1164 | [https://fb.com/waiyanwinhtain2016](https://fb.com/waiyanwinhtain2016) 1165 | 1166 | khinchanmyaehtun 1167 | [https://fb.com/profile.php?id=100010791125505](https://fb.com/profile.php?id=100010791125505) 1168 | 1169 | pyaephyoaung 1170 | [https://fb.com/pyae.aung.7127](https://fb.com/pyae.aung.7127) 1171 | 1172 | zawyelwin 1173 | [https://fb.com/zawye.lwin.9](https://fb.com/zawye.lwin.9) 1174 | 1175 | thutatun 1176 | [https://fb.com/tamoeout.pisi](https://fb.com/tamoeout.pisi) 1177 | 1178 | kyawkyaw 1179 | [https://fb.com/alin.thit.79](https://fb.com/alin.thit.79) 1180 | 1181 | nyinyisoewin 1182 | [https://fb.com/NyiNyiSoeWin.nnsw](https://fb.com/NyiNyiSoeWin.nnsw) 1183 | 1184 | minthatti 1185 | [https://fb.com/thuta.livingunderthesamebluesky](https://fb.com/thuta.livingunderthesamebluesky) 1186 | 1187 | sanjay 1188 | [https://fb.com/sanjay.ttg](https://fb.com/sanjay.ttg) 1189 | 1190 | ### Original Content from TecAdmin.net 1191 | 1192 | {% code title="original-article.sh" %} 1193 | ```bash 1194 | # Special Thank to TecAdmin 1195 | lynx https://tecadmin.net/tutorial/docker/ 1196 | ``` 1197 | {% endcode %} 1198 | 1199 | ### Relative Content list 1200 | 1201 | **Ubuntu Wiki - Burmese** 1202 | 1203 | * [https://ubuntu-mm.net/umw/](https://ubuntu-mm.net/umw/) 1204 | * [https://github.com/fossmyanmar/ubuntu-mm-wiki](https://github.com/fossmyanmar/ubuntu-mm-wiki) 1205 | 1206 | **Docker Study Jams** 1207 | 1208 | * [http://docker-study-jams.herokuapp.com/](http://docker-study-jams.herokuapp.com/) 1209 | * [https://github.com/fossmyanmar/docker-kubernetes](https://github.com/fossmyanmar/docker-kubernetes) 1210 | 1211 | #### PDF Download 1212 | 1213 | [https://github.com/fossmyanmar/docker-quick-start/raw/master/latex/Docker\_Quick\_Start-Pyidaungsu\_Khayay.pdf](https://github.com/fossmyanmar/docker-quick-start/raw/master/latex/Docker_Quick_Start-Pyidaungsu_Khayay.pdf) 1214 | 1215 | \pagebreak 1216 | 1217 | -------------------------------------------------------------------------------- /latex/book-cover.tex: -------------------------------------------------------------------------------- 1 | \documentclass{article} 2 | \usepackage[utf8]{inputenc} 3 | \usepackage{hyperref} 4 | \usepackage{graphicx} 5 | %\usepackage{draftwatermark} 6 | %\SetWatermarkText{\centering\put(80,780){\includegraphics[width=0.3\textwidth]{./docker.png}}} 7 | \usepackage{fontspec} 8 | \setmainfont{PR.ttf}[ 9 | BoldFont = MyanmarKhyay.ttf ] 10 | \PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} 11 | 12 | \begin{document} 13 | 14 | \iffalse 15 | {center}\rule{3in}{0.4pt}\end{center} 16 | \fi 17 | 18 | 19 | %\usepackage{fancyvrb} 20 | \clearpage 21 | %% temporary titles 22 | % command to provide stretchy vertical space in proportion 23 | \newcommand\nbvspace[1][3]{\vspace*{\stretch{#1}}} 24 | % allow some slack to avoid under/overfull boxes 25 | \newcommand\nbstretchyspace{\spaceskip0.5em plus 0.25em minus 0.25em} 26 | % To improve spacing on titlepages 27 | \newcommand{\nbtitlestretch}{\spaceskip0.6em} 28 | \pagestyle{empty} 29 | \begin{center} 30 | \bfseries 31 | \nbvspace[1] 32 | \Huge 33 | {\nbtitlestretch\huge 34 | DOCKER QUICK START GUIDE} 35 | 36 | \nbvspace[1] 37 | \normalsize 38 | 39 | Docker is a software container platform. \\ 40 | It is an open platform for developing, shipping, \\ 41 | and running applications. 42 | \nbvspace[1] 43 | 44 | \small BY\\ 45 | \Large RAHUL KUMAR\\[0.5em] 46 | \footnotesize AUTHOR OF ``TECADMIN.NET,'' ``SHELL SCRIPTING,'' \\ 47 | ``GIT,'' ``LINUX,'' ``MONGODB,'' ``MYSQL,'' ETC., 48 | 49 | \nbvspace[2] 50 | 51 | \includegraphics[width=2.5in]{./docker.png} 52 | \nbvspace[3] 53 | \normalsize 54 | 55 | ဗမာ ဘာသာပြန်\\ 56 | \large 57 | DEVOPS - FOSS MYANMAR 58 | \nbvspace[1] 59 | \end{center} 60 | 61 | 62 | \pagebreak 63 | 64 | -------------------------------------------------------------------------------- /latex/docker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossmyanmar/docker-quick-start/9e753c31367fc4e3cf850d557f7aa874c6f8170a/latex/docker.png -------------------------------------------------------------------------------- /latex/footer.tex: -------------------------------------------------------------------------------- 1 | \end{document} 2 | \end{document} 3 | 4 | -------------------------------------------------------------------------------- /latex/script: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@v1 12 | - name: Call All to One 13 | run: for x in $(ls | grep -i '[[:digit:]]'); do cat $x >> main.md ; echo -e "\pagebreak \n" >> main.md ; done 14 | - name: Install Pandoc 15 | run: apt-get install pandoc -yqq 16 | - name: Run All Markdown 17 | run: pandoc main.md -o maint.tex 18 | - name: convert to TEX format 19 | run: | 20 | echo Add other actions to build, 21 | echo test, and deploy your project. 22 | 23 | compile_pdf: 24 | image: moss/xelatex 25 | script: 26 | - xelatex your-latex-cv.tex 27 | artifacts: 28 | paths: 29 | - my_file.pdf 30 | 31 | --------------------------------------------------------------------------------