20150604 docker 新手入門

39
新手入門 Yiling Lai 2015/06/04

Upload: azole-lai

Post on 08-Aug-2015

980 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: 20150604 docker 新手入門

新手入門  Yiling  Lai    2015/06/04  

Page 2: 20150604 docker 新手入門

指令練習  h1ps://goo.gl/F6L5iy  

(h1ps://github.com/azole/docker-­‐demo)  

Page 3: 20150604 docker 新手入門

Development   Test   ProducJon  

Page 4: 20150604 docker 新手入門

Development   Test   ProducJon  

Page 5: 20150604 docker 新手入門

Container  

•  Container  技術則是直接將⼀一個應⽤用程式所需的相關程式碼、函式庫、環境配置檔都打包起來建⽴立沙箱執⾏行環境。    

                                                                                                                       -­‐  10個Q&A快速認識Docker  

Page 6: 20150604 docker 新手入門

貨櫃的故事  h1p://mrjamie.cc/2011/09/21/shipping-­‐container/  

Page 7: 20150604 docker 新手入門
Page 8: 20150604 docker 新手入門

Image  and  Container

•  Image:  可用來重複建立自己需要的 container  

•  Container:  一個獨立的運行空間    

docker run -it node:0.10.38 /bin/bash

Image   Container RUN

Demo1,  Demo2  

Page 9: 20150604 docker 新手入門

啟動  node  的執行環境  

docker run -it node:0.10.38 /bin/bash

à 建立一個 container,內建有 node 0.10.38 的執行環境

-­‐t  選項讓Docker分配⼀一個虛擬終端(pseudo-­‐1y)並綁定到容器的標準輸⼊入上  -­‐i  則讓容器的標準輸⼊入保持打開  

Page 10: 20150604 docker 新手入門
Page 11: 20150604 docker 新手入門

Image  

Container

Image  

PULL

RUN

Registry

Local

Page 12: 20150604 docker 新手入門

Image   Container RUN

Container

RUN

Demo3  

Page 13: 20150604 docker 新手入門

Image  

Container

Image  

PULL

Container’

RUN

CHANGE

Image  

Commit

Registry

Local

Page 14: 20150604 docker 新手入門

Container (writable)

Base  Image:  CentOS

Read-­‐Write    Layer

Read-­‐Only    Image

1.1  執行  (run)  CentOS  image  à  container  

Page 15: 20150604 docker 新手入門

Base  Image:  CentOS

Container: yum update

Read-­‐Write    Layer

Read-­‐Only    Image

1.1  執行  (run)  CentOS  image  à  container  1.2  進行更新  yum  update  

Page 16: 20150604 docker 新手入門

Base  Image:  CentOS

Image  A:  Updated

Read-­‐Write    Layer

Read-­‐Only    Image

1.1  執行  (run)  CentOS  image  à  container  1.2  進行更新  yum  update  1.3  存成(commit)  image  à  只會存  diff                à  現在有    2  個不同的  images        à  Base  Image  為  Image  A  的  Parent

參考 parent  Image

Page 17: 20150604 docker 新手入門

Base  Image:  CentOS

Image  A:  Updated

Read-­‐Write    Layer

Read-­‐Only    Image

2.1  執行  (run)  image  A  à  container                à  會連  Base  Image  都載入  

Container

參考 parent  Image

Page 18: 20150604 docker 新手入門

Base  Image:  CentOS

Image  A:  Updated

Read-­‐Write    Layer

Read-­‐Only    Image

2.1  執行  (run)  image  A  à  container  2.2  安裝  apache  

Install Apache

參考 parent  Image

Page 19: 20150604 docker 新手入門

Base  Image:  CentOS

Image  A:  Updated

Read-­‐Write    Layer

Read-­‐Only    Image

2.1  執行  (run)  image  A  à  container  2.2  安裝  apache  2.3  存成(commit)  image  B                à  只存  diff                à  A  為  B  的 Parent  Image

Image  B:  Apache

參考 parent  Image

參考 parent  Image

Page 20: 20150604 docker 新手入門

Base  Image:  CentOS

Image  A:  Updated

Read-­‐Write    Layer

Read-­‐Only    Image

3.1  執行  (run)  image  B  à  container                à  載入  Base  Image  &  Image  A  

Image  B:  Apache

Container

參考 parent  Image

參考 parent  Image

Page 21: 20150604 docker 新手入門

Base  Image:  CentOS

Image  A:  Updated

Read-­‐Write    Layer

Read-­‐Only    Image

3.1  執行  (run)  image  B  à  container  3.2  安裝  PHP  5.3  

Image  B:  Apache

PHP 5.3

參考 parent  Image

參考 parent  Image

Page 22: 20150604 docker 新手入門

Base  Image:  CentOS

Image  A:  Updated

Read-­‐Write    Layer

Read-­‐Only    Image

3.1  執行 (run)  image  B  à  container  3.2  安裝  PHP  5.3  4.1  執行 (run)  image  B  à  container  

Image  B:  Apache

PHP 5.3 Container

參考 parent  Image

參考 parent  Image

Page 23: 20150604 docker 新手入門

Base  Image:  CentOS

Image  A:  Updated

Read-­‐Write    Layer

Read-­‐Only    Image

3.1  執行 (run)  image  B  à  container  3.2  安裝  PHP  5.3  4.1  執行 (run)  image  B  à  container  4.2  安裝  PHP  5.4  

Image  B:  Apache

PHP 5.3 PHP 5.4

參考 parent  Image

參考 parent  Image

Page 24: 20150604 docker 新手入門

Base  Image:  CentOS

Image  A:  Updated

Read-­‐Write    Layer

Read-­‐Only    Image

5.1  執行 (run)  image  A  à  container  

Image  B:  Apache

PHP 5.3 PHP 5.4

Container

參考 parent  Image

參考 parent  Image

Page 25: 20150604 docker 新手入門

Base  Image:  CentOS

Image  A:  Updated

Read-­‐Write    Layer

Read-­‐Only    Image

5.1  執行 (run)  image  A  à  container  5.2  安裝  Nginx    

Image  B:  Apache

PHP 5.3 PHP 5.4

Nginx

Page 26: 20150604 docker 新手入門

基本概念

•  Image:  一個唯讀的模板,可用來建立 container。  

•  Container:  從  image  建立的執行實例,可以被啟動、停止、刪除等,每個  container  之間都是隔離的。  

•  Repository:  類似 git,裡頭有許多  image  可供使用。  – 公開的:Docker  Hub    (類似 github)  – 私有:可以透過  docker-­‐registry  建立    

Page 27: 20150604 docker 新手入門

Image  

Container

Image  

PULL

Container’

RUN

CHANGE

Image  

Commit

PUSH

Registry

Local

Image  

Page 28: 20150604 docker 新手入門

Dockerfile

•  只是一個文字檔:  文件、版控、易於傳遞   docker build -t azole/nginx .

# This is a nginx server FROM debian MAINTAINER azole <[email protected]> RUN apt-get -qq update RUN apt-get -y install nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]

Image  Dockerfile BUILD

Demo4  

Page 29: 20150604 docker 新手入門
Page 30: 20150604 docker 新手入門

Container Websrv

Docker0 Bridge (172.17.42.1)

docker  run  -­‐-­‐name  websrv  -­‐d  –p  8080:80  azole/nginx  

eth0

eth0

Host

port  80

port  8080

Demo5  

Page 31: 20150604 docker 新手入門

Container Websrv

Docker0 Bridge (172.17.42.1)

docker  run  -­‐-­‐name  websrv  -­‐d  -­‐p  8080:80    -­‐-­‐privileged=true            -­‐v  /home/azole/websrv:/var/www/html  azole/nginx

eth0

eth0

Host

port  80

port  49161

Local  FS

webapp1

webapp2

webapp3 path/www

Demo6  

Page 32: 20150604 docker 新手入門

Container Websrv

Docker0 Bridge (172.17.42.1)

docker  run  -­‐-­‐name  webdb  -­‐d  redis  docker  run  -­‐-­‐name  websrv  -­‐d  -­‐P  -­‐-­‐link  webdb:mysql            -­‐v  /home/azole/webapp2:/var/www/html            -­‐-­‐privileged  =true  azole/nginx

eth0

eth0

Host

port  80

port  49161

Link

Local  FS

webapp1

webapp2

webapp3 path/www

Container webdb

Demo7  

Page 33: 20150604 docker 新手入門

boot2docker  •  For  mac  and  windows  

docker client

Boot2docker VM (VirtualBox VM)

       

Docker  Daemon  

Container Container Container

mac  /  windows

Page 34: 20150604 docker 新手入門

•  boot2docker  init  •  boot2docker  start  

•  boot2docker  shellinit  •  boot2docker  ip  

To  connect  the  Docker  client  to  the  Docker  daemon,  please  set:          export  DOCKER_HOST=tcp://192.168.59.103:2376          export  DOCKER_CERT_PATH=/Users/mtk10862/.boot2docker/certs/boot2docker-­‐vm          export  DOCKER_TLS_VERIFY=1  

Page 35: 20150604 docker 新手入門

     

Docker  Daemon  

Container Container Container

linux

eth0

docker client

Boot2docker VM (192.168.59.103)

     

Docker  Daemon  

Container Container Container

mac  /  windows

eth0

http://192.168.59.103:49154

docker client

http://localhost:49154

Page 36: 20150604 docker 新手入門
Page 37: 20150604 docker 新手入門

極小化  redis  image  

•  請參考:追求極簡化  Docker  image  之路  -­‐  William  Yeh  

Page 38: 20150604 docker 新手入門

參考資料  

•  10個Q&A快速認識Docker  •  《Docker  ——  從⼊入⾨門到實踐-­‐》正體中⽂文版  •  h1ps://github.com/William-­‐Yeh/docker-­‐workshop  

•  追求極簡化  Docker  image  之路  -­‐  William  Yeh  

Page 39: 20150604 docker 新手入門

指令練習  

•  h1ps://github.com/azole/docker-­‐demo/