More Related Content Similar to Docker tutorial
Similar to Docker tutorial (20) Docker tutorial4. Build once, run anywhere.
- developers
Configure once, run anything.
- operations
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
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
24. 基本概念
• Image: 一個唯讀的模板,可用來建立
container。
• Container: 從 image 建立的執行實例,可以
被啟動、停止、刪除等,每個 container 之
間都是隔離的。
• Repository: 類似 git,裡頭有許多 image 可
供使用。
– 公開的:Docker Hub (類似 github)
– 私有:可以透過 docker-registry 建立
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;"]
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
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 來查也可以
## 用瀏覽器檢視是否有成功
Editor's Notes 每個新進同仁都要花幾天時間建置自己的工作環境。
不同的專案相依的環境不同(環境、相依函式庫、套件等版本)。
如上所述,除了開發環境外,測試環境也很難建置,通常測試機也不會有太多台,開發與測試工程師還要花時間溝通環境的建置。
測試速度很慢,因為環境只有一個,只能依序排隊測試。 但 Container 並不是一項新技術,早在1982年,Unix 系統內建的 chroot 機制也是一種Container技術。其他如1998年的FreeBSD jails、2005年出現的Solaris Zones和OpenVZ,或像是Windows系統2004年就有的Sandboxie機制都屬於在作業系統內建立孤立虛擬執行環境的作法,都可稱為是Container的技術。
傳統 VM 是在OS外來建立虛擬環境,透過Hypervisor在Host中模擬一套完整的硬體環境資源,目標是建立一個可以用來執行整套作業系統的沙箱獨立執行環境,所以VM做出來的是一個一個可以獨立安裝 OS 的「盒子」。
而 Container 是在OS內的核心系統層來打造虛擬執行環境,透過共用Host OS的作法,取代一個一個Guest OS的功用。
Container也因此被稱為是OS層的虛擬化技術。
Container 很輕、很快,啟動速度是秒級,可以大量節約開發、測試與部署的時間。
Docker 的底層核心技術包括 Linux 上的命名空間 (Namespace)、控制組 (control groups)、Union 檔案系統 (UFS, Union File System)和容器格式 (Container Format)。 OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
OS 基礎映象檔的用途是讓 Container 擁有這 OS 的檔案系統,例如使用 ubuntu 基礎映象檔就可以讓 Container 建立 ubuntu 的根目錄架構,而不是用來執行一個 OS 執行實例。
私有倉庫這邊,還能透過設定將 images 儲存到 S3 上去。 Docker 是 2010 年創立的公司,後來轉型,在 2013年3月 Docker 釋出第一個版本,不到2年的時間,席捲整個 IT 界,或許我們沒有厲害到可以看出這個技術的未來,但我們可以相信這些公司的判斷。