docker - courses.moowan.me · § docker...

57
Docker

Upload: others

Post on 04-Jun-2020

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

Docker

Page 2: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

Containers vs. VMs

Page 3: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

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

Page 4: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

เปล่ียนชีวิตด-วย DevOps

Page 5: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

BUILD -> SHIP -> RUN

Page 6: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

ข"อดีของการใช" Docker

§ Docker สมารถทำงานได3บนระบบปฏิบัติการเดิม ไม=ต3องติดต้ัง OS ใหม=§ Docier มีขนาดเล็กและเบากว=า VM มาก§ Docker ใช3ทรัพยากร CPU , RAM น3อยกว=าเนื่องจากไม=ต3องติดต้ัง OS ใหม=§ ในทรัพยากรท่ีเท=ากัน Docker จะรันจำนวน Container ได3มากกว=า VMs§ Docker สามารถย3ายและติดต้ังไปยังท่ีอ่ืนได3

Page 7: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

7

การติดตั้ง Docker บน Windows

Native(Hyper-V enable)

Docker Toolbox127.0.0.1

192.168.99.100

Page 8: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

ง"าย

● Build○ Dockerfile○ Build from container

● Ship○ AUFS layer file system○ Easy to distribute images

● Run○ Example : docker run nginx

Page 9: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

AUFS(dvanced multi-layered unification filesystem)

Page 10: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

Fundamental Docker Concepts

Page 11: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

Containers & Images

● Load image from Docker Registry hub.docker.com

○$ docker pull ubuntu:precise

Page 12: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

Containers & Images

Run your container

docker run ubuntu:precise apt-get install -y memcached

Page 13: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

Containers & Images

สร#าง Image จาก Container ท่ีอยู:ในสถานะ Exit

docker commit cab24

9f97edd4e9ee794eca4c40db3122b5c635f0e2f92c3b0e62deaac9e28af1a868

จะได# docker image

Page 14: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

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

Page 15: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

Containers & Images

docker run --name "bash-on-mysql-image" -i -t 9f97ed /bin/bash

root@1ddbe7cefb87:/#

Page 16: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

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

Page 17: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

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

Page 18: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

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

Page 19: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker
Page 20: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

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

Page 21: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

ป"ญหาท่ีเจอเมื่อใช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 ดังรูป

Page 22: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker
Page 23: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker
Page 24: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

Microservice with Docker

Page 25: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง Docker

- docker ps = list ดู container ท้ังหมดท่ี run อยู>- docker ps -a = list ดู container ท้ังหมดท่ีมีในเคร่ือง ท้ัง run

และ ไม> run

Page 26: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง Dockerdocker search [keyword]ใช1สำหรับ หา image ท่ีเราต1องการจะมา start เปIน container

Page 27: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง 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

Page 28: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง 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 นั้นๆ

Page 29: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง Docker

docker run [option] [image name : tag]

●เราสามารถดู tag ของ image ได?จาก เว็บ http://hub.docker.com

●Example : docker run -d nginx:1.10.2

Page 30: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง 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

Page 31: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง 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

Page 32: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

การใช& Option -v ใน windows

Page 33: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง 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

Page 34: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง 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

Page 35: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง Docker

● การเป&ด session เข/าไปทำงานใน container ท่ีทำงานเป<น background อยูE

○ docker exec -it [container name|id] /bin/bash

○ Example: docker exec -it my_web /bin/sh

Page 36: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง Docker

● การขอดูรายละเอียดของ container○ Docker inspect [container name | ID]○ Example: docker inspect my_web

Page 37: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง 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]

Page 38: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

Docker network

Page 39: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง 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 ]

Page 40: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง docker network

● Disconnect network○ docker network disconnect [network name] [container , container ]

● Remove network○ docker network rm [network name]

Page 41: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

คำส่ัง docker network

● สร#าง Network ของ work1_net กับ db1_net ○ docker network create work1_net○ docker network create db1_net

Page 42: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

การสร%าง 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

Page 43: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

การสร%าง 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

Page 44: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

การสร%าง Container แบบ แยก network

Page 45: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

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

Page 46: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

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

Page 47: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

ทดสอบการใช+งาน phpmyadmin

Page 48: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

การปรับแต)ง nginx : การทำ proxy pass

Page 49: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker
Page 50: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

ตัวอย&าง api

package mainimport (

"github.com/gorilla/mux""net/http"

)func SayHelloWorld(w http.ResponseWriter, r *http.Request) {

w.Write([]byte("Hello, World!"))}

Page 51: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

ตัวอย&าง api

func main() {mx := mux.NewRouter()

mx.HandleFunc("/api/v1", SayHelloWorld)http.ListenAndServe(":8000", mx)

}

Page 52: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

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

Page 53: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

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

Page 54: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

Set reverse proxy in nginx

Page 55: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

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

Page 56: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker
Page 57: Docker - courses.moowan.me · § Docker สามารถย3ายและติดตั้งไปยังที่อื่นได3. 7 การติดตั้งDocker

End

15 January 2019 57