docker - courses.moowan.me · § docker...
Post on 04-Jun-2020
20 Views
Preview:
TRANSCRIPT
Docker
Containers vs. VMs
What is docker
"Open platform for developers and sysadmins to build,
ship, and run distributed applications. “
เป<น Software ที่ใชEสรEางสภาพแวดลEอมเฉพาะใหEซอฟตXแวรXทำงาน
ไดEโดยไม]กวนกับซอฟแวรXตัวอ่ืนบนระบบปฏิบัติการเดียวกัน
Can install on Windows ,Linux , Mac
เปล่ียนชีวิตด-วย DevOps
BUILD -> SHIP -> RUN
ข"อดีของการใช" Docker
§ Docker สมารถทำงานได3บนระบบปฏิบัติการเดิม ไม=ต3องติดต้ัง OS ใหม=§ Docier มีขนาดเล็กและเบากว=า VM มาก§ Docker ใช3ทรัพยากร CPU , RAM น3อยกว=าเนื่องจากไม=ต3องติดต้ัง OS ใหม=§ ในทรัพยากรท่ีเท=ากัน Docker จะรันจำนวน Container ได3มากกว=า VMs§ Docker สามารถย3ายและติดต้ังไปยังท่ีอ่ืนได3
7
การติดตั้ง Docker บน Windows
Native(Hyper-V enable)
Docker Toolbox127.0.0.1
192.168.99.100
ง"าย
● Build○ Dockerfile○ Build from container
● Ship○ AUFS layer file system○ Easy to distribute images
● Run○ Example : docker run nginx
AUFS(dvanced multi-layered unification filesystem)
Fundamental Docker Concepts
Containers & Images
● Load image from Docker Registry hub.docker.com
○$ docker pull ubuntu:precise
Containers & Images
Run your container
docker run ubuntu:precise apt-get install -y memcached
Containers & Images
สร#าง Image จาก Container ท่ีอยู:ในสถานะ Exit
docker commit cab24
9f97edd4e9ee794eca4c40db3122b5c635f0e2f92c3b0e62deaac9e28af1a868
จะได# docker image
Containers & Images
หลังจาก commit container จะมี image ใหม7ขึ้นมา
image ใหม7ไม7มีช่ือเพราะเรา commit แบบไม7ไดGตั้งช่ือ
สามารถตั้งช่ือภายหลังไดGโดยใชGคำส่ัง docker tag
docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> 9f97edd4e9ee 3 minutes ago 246.2 MB
ubuntu precise 74fe38d11401 3 weeks ago 209.6 MB
Containers & Images
docker run --name "bash-on-mysql-image" -i -t 9f97ed /bin/bash
root@1ddbe7cefb87:/#
Docker install [Linux]https://docs.docker.com/engine/installation/
debian 8
$ apt-get update
$ apt-get install apt-transport-https ca-certificates$ apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --
recv-keys 58118E89F3A912897C070ADBF76221572C52609D
$ vi /etc/apt/sources.list.d/docker.list
deb https://apt.dockerproject.org/repo debian-jessie main$ apt-get update
$ sudo apt-get install docker-engine
$ sudo service docker start
Docker install [Linux]
debian 8 [Docker use Proxy]
# mkdir /etc/systemd/system/docker.service.d
# echo "[Service]" > /etc/systemd/system/docker.service.d/http-
proxy.conf
# echo "Environment=\"HTTP_PROXY=http://10.16.64.86:8080/\""
# systemctl daemon-reload
# service docker restart
Install Docker on Windows [ Native ]
Requirement
● 64bit Windows 10 Pro, Enterprise and Education (1511 November update, Build 10586 or
later).
● The Hyper-V package must be enabled. The Docker for Windows installer will enable it
for you, if needed. (This requires a reboot).
● https://docs.docker.com/docker-for-windows/
○ https://download.docker.com/win/stable/InstallDocker.msi
Install Docker on Windows [ Docker toolbox]
Requirement
● Windows 64 bit● Enable VTx in BIOS●https://github.com/docker/toolbox/releases/tag/v1.12.2○https://github.com/docker/toolbox/releases/download/v1.12.2
/DockerToolbox-1.12.2.exe
ป"ญหาท่ีเจอเมื่อใช0 docker-toolbox
● เป#ด cmd แล*วใช* docker ไม5ได*
○ เนื่องจากการจะใช* docker-toolbox จะต*องทำการ set ค5าตัวแปรของระบบให*ถูกต*อง
เสียก5อน (เห็นตุผลที่ว5านี้ทำให* docker quickstart terminal ใช*งานได*เลย)
● Container ต5อ internet ไม5ได*
○ ส5วนมากเกิดจากการสลับ network เช5น พับจอให*เครื่อง sleep แล*ว เป#ดใช*งานทีหลัง
○ เนื่องจาก docker-toolbox ใช* vm เปdนตัวติดต้ัง docker ค5า network ต5างๆจะเปdนของ
vm ถ*ามีการสลับ network จาก เครื่อง host จะต*อง restart vm ใหม5 ซึ่งคำส่ังที่ใช*จัดการ
คือ
c:\> docker-machine restart default
c:\> docker-machine env
จากนั้นพิมพmคำส่ังที่ ได*จากการ run docker-machine env ดังรูป
Microservice with Docker
คำส่ัง Docker
- docker ps = list ดู container ท้ังหมดท่ี run อยู>- docker ps -a = list ดู container ท้ังหมดท่ีมีในเคร่ือง ท้ัง run
และ ไม> run
คำส่ัง Dockerdocker search [keyword]ใช1สำหรับ หา image ท่ีเราต1องการจะมา start เปIน container
คำส่ัง Docker
docker run [option] [image name : tag] [command]
●Run as background○ docker run -d [image]
●Run in foreground ○ docker run -i [image]
●Run with terminal ○ docker run -id [image] /bin/bash○ docker exec -it [container name | id] /bin/bash
คำส่ัง Docker
●Run โดย map port จากเคร่ือง host -> container
○ docker run -d -p 8080:80 [image]
○ Example: docker run -d -p 8080:80 nginx
○ ความหมายคือ เราสามารถเขPา http://localhost:8080 จะ
กลายเปUนเว็บท่ีอยู\ใน container นั้นๆ
คำส่ัง Docker
docker run [option] [image name : tag]
●เราสามารถดู tag ของ image ได?จาก เว็บ http://hub.docker.com
●Example : docker run -d nginx:1.10.2
คำส่ัง Docker
● การต้ังช่ือให. container
○ Docker run --name [keyword] -d [image]
○ Example: docker run --name my_web -d nginx
○ เสามารถเปลี่ยนช่ือ container ท่ี run ไปแล.วด.วยคำสั่ง
○ docker rename [container id / name] [new name]
○ Example: docker rename my_web test_web
คำส่ัง Docker
● Container บางตัวต0องการการตั้งค6าให0ตั้งแต6ตอน start เช6น mysql เราจะต0อง ตั้งpassword ให0 ระบบซ่ึงใน Docker จะมี option สำหรับ ส6งค6าตัวแปรเข0าไปในcontainer ตอน start ดังน้ี○ docker run -d -e EXAMPLE_VAR=example [image]○ Example: docker run --name some-mysql -e
MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
การใช& Option -v ใน windows
คำส่ัง Docker
● การ map directory ของเคร่ือง host เข9าไปใน container ○ docker run -d -v /host_dir:/container_dir [image]○ Example: docker run -d -v
/Users/neverlock/Docker/my_web:/usr/share/nginx/html --name my_web -p 8080:80 nginx
คำส่ัง Docker
● การ map directory ของเคร่ือง host เข9าไปใน container ○ docker run -d -v /host_dir:/container_dir [image]○ Example: docker run -d -v
c:\Users\Admin\Docker\my_web:/usr/share/nginx/html --name my_web -p 8080:80 nginx
คำส่ัง Docker
● การเป&ด session เข/าไปทำงานใน container ท่ีทำงานเป<น background อยูE
○ docker exec -it [container name|id] /bin/bash
○ Example: docker exec -it my_web /bin/sh
คำส่ัง Docker
● การขอดูรายละเอียดของ container○ Docker inspect [container name | ID]○ Example: docker inspect my_web
คำส่ัง Docker
● Stop container○ docker stop [container name | id]
● Start container○ docker start [container name | id]
● Restart container○ docker restart [container name | id]
● Remove container○ docker rm [container name | id]
Docker network
คำส่ัง docker network
● Manual○ Docker network --help
● List network○ docker netwrok ls
● Create network○ docker network create [network name]
● Connect network○ docker network connect [network name] [container , container ]
คำส่ัง docker network
● Disconnect network○ docker network disconnect [network name] [container , container ]
● Remove network○ docker network rm [network name]
คำส่ัง docker network
● สร#าง Network ของ work1_net กับ db1_net ○ docker network create work1_net○ docker network create db1_net
การสร%าง Container แบบ แยก network
● สร#าง container nginx โดยใช# work1_net
○ docker search nginx
○ เลือก richarvey/nginx-php-fpm
○ เปJดเว็บ http://hub.docker.com แล#ว search richarvey/nginx-php-fpm ดูวTามี
option อะไรบ#างตอน start ท่ีเราจะต#องใช#
○ อTานรายละเอียดการใช#งาน
○ Default Webroot คือ /var/www/html
○ docker run -d --name nginx_php --net work1_net -p 2000:80 -v
c:\Users\Admin\Docker\my_web:/var/www/html richarvey/nginx-php-
fpm
การสร%าง Container แบบ แยก network
● สร#าง container API โดยใช# network work1_net กับ db1_net
○ สมมุติวEาเราจะใช# golang เปLน API
○ Docker search golang
○ เราเลือก image ท่ีช่ือ golang
○ เปXดเว็บ http://hub.docker.com แล#ว search ดูวEา golang มี option
อะไรบ#างในการ start
○ docker run -it --name api -v c:\Users\Admin\Docker\api:/go/src --net
work1_net golang /bin/bash
○ docker network connect db1_net api
การสร%าง Container แบบ แยก network
Start mysql and phpmyadmin
● mysql
○ https://hub.docker.com/_/mysql/
○ ใช7 option -e MYSQL_ROOT_PASSWORD=xxx เพ่ือตั้ง password ให7
database
○ ถ7าต7องการจะเก็บ database ไว7ใน c:\Users\Admin\Docker\db ให7ใช7
option -v c:\Users\Admin\Docker\db:/var/lib/mysql
docker run -d --name db1 --net db1_net -v
c:\Users\Admin\Docker\db:/var/lib/mysql -e
MYSQL_ROOT_PASSWORD=password mysql
Start mysql and phpmyadmin
● phpmyadmin
○ https://hub.docker.com/r/phpmyadmin/phpmyadmin/
○ ใช7 option -e PMA_HOST=xxx เพ่ือติดตLอกับ database ท่ีเราได7สร7างไว7กLอน
หน7าน้ี
docker run --name myadmin -d -e PMA_HOST=db1 -p 2001:80 --net
db1_net phpmyadmin/phpmyadmin
ทดสอบการใช+งาน phpmyadmin
การปรับแต)ง nginx : การทำ proxy pass
ตัวอย&าง api
package mainimport (
"github.com/gorilla/mux""net/http"
)func SayHelloWorld(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))}
ตัวอย&าง api
func main() {mx := mux.NewRouter()
mx.HandleFunc("/api/v1", SayHelloWorld)http.ListenAndServe(":8000", mx)
}
Run api service
● docker exec -it api /bin/bash● cd /go/src● Write some sample api● go get● go run server.go● ctrl+p+q
Set reverse proxy in nginx
● docker exec -it nginx_php /bin/bash● vi /etc/nginx/sites-enabled/default.conf
location /api/v1 {proxy_pass http://api:8000/api/v1;
}
● exit● docker restart nginx_php
Set reverse proxy in nginx
Connect network
● docker network connect work1_net nginx_php2● docker network connect work1_net api2● docker network connect db1_net api2● docker network connect db1_net db2● docker network connect db1_net myadmin2
End
15 January 2019 57
top related