SlideShare una empresa de Scribd logo
1 de 39
Yiling Lai 2014/12/23
Microsoft
• 在下一版本的 windows server 中將內建
docker engine。
• 估計將在 2015/1 發佈
現在遇到的問題…
• 每個新進同仁、每台新電腦的工作環境?
• 不同的專案相依的環境不同(環境、相依函
式庫、套件等版本)。
• 測試環境的建置?
– 通常測試機也不會有太多台…
– 開發與測試工程師之間的溝通成本…
• 平行測試?
Build once, run anywhere.
- developers
Configure once, run anything.
- operations
可能的解決方案 – 使用 VM
• 慢
• 吃效能
• 檔案大
 笨重,沒有效率。(用過的人就痛過…)
Container
• 利用命名空間來做權限的隔離控制、利用 cgroups
來做資源分配
• 獨立、安全的執行環境
– Isolated file system, network, process and block I/O space
• 包含這個 process 需要的東西
– filesystem, system libraries, shell…
A process in a box
+
Everything the process might need
Container 的標準化
Image
• 每次都要重新佈置 container?
• 把做好的 container 做成模板,可用來重複
建立自己需要的 container  container
image
• 類似 Github 的概念,分享自己做好的模板
 Repository
Image
Container
Image
PULL
Container’
RUN
CHANGE
Image
Commit
PUSH
Registry
Local
Image
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
Base Image: CentOS
Read-Write
Layer
Read-Only
Image
yum update
Apache
PHP5.3
MySQL
Bad Pattern…
基本概念
• Image: 一個唯讀的模板,可用來建立
container。
• Container: 從 image 建立的執行實例,可以
被啟動、停止、刪除等,每個 container 之
間都是隔離的。
• Repository: 類似 git,裡頭有許多 image 可
供使用。
– 公開的:Docker Hub (類似 github)
– 私有:可以透過 docker-registry 建立
Demo 1
• Search images from Docker Hub
• Pull image from Docker Hub
• Check Docker version and information
• Run a container from a image
• Commit a new image
• Create redis-server image
指令附在最後幾頁
Dockerfile
• 只是一個文字檔
– 可以當成文件用來溝通
– 可以進入版本控制系統
– 便於傳遞
• 可以透過 Docker Hub 綁定 Github,在使用
者提交後,自動建立新的 image。
# This is a nginx server
FROM ubuntu:12.04
MAINTAINER azole <azole@pchome.com.tw>
RUN apt-get -qq update
RUN apt-get -y install nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Container
websrv
Docker0 Bridge
(172.17.42.1)
docker run --name websrv -d –p 8080:80 azole/websrv
eth0
eth0
Host
port 80
port 8080
Container
websrv
Docker0 Bridge
(172.17.42.1)
docker run --name webdb -d mysql
docker run --name websrv –d -P --link webdb:mysql azole/websrv
eth0
eth0
Host
port 80
port 49161
Container
webdb
Link
Container
Websrv
Docker0 Bridge
(172.17.42.1)
docker run --name webdb -d mysql
docker run --name websrv –d -P --link webdb:mysql
-v /home/azole/webapp2:/usr/share/nginx/www azole/websrv
eth0
eth0
Host
port 80
port 49161
Link
Local FS
webapp1
webapp2
webapp3 path/www
Container
webdb
Demo 2
• Create a nginx server image from Dockerfile
• Expose port
• Link containers together
• Mount a data volume
指令附在最後幾頁
Demo 3
> docker run --name wp-mysql -e
MYSQL_ROOT_PASSWORD=test123456789 -d mysql
> docker run --name wp-site -P --link wp-
mysql:mysql -d wordpress
• 兩行指令建立 wordpress
結論
Reference
• Docker Official Tutorial
• Container Summit 技術高峰會2014
• Docker x PHP
• 10個Q&A快速認識Docker
## 練習1: 確認版本、資訊,pull image
> docker version
> docker info
> docker search -s 5 redis
## 直接看 docker hub
## https://registry.hub.docker.com/search?q=library
> docker pull ubuntu
> docker info
> docker images
> docker images -a
## 練習2:執行 contianer, 觀察 writable layer 的意思
> docker run -t -i ubuntu /bin/bash
>> touch azole.txt
>> ls -al
>> exit
> docker run -t -i ubuntu /bin/bash
>> ls –al ## 沒有 azole.txt
>> exit
> docker ps
> docker ps -a
> docker rm [container id2]
> docker commit [container id1] azole/test
> docker images
> docker -i -t azole/test /bin/bash
>> ls –al ## 這邊會看到有 azole.txt
>> exit
## 練習3:建立 redis-server image
> docker run -i -t ubuntu /bin/bash
>> apt-get update
>> apt-get install redis-server
>> servcie redis-server start
>> top
>> exit
> docker ps
> docker ps -a
> docker commit [image id] azole/redis
> docker images
> docker run -d -P azole/redis /usr/bin/redis-server
> docker ps
> docker logs [image id]
## 查詢 ip
> docker inspect [images id] | grep -i ipaddr
> redis-cli -h [ip] -p 6379
## 練習4:利用 Dockerfile 建立 image
> mkdir docker && cd
> nano Dockerfile
# this is a nginx server
FROM ubuntu:12.04
MAINTAINER azole <azole@pchome.com.tw>
RUN apt-get -qq update
RUN apt-get -y install nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
> docker build -t="azole/nginx" .
> docker images
> docker run --name nginxsrv -d -p 8080:80 azole/nginx
## 瀏覽器 http://ip:8080
> docker run --name nginxsrv2 -d -p 8080:80 -v
/root/webapp2:/usr/share/nginx/www azole/nginx
## 瀏覽器 http://ip:8080
## 修改網頁
## 瀏覽器 http://ip:8080
## 練習5:快速建立 wordpress
> docker run --name wp-mysql -e
MYSQL_ROOT_PASSWORD=test123456789 -d mysql
> docker run --name wp-site -P --link wp-mysql:mysql -d
wordpress
> docker port wp-site
## 或是用 container ID 來查也可以
## 用瀏覽器檢視是否有成功

Más contenido relacionado

La actualidad más candente

Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer TalkLarry Cai
 
DAE 新变化介绍
DAE 新变化介绍DAE 新变化介绍
DAE 新变化介绍Tianwei Liu
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用謝 宗穎
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧Chu-Siang Lai
 
Docker home ted
Docker home tedDocker home ted
Docker home tedLayne Peng
 
認識那條鯨魚 Docker 初探
認識那條鯨魚   Docker 初探認識那條鯨魚   Docker 初探
認識那條鯨魚 Docker 初探仲昀 王
 
Docker workshop
Docker workshopDocker workshop
Docker workshopWei Tung
 
Docker open stack
Docker open stackDocker open stack
Docker open stackGuangya Liu
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出Miles Chou
 
Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Miles Chou
 
Deployment with Capistrano
Deployment with CapistranoDeployment with Capistrano
Deployment with Capistrano旭 張
 
Docker初识
Docker初识Docker初识
Docker初识hubugui
 
Docker集群管理 工具篇
Docker集群管理 工具篇Docker集群管理 工具篇
Docker集群管理 工具篇Guangya Liu
 
Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2dotCloud
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)Will Huang
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽Will Huang
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训青帅 常
 
cec-hello-docker
cec-hello-dockercec-hello-docker
cec-hello-dockerBruce Huang
 

La actualidad más candente (20)

Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
DAE 新变化介绍
DAE 新变化介绍DAE 新变化介绍
DAE 新变化介绍
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧
 
Docker Build
Docker BuildDocker Build
Docker Build
 
Docker home ted
Docker home tedDocker home ted
Docker home ted
 
認識那條鯨魚 Docker 初探
認識那條鯨魚   Docker 初探認識那條鯨魚   Docker 初探
認識那條鯨魚 Docker 初探
 
Docker workshop
Docker workshopDocker workshop
Docker workshop
 
Docker open stack
Docker open stackDocker open stack
Docker open stack
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出
 
Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊
 
Deployment with Capistrano
Deployment with CapistranoDeployment with Capistrano
Deployment with Capistrano
 
Docker初识
Docker初识Docker初识
Docker初识
 
Docker集群管理 工具篇
Docker集群管理 工具篇Docker集群管理 工具篇
Docker集群管理 工具篇
 
Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
 
Docker基礎
Docker基礎Docker基礎
Docker基礎
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训
 
cec-hello-docker
cec-hello-dockercec-hello-docker
cec-hello-docker
 

Similar a Docker tutorial

啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定Shengyou Fan
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩Wen-Tien Chang
 
Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShopPhilip Zheng
 
使用Samba提升linux平台开发效率
使用Samba提升linux平台开发效率使用Samba提升linux平台开发效率
使用Samba提升linux平台开发效率Zhen Li
 
使用Samba提升linux平台开发效率
使用Samba提升linux平台开发效率使用Samba提升linux平台开发效率
使用Samba提升linux平台开发效率Zhen Li
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践YuLing Liu
 
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)acqua young
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Jeff Chu
 
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代scott liao
 
GNU Autoconf / Automake #4
GNU Autoconf / Automake #4GNU Autoconf / Automake #4
GNU Autoconf / Automake #4imacat .
 
Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版redhat9
 
讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術Yu Lung Shao
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & WindowsChu-Siang Lai
 
Docker introduce and vs kernel virtual machine
Docker introduce and vs kernel virtual machineDocker introduce and vs kernel virtual machine
Docker introduce and vs kernel virtual machineyangkun9
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结Yiwei Ma
 
FHIR Server 安裝與使用
FHIR Server 安裝與使用FHIR Server 安裝與使用
FHIR Server 安裝與使用Lorex L. Yang
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011Ching Yi Chan
 
Centos下安装apache + subversion
Centos下安装apache + subversionCentos下安装apache + subversion
Centos下安装apache + subversionYiwei Ma
 

Similar a Docker tutorial (20)

啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定
 
Docker 101
Docker 101Docker 101
Docker 101
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 
Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShop
 
使用Samba提升linux平台开发效率
使用Samba提升linux平台开发效率使用Samba提升linux平台开发效率
使用Samba提升linux平台开发效率
 
使用Samba提升linux平台开发效率
使用Samba提升linux平台开发效率使用Samba提升linux平台开发效率
使用Samba提升linux平台开发效率
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践
 
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
 
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
 
GNU Autoconf / Automake #4
GNU Autoconf / Automake #4GNU Autoconf / Automake #4
GNU Autoconf / Automake #4
 
Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版
 
讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
 
Docker introduce and vs kernel virtual machine
Docker introduce and vs kernel virtual machineDocker introduce and vs kernel virtual machine
Docker introduce and vs kernel virtual machine
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结
 
FHIR Server 安裝與使用
FHIR Server 安裝與使用FHIR Server 安裝與使用
FHIR Server 安裝與使用
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011
 
Centos下安装apache + subversion
Centos下安装apache + subversionCentos下安装apache + subversion
Centos下安装apache + subversion
 

Más de azole Lai

作業系統基本觀念複習
作業系統基本觀念複習作業系統基本觀念複習
作業系統基本觀念複習azole Lai
 
singularly continuous
singularly continuoussingularly continuous
singularly continuousazole Lai
 
利用Javascript 與 html5開發線上遊戲_1骰子遊戲
利用Javascript 與 html5開發線上遊戲_1骰子遊戲利用Javascript 與 html5開發線上遊戲_1骰子遊戲
利用Javascript 與 html5開發線上遊戲_1骰子遊戲azole Lai
 
利用Javascript 與 html5開發線上遊戲_0基本概念
利用Javascript 與 html5開發線上遊戲_0基本概念利用Javascript 與 html5開發線上遊戲_0基本概念
利用Javascript 與 html5開發線上遊戲_0基本概念azole Lai
 
利用Javascript 與 html5開發線上遊戲_2彈力球
利用Javascript 與 html5開發線上遊戲_2彈力球利用Javascript 與 html5開發線上遊戲_2彈力球
利用Javascript 與 html5開發線上遊戲_2彈力球azole Lai
 
20130908 Change the world?
20130908 Change the world?20130908 Change the world?
20130908 Change the world?azole Lai
 

Más de azole Lai (6)

作業系統基本觀念複習
作業系統基本觀念複習作業系統基本觀念複習
作業系統基本觀念複習
 
singularly continuous
singularly continuoussingularly continuous
singularly continuous
 
利用Javascript 與 html5開發線上遊戲_1骰子遊戲
利用Javascript 與 html5開發線上遊戲_1骰子遊戲利用Javascript 與 html5開發線上遊戲_1骰子遊戲
利用Javascript 與 html5開發線上遊戲_1骰子遊戲
 
利用Javascript 與 html5開發線上遊戲_0基本概念
利用Javascript 與 html5開發線上遊戲_0基本概念利用Javascript 與 html5開發線上遊戲_0基本概念
利用Javascript 與 html5開發線上遊戲_0基本概念
 
利用Javascript 與 html5開發線上遊戲_2彈力球
利用Javascript 與 html5開發線上遊戲_2彈力球利用Javascript 與 html5開發線上遊戲_2彈力球
利用Javascript 與 html5開發線上遊戲_2彈力球
 
20130908 Change the world?
20130908 Change the world?20130908 Change the world?
20130908 Change the world?
 

Docker tutorial

  • 2. Microsoft • 在下一版本的 windows server 中將內建 docker engine。 • 估計將在 2015/1 發佈
  • 3. 現在遇到的問題… • 每個新進同仁、每台新電腦的工作環境? • 不同的專案相依的環境不同(環境、相依函 式庫、套件等版本)。 • 測試環境的建置? – 通常測試機也不會有太多台… – 開發與測試工程師之間的溝通成本… • 平行測試?
  • 4. Build once, run anywhere. - developers Configure once, run anything. - operations
  • 5. 可能的解決方案 – 使用 VM • 慢 • 吃效能 • 檔案大  笨重,沒有效率。(用過的人就痛過…)
  • 6. Container • 利用命名空間來做權限的隔離控制、利用 cgroups 來做資源分配 • 獨立、安全的執行環境 – Isolated file system, network, process and block I/O space • 包含這個 process 需要的東西 – filesystem, system libraries, shell… A process in a box + Everything the process might need
  • 7.
  • 9. Image • 每次都要重新佈置 container? • 把做好的 container 做成模板,可用來重複 建立自己需要的 container  container image • 類似 Github 的概念,分享自己做好的模板  Repository
  • 11. Container (writable) Base Image: CentOS Read-Write Layer Read-Only Image 1.1 執行 (run) CentOS image  container
  • 12. Base Image: CentOS Container: yum update Read-Write Layer Read-Only Image 1.1 執行 (run) CentOS image  container 1.2 進行更新 yum update
  • 13. 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
  • 14. Base Image: CentOS Image A: Updated Read-Write Layer Read-Only Image 2.1 執行 (run) image A  container  會連 Base Image 都載入 Container 參考 parent Image
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. Base Image: CentOS Read-Write Layer Read-Only Image yum update Apache PHP5.3 MySQL Bad Pattern…
  • 24. 基本概念 • Image: 一個唯讀的模板,可用來建立 container。 • Container: 從 image 建立的執行實例,可以 被啟動、停止、刪除等,每個 container 之 間都是隔離的。 • Repository: 類似 git,裡頭有許多 image 可 供使用。 – 公開的:Docker Hub (類似 github) – 私有:可以透過 docker-registry 建立
  • 25.
  • 26. Demo 1 • Search images from Docker Hub • Pull image from Docker Hub • Check Docker version and information • Run a container from a image • Commit a new image • Create redis-server image 指令附在最後幾頁
  • 27. Dockerfile • 只是一個文字檔 – 可以當成文件用來溝通 – 可以進入版本控制系統 – 便於傳遞 • 可以透過 Docker Hub 綁定 Github,在使用 者提交後,自動建立新的 image。 # This is a nginx server FROM ubuntu:12.04 MAINTAINER azole <azole@pchome.com.tw> RUN apt-get -qq update RUN apt-get -y install nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
  • 28. Container websrv Docker0 Bridge (172.17.42.1) docker run --name websrv -d –p 8080:80 azole/websrv eth0 eth0 Host port 80 port 8080
  • 29. Container websrv Docker0 Bridge (172.17.42.1) docker run --name webdb -d mysql docker run --name websrv –d -P --link webdb:mysql azole/websrv eth0 eth0 Host port 80 port 49161 Container webdb Link
  • 30. Container Websrv Docker0 Bridge (172.17.42.1) docker run --name webdb -d mysql docker run --name websrv –d -P --link webdb:mysql -v /home/azole/webapp2:/usr/share/nginx/www azole/websrv eth0 eth0 Host port 80 port 49161 Link Local FS webapp1 webapp2 webapp3 path/www Container webdb
  • 31. Demo 2 • Create a nginx server image from Dockerfile • Expose port • Link containers together • Mount a data volume 指令附在最後幾頁
  • 32. Demo 3 > docker run --name wp-mysql -e MYSQL_ROOT_PASSWORD=test123456789 -d mysql > docker run --name wp-site -P --link wp- mysql:mysql -d wordpress • 兩行指令建立 wordpress
  • 34. Reference • Docker Official Tutorial • Container Summit 技術高峰會2014 • Docker x PHP • 10個Q&A快速認識Docker
  • 35. ## 練習1: 確認版本、資訊,pull image > docker version > docker info > docker search -s 5 redis ## 直接看 docker hub ## https://registry.hub.docker.com/search?q=library > docker pull ubuntu > docker info > docker images > docker images -a
  • 36. ## 練習2:執行 contianer, 觀察 writable layer 的意思 > docker run -t -i ubuntu /bin/bash >> touch azole.txt >> ls -al >> exit > docker run -t -i ubuntu /bin/bash >> ls –al ## 沒有 azole.txt >> exit > docker ps > docker ps -a > docker rm [container id2] > docker commit [container id1] azole/test > docker images > docker -i -t azole/test /bin/bash >> ls –al ## 這邊會看到有 azole.txt >> exit
  • 37. ## 練習3:建立 redis-server image > docker run -i -t ubuntu /bin/bash >> apt-get update >> apt-get install redis-server >> servcie redis-server start >> top >> exit > docker ps > docker ps -a > docker commit [image id] azole/redis > docker images > docker run -d -P azole/redis /usr/bin/redis-server > docker ps > docker logs [image id] ## 查詢 ip > docker inspect [images id] | grep -i ipaddr > redis-cli -h [ip] -p 6379
  • 38. ## 練習4:利用 Dockerfile 建立 image > mkdir docker && cd > nano Dockerfile # this is a nginx server FROM ubuntu:12.04 MAINTAINER azole <azole@pchome.com.tw> RUN apt-get -qq update RUN apt-get -y install nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] > docker build -t="azole/nginx" . > docker images > docker run --name nginxsrv -d -p 8080:80 azole/nginx ## 瀏覽器 http://ip:8080 > docker run --name nginxsrv2 -d -p 8080:80 -v /root/webapp2:/usr/share/nginx/www azole/nginx ## 瀏覽器 http://ip:8080 ## 修改網頁 ## 瀏覽器 http://ip:8080
  • 39. ## 練習5:快速建立 wordpress > docker run --name wp-mysql -e MYSQL_ROOT_PASSWORD=test123456789 -d mysql > docker run --name wp-site -P --link wp-mysql:mysql -d wordpress > docker port wp-site ## 或是用 container ID 來查也可以 ## 用瀏覽器檢視是否有成功

Notas del editor

  1. 每個新進同仁都要花幾天時間建置自己的工作環境。 不同的專案相依的環境不同(環境、相依函式庫、套件等版本)。 如上所述,除了開發環境外,測試環境也很難建置,通常測試機也不會有太多台,開發與測試工程師還要花時間溝通環境的建置。 測試速度很慢,因為環境只有一個,只能依序排隊測試。
  2. 但 Container 並不是一項新技術,早在1982年,Unix 系統內建的 chroot 機制也是一種Container技術。其他如1998年的FreeBSD jails、2005年出現的Solaris Zones和OpenVZ,或像是Windows系統2004年就有的Sandboxie機制都屬於在作業系統內建立孤立虛擬執行環境的作法,都可稱為是Container的技術。
  3. 傳統 VM 是在OS外來建立虛擬環境,透過Hypervisor在Host中模擬一套完整的硬體環境資源,目標是建立一個可以用來執行整套作業系統的沙箱獨立執行環境,所以VM做出來的是一個一個可以獨立安裝 OS 的「盒子」。 而 Container 是在OS內的核心系統層來打造虛擬執行環境,透過共用Host OS的作法,取代一個一個Guest OS的功用。 Container也因此被稱為是OS層的虛擬化技術。 Container 很輕、很快,啟動速度是秒級,可以大量節約開發、測試與部署的時間。
  4. Docker 的底層核心技術包括 Linux 上的命名空間 (Namespace)、控制組 (control groups)、Union 檔案系統 (UFS, Union File System)和容器格式 (Container Format)。
  5. OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
  6. OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
  7. OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
  8. OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
  9. OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
  10. OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
  11. OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
  12. OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
  13. OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
  14. OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
  15. OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
  16. OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
  17. OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
  18. 私有倉庫這邊,還能透過設定將 images 儲存到 S3 上去。
  19. Docker 是 2010 年創立的公司,後來轉型,在 2013年3月 Docker 釋出第一個版本,不到2年的時間,席捲整個 IT 界,或許我們沒有厲害到可以看出這個技術的未來,但我們可以相信這些公司的判斷。