20150604 docker 新手入門

Post on 08-Aug-2015

980 views 5 download

Transcript of 20150604 docker 新手入門

新手入門  Yiling  Lai    2015/06/04  

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

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

Development   Test   ProducJon  

Development   Test   ProducJon  

Container  

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

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

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

Image  and  Container

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

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

docker run -it node:0.10.38 /bin/bash

Image   Container RUN

Demo1,  Demo2  

啟動  node  的執行環境  

docker run -it node:0.10.38 /bin/bash

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

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

Image  

Container

Image  

PULL

RUN

Registry

Local

Image   Container RUN

Container

RUN

Demo3  

Image  

Container

Image  

PULL

Container’

RUN

CHANGE

Image  

Commit

Registry

Local

Container (writable)

Base  Image:  CentOS

Read-­‐Write    Layer

Read-­‐Only    Image

1.1  執行  (run)  CentOS  image  à  container  

Base  Image:  CentOS

Container: yum update

Read-­‐Write    Layer

Read-­‐Only    Image

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

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

Base  Image:  CentOS

Image  A:  Updated

Read-­‐Write    Layer

Read-­‐Only    Image

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

Container

參考 parent  Image

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

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

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

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

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

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

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

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

基本概念

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

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

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

Image  

Container

Image  

PULL

Container’

RUN

CHANGE

Image  

Commit

PUSH

Registry

Local

Image  

Dockerfile

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

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

Image  Dockerfile BUILD

Demo4  

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  

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  

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  

boot2docker  •  For  mac  and  windows  

docker client

Boot2docker VM (VirtualBox VM)

       

Docker  Daemon  

Container Container Container

mac  /  windows

•  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  

     

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

極小化  redis  image  

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

參考資料  

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

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

指令練習  

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