20150604 docker 新手入門
TRANSCRIPT
新手入門 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 <[email protected]> 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/