├── .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 | 
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 | ## 
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 | 
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 | 
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 | 
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 | 
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 | 
119 |
120 |
121 | phpMyAdmin ကို MySQL ရဲ့ အချက်အလက်တွေ သုံးပြီး အပေါ်မှာ ပြထားတဲ့ အတိုင်း Login ဝင်ရန် အသုံးပြုလို့ရပါတယ်။
122 |
123 |
124 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
38 |
39 | ## Delete Docker Images
40 |
41 | မလိုအပ်တော့တဲ့ image တွေကို ဖျက်ပစ်ဖို့အတွက်ကတော့ docker rmi ဆိုတဲ့ command ကိုသုံးပါတယ်။ ဥပမာ -
42 |
43 | ```text
44 | $ docker rmi wordpress
45 | ```
46 |
47 | 
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 | 
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 | 
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 address,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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
354 |
355 | Delete Docker Images
356 | --------------------
357 |
358 | မလိုအပ်တော့တဲ့ image တွေကို ဖျက်ပစ်ဖို့အတွက်ကတော့ docker rmi ဆိုတဲ့
359 | command ကိုသုံးပါတယ်။ ဥပမာ -
360 |
361 | ``` {.text}
362 | $ docker rmi wordpress
363 | ```
364 |
365 | 
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 | 
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 | 
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 address,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 | 
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 | 
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 address,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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
269 |
270 | ## Delete Docker Images
271 |
272 | မလိုအပ်တော့တဲ့ image တွေကို ဖျက်ပစ်ဖို့အတွက်ကတော့ docker rmi ဆိုတဲ့ command ကိုသုံးပါတယ်။ ဥပမာ -
273 |
274 | ```text
275 | $ docker rmi wordpress
276 | ```
277 |
278 | 
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 | 
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 | 
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 address,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 | 
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 | 
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 |
--------------------------------------------------------------------------------