Your SlideShare is downloading. ×
0
Docker Introduction
@kojilin
2014/06/14@TWJUG
Who?
•林康司 a.k.a kojilin
•@kojilin
•TWJUG organizer
•JWorld@TW Admin
•Senior Engineer at Cubie Inc.
•平常都在用 Java
Why docker?
潮
潮
潮
潮
•Redhat OpenShift
•Amazon AWS
•Google Cloud Platform
•Microsoft Azure
•...
潮
•Redhat OpenShift
•Amazon AWS
•Google Cloud Platform
•Microsoft Azure
•...
from ANNOUNCING DOCKER HUB AND OFFICIAL REPOS...
What is Docker?
•Docker 公司開發的產品
What is Docker?
•Docker 公司開發的產品
•使用 golang 寫
What is Docker?
•Docker 公司開發的產品
•使用 golang 寫
•Container based virtualization
framework
Container ?
虛擬化的種類
•Host (Type2)
•Hypervisor (Type1)
•Container
Host
硬體
虛擬
機器
Guest
OS
虛擬
機器
Guest
OS
虛擬
機器
Guest
OS
Host OS
App App App
•Virtualbox
•VMWare Fusion
Hypervisor
Hypervisor
虛擬
機器
Guest
OS
虛擬
機器
Guest
OS
虛擬
機器
Guest
OS
App App App
•Hyper-V
•Xen
•VMware ESX、ESXi
硬體
Hypervisor
Container
硬體
bin/lib
App
bin/lib
App
bin/lib
App
Host OS
•Docker
VM vs Containers
VM vs Containers
What is Docker?
•Docker 公司開發的產品
•使用 golang 寫
•Container based virtualization
framework
•輕量 -> 快 !!
•與其說是虛擬化,比較像是隔離
What is Docker?
•Docker 公司開發的產品
•使用 golang 寫
•Container
•Union File System
What is Docker?
•Docker 公司開發的產品
•使用 golang 寫
•Container
•Union File System
•方便的 Container(image) 發 取得方式
Image 的發 和取得
•編輯原本的 Image 產生新的 Image
•將 Image 登錄到 Docker Hub
•http://hub.docker.com
•可以從 Docker Hub 下載合適的 Image,馬
上執行
> do...
Docker Functions
Changes and Update
邊玩邊了解
Docker on OSX
•OSX 可以 Docker command,但是不能直接執行
Docker Container
•因為不是 Linux
•使用 VM 來準備 Linux Host 環境
•會變成 OSX -> Proxy VM -...
Vagrant
•1.6 supports Docker provider
•為何需要 Vagrant ?
•在非 Linux 環境下,透過編輯 Vagrantfile
方便管理 boot2docker
•尤其 Synced Folders, N...
安裝 docker 環境 Ubuntu
•sudo apt-get install docker.io
•sudo docker.io pull ubuntu
•sudo ln -sf /usr/bin/docker.io /usr/
loca...
安裝 docker 環境 Mac
•安裝 VirtualBox
•透過 brew 安裝 boot2docker
•透過 brew 安裝 docker
or
•安裝 VirtualBox
•安裝 Vagrant 1.6
取得 base image

> docker pull dockerfile/ubuntu
OS
User Space
Kernel Space
Process
Image
Ubuntu 14.04
啟動 container

> docker run -i -t dockerfile/ubuntu bash
root@ce9fd02cffaf:/#
OS
User Space
Kernel Space
Process
User Space
P...
安裝 Java

root@ce9fd02cffaf:/# add-apt-repository ppa:webupd8team/
java
root@ce9fd02cffaf:/# apt-get update
root@ce9fd02cffaf:...
List and Commit container

OS
Image
Ubuntu 14.04
User Space
Kernel Space
Process
Image
koji/java8
> docker ps -a
CONTAINER...
Push image to docker hub

OS
Image
Ubuntu 14.04
User Space
Kernel Space
Process
Image
koji/java8
> docker push koji/java8
Docker Functions
啟動新 image 上的 container

OS
Image
Ubuntu 14.04
User Space
Kernel Space
Process
User Space
Process
Image
koji/java8
Containe...
安裝 Tomcat 7

OS
Image
Ubuntu 14.04
User Space
Kernel Space
Process
User Space
Process
Image
koji/java8
root@63d304af38ee:/...
Commit container

OS
Image
Ubuntu 14.04
User Space
Kernel Space
Process
Image
koji/java8
root@63d304af38ee:/# exit
> docke...
push image

OS
Image
Ubuntu 14.04
User Space
Kernel Space
Process
Image
koji/java8
> docker push koji/java8-tomcat7
Image
...
Changes and Update
其他 command
•docker stop 停止 container
•docker start 啟動停止的 container
•docker rm 刪除 container
•docker images 列出 images
•docke...
•除了上述手動方式建立 image 之外,我們也
可以透過敘述指令的 案來建立
•Docker can act as a builder and read
instructions from a text Dockerfile to
automa...
Dockerfile (cont.)
> docker build .
FROM ubuntu↵
MAINTAINER Koji lin <koji.lin@gmail.com>↵
!
RUN echo "deb http://archive.u...
常用功能
•Port Forwarding
•Mount Volume
•Linking Container
Port Forwarding
•讓 host 的 port 轉到 container 指定 port
•-p hostport:containerport
> docker run -p 18080:8080 koji/tomcat star...
Mount Volume
•可以將 host 的目錄讓 container 存取
•-v /host:/container
> docker run -v /host-hoge:/hoge -d -p 8080:8080
tutum/tomcat
Linking Container
•除了 port forwarding 外,container 之間
可以透過 container linking 的方式溝通
> docker run --link db:db -d -p 8080:808...
•Docker 透過兩種方式分享被 link 的
container 的資
> env
DB_NAME=/xxxx/db
DB_PORT_8080_TCP_ADDRE=172.17.0.2
DB_POER_8080_TCP_PORT=8080
...
Why Docker?
DevOps
•如果打包成 Docker Image, 只要有 Docker
環境就都能 ,而且和 local 驗證環境的結果
相同
•可以在不同 PaaS 間輕易遊走
•便於達到 Immutable Infrastructure
Developer
•如果容易受到執行環境的影響,那使用
Docker 會比較方便(例如版本衝突)
•對 Java 開發者來說 ?
•IDE 就可以設定執行時的 VM 和對象
•通常相依的 Library 都是純 Java
Developer (cont.)
•開發者之間可以直接共享同樣驗證環境
•可以和測試,正式部署使用相同環境
•使用某個執行中的 Image 做驗證
•可以將開發環境丟到執行環境就能
在測試環境下
•機器上同時有好幾個專案或不同版本
•port mapping
•native library version incompatible
•存取相同路徑下的 案
•通常每個 middleware 都必須改寫 port, file p...
在測試環境下
•機器上同時有好幾個專案或不同版本
•port mapping
•native library version incompatible
•存取相同路徑下的 案
•通常每個 middleware 都必須改寫 port, file
p...
例如想要用 Wordpress
•PHP 5.2.4 or greater
•MySQL 5.0 or greater
•The mod_rewrite apache module
例如想要用 Wordpress
•PHP 5.2.4 or greater
•MySQL 5.0 or greater
•The mod_rewrite apache module
•剛好機器上有 nginx
•剛好已經有 PHP4 的東西
例如想要用 Wordpress
•PHP 5.2.4 or greater
•MySQL 5.0 or greater
•The mod_rewrite apache module
•剛好機器上有 nginx
•剛好已經有 PHP4 的東西
Testing
•每次 Build 時建立一個新的 container
•透過 -v mount volume 來取得程式
•每個 Build 都是隔離且乾淨的環境
•相對於像 Vagrant 的方式, 因為輕量,所以多開
幾個執行也沒問題
•...
用來嘗試新版本
•想裝一下應用程式試看看...
•想裝一下新版的 Application Server 測試運
作中的專案...
•想裝一下跟電腦上不同的新版 DBMS,但是
我機器上已經...
Deploy to Cloud
AWS
•Elastic Beanstalk
EC2
Tomcat
Application
EC2
Docker
Guest OS
Java(Tomcat) Docker
Tomcat
Application
Demo
{
"AWSEBDockerrunVersion": "1",
"Image" : { "Name" : "tutum/tomcat:8.0" },
"Ports" : [{ "ContainerPort": "8080" }]
}
Docke...
AWS
•Elastic Beanstalk
•不能多 container 在一台機器上
•可以用 EC2 自己建制好環境
•連上後自己操作 docker
•搭配 Docker registry 背後用 Amazon S3
來當做 privat...
Google Compute Engine
•有提供 Container-optimized Google
Compute Engine images
•透過 gcloud 建立 instance 後就可以連上使
用 docker
> gclo...
一些看到的建議
•每個 container 應該當作一種 VM,不需要
一個 process 一個 container
•用角色為基礎去建立 container,就像設定
server 會有 web, db, batch, log
•不要將資料...
Thanks
docker intro
docker intro
docker intro
docker intro
Upcoming SlideShare
Loading in...5
×

docker intro

815

Published on

Published in: Technology

Transcript of "docker intro"

  1. 1. Docker Introduction @kojilin 2014/06/14@TWJUG
  2. 2. Who? •林康司 a.k.a kojilin •@kojilin •TWJUG organizer •JWorld@TW Admin •Senior Engineer at Cubie Inc. •平常都在用 Java
  3. 3. Why docker?
  4. 4.
  5. 5.
  6. 6.
  7. 7. 潮 •Redhat OpenShift •Amazon AWS •Google Cloud Platform •Microsoft Azure •...
  8. 8. 潮 •Redhat OpenShift •Amazon AWS •Google Cloud Platform •Microsoft Azure •... from ANNOUNCING DOCKER HUB AND OFFICIAL REPOSITORIES
  9. 9. What is Docker? •Docker 公司開發的產品
  10. 10. What is Docker? •Docker 公司開發的產品 •使用 golang 寫
  11. 11. What is Docker? •Docker 公司開發的產品 •使用 golang 寫 •Container based virtualization framework
  12. 12. Container ?
  13. 13. 虛擬化的種類 •Host (Type2) •Hypervisor (Type1) •Container
  14. 14. Host 硬體 虛擬 機器 Guest OS 虛擬 機器 Guest OS 虛擬 機器 Guest OS Host OS App App App •Virtualbox •VMWare Fusion Hypervisor
  15. 15. Hypervisor 虛擬 機器 Guest OS 虛擬 機器 Guest OS 虛擬 機器 Guest OS App App App •Hyper-V •Xen •VMware ESX、ESXi 硬體 Hypervisor
  16. 16. Container 硬體 bin/lib App bin/lib App bin/lib App Host OS •Docker
  17. 17. VM vs Containers
  18. 18. VM vs Containers
  19. 19. What is Docker? •Docker 公司開發的產品 •使用 golang 寫 •Container based virtualization framework •輕量 -> 快 !! •與其說是虛擬化,比較像是隔離
  20. 20. What is Docker? •Docker 公司開發的產品 •使用 golang 寫 •Container •Union File System
  21. 21. What is Docker? •Docker 公司開發的產品 •使用 golang 寫 •Container •Union File System •方便的 Container(image) 發 取得方式
  22. 22. Image 的發 和取得 •編輯原本的 Image 產生新的 Image •將 Image 登錄到 Docker Hub •http://hub.docker.com •可以從 Docker Hub 下載合適的 Image,馬 上執行 > docker search tomcat > docker pull tutum/tomcat:latest > docker run -d -p 8080:8080 tutum/tomcat
  23. 23. Docker Functions
  24. 24. Changes and Update
  25. 25. 邊玩邊了解
  26. 26. Docker on OSX •OSX 可以 Docker command,但是不能直接執行 Docker Container •因為不是 Linux •使用 VM 來準備 Linux Host 環境 •會變成 OSX -> Proxy VM -> Docker container •所以許多 host 跟 container 溝通的功能會是
 Proxy VM <-> container,而不是想像中的 
 OSX <-> container •官方是建議安裝 boot2docker
  27. 27. Vagrant •1.6 supports Docker provider •為何需要 Vagrant ? •在非 Linux 環境下,透過編輯 Vagrantfile 方便管理 boot2docker •尤其 Synced Folders, Networking 很方 便,可以較輕鬆的讓 host 跟 container 溝通
  28. 28. 安裝 docker 環境 Ubuntu •sudo apt-get install docker.io •sudo docker.io pull ubuntu •sudo ln -sf /usr/bin/docker.io /usr/ local/bin/docker •sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/ docker.io
  29. 29. 安裝 docker 環境 Mac •安裝 VirtualBox •透過 brew 安裝 boot2docker •透過 brew 安裝 docker or •安裝 VirtualBox •安裝 Vagrant 1.6
  30. 30. 取得 base image
 > docker pull dockerfile/ubuntu OS User Space Kernel Space Process Image Ubuntu 14.04
  31. 31. 啟動 container
 > docker run -i -t dockerfile/ubuntu bash root@ce9fd02cffaf:/# OS User Space Kernel Space Process User Space Process Container ce8fd02cffaf Image Ubuntu 14.04
  32. 32. 安裝 Java
 root@ce9fd02cffaf:/# add-apt-repository ppa:webupd8team/ java root@ce9fd02cffaf:/# apt-get update root@ce9fd02cffaf:/# apt-get -y upgrade root@ce9fd02cffaf:/# echo oracle-java8-installer shared/ accepted-oracle-license-v1-1 select true ¦ /usr/bin/debconf- set-selections root@ce9fd02cffaf:/# apt-get -y install oracle-java8-installer && apt-get clean root@ce9fd02cffaf:/# exit !
  33. 33. List and Commit container
 OS Image Ubuntu 14.04 User Space Kernel Space Process Image koji/java8 > docker ps -a CONTAINER ID IMAGE COMMAND ce9fd02cffaf dockerfile/ubuntu:latest bash > docker commit ce9fd02cffaf koji/java8
  34. 34. Push image to docker hub
 OS Image Ubuntu 14.04 User Space Kernel Space Process Image koji/java8 > docker push koji/java8
  35. 35. Docker Functions
  36. 36. 啟動新 image 上的 container
 OS Image Ubuntu 14.04 User Space Kernel Space Process User Space Process Image koji/java8 Container 63d304af38e > docker run -i -t koji/java8 bash root@63d304af38ee:/#
  37. 37. 安裝 Tomcat 7
 OS Image Ubuntu 14.04 User Space Kernel Space Process User Space Process Image koji/java8 root@63d304af38ee:/# apt-get install tomcat7 Container 63d304af38e
  38. 38. Commit container
 OS Image Ubuntu 14.04 User Space Kernel Space Process Image koji/java8 root@63d304af38ee:/# exit > docker commit 63d304af38ee koji/java8-tomcat7 Image koji/java8-tomcat7
  39. 39. push image
 OS Image Ubuntu 14.04 User Space Kernel Space Process Image koji/java8 > docker push koji/java8-tomcat7 Image koji/java8-tomcat7
  40. 40. Changes and Update
  41. 41. 其他 command •docker stop 停止 container •docker start 啟動停止的 container •docker rm 刪除 container •docker images 列出 images •docker rmi 刪除 image
  42. 42. •除了上述手動方式建立 image 之外,我們也 可以透過敘述指令的 案來建立 •Docker can act as a builder and read instructions from a text Dockerfile to automate the steps you would otherwise take manually to create an image Dockerfile
  43. 43. Dockerfile (cont.) > docker build . FROM ubuntu↵ MAINTAINER Koji lin <koji.lin@gmail.com>↵ ! RUN echo "deb http://archive.ubuntu.com/ ubuntu precise main universe" > /etc/apt/ sources.list↵ RUN apt-get update↵ ! RUN apt-get install -y inotify-tools nginx apache2 openssh-server↵
  44. 44. 常用功能 •Port Forwarding •Mount Volume •Linking Container
  45. 45. Port Forwarding •讓 host 的 port 轉到 container 指定 port •-p hostport:containerport > docker run -p 18080:8080 koji/tomcat startup.sh
  46. 46. Mount Volume •可以將 host 的目錄讓 container 存取 •-v /host:/container > docker run -v /host-hoge:/hoge -d -p 8080:8080 tutum/tomcat
  47. 47. Linking Container •除了 port forwarding 外,container 之間 可以透過 container linking 的方式溝通 > docker run --link db:db -d -p 8080:8080 tutum/ tomcat
  48. 48. •Docker 透過兩種方式分享被 link 的 container 的資 > env DB_NAME=/xxxx/db DB_PORT_8080_TCP_ADDRE=172.17.0.2 DB_POER_8080_TCP_PORT=8080 … > less /etc/hosts … 172.17.0.2 db …
  49. 49. Why Docker?
  50. 50. DevOps •如果打包成 Docker Image, 只要有 Docker 環境就都能 ,而且和 local 驗證環境的結果 相同 •可以在不同 PaaS 間輕易遊走 •便於達到 Immutable Infrastructure
  51. 51. Developer •如果容易受到執行環境的影響,那使用 Docker 會比較方便(例如版本衝突) •對 Java 開發者來說 ? •IDE 就可以設定執行時的 VM 和對象 •通常相依的 Library 都是純 Java
  52. 52. Developer (cont.) •開發者之間可以直接共享同樣驗證環境 •可以和測試,正式部署使用相同環境 •使用某個執行中的 Image 做驗證 •可以將開發環境丟到執行環境就能
  53. 53. 在測試環境下 •機器上同時有好幾個專案或不同版本 •port mapping •native library version incompatible •存取相同路徑下的 案 •通常每個 middleware 都必須改寫 port, file path... 等等設定,但是 樣就跟正式執行時的設定有了差異 •修改 container 內設定,還是修改 container 外設 定?
  54. 54. 在測試環境下 •機器上同時有好幾個專案或不同版本 •port mapping •native library version incompatible •存取相同路徑下的 案 •通常每個 middleware 都必須改寫 port, file path...等等設定,但是 樣就跟正式執行時的 設定有了差異
  55. 55. 例如想要用 Wordpress •PHP 5.2.4 or greater •MySQL 5.0 or greater •The mod_rewrite apache module
  56. 56. 例如想要用 Wordpress •PHP 5.2.4 or greater •MySQL 5.0 or greater •The mod_rewrite apache module •剛好機器上有 nginx •剛好已經有 PHP4 的東西
  57. 57. 例如想要用 Wordpress •PHP 5.2.4 or greater •MySQL 5.0 or greater •The mod_rewrite apache module •剛好機器上有 nginx •剛好已經有 PHP4 的東西
  58. 58. Testing •每次 Build 時建立一個新的 container •透過 -v mount volume 來取得程式 •每個 Build 都是隔離且乾淨的環境 •相對於像 Vagrant 的方式, 因為輕量,所以多開 幾個執行也沒問題 •Selenium with real browser •Infrastructure CI
  59. 59. 用來嘗試新版本 •想裝一下應用程式試看看... •想裝一下新版的 Application Server 測試運 作中的專案... •想裝一下跟電腦上不同的新版 DBMS,但是 我機器上已經...
  60. 60. Deploy to Cloud
  61. 61. AWS •Elastic Beanstalk EC2 Tomcat Application EC2 Docker Guest OS Java(Tomcat) Docker Tomcat Application
  62. 62. Demo
  63. 63. { "AWSEBDockerrunVersion": "1", "Image" : { "Name" : "tutum/tomcat:8.0" }, "Ports" : [{ "ContainerPort": "8080" }] } Dockerrun.aws.json
  64. 64. AWS •Elastic Beanstalk •不能多 container 在一台機器上 •可以用 EC2 自己建制好環境 •連上後自己操作 docker •搭配 Docker registry 背後用 Amazon S3 來當做 private repository
  65. 65. Google Compute Engine •有提供 Container-optimized Google Compute Engine images •透過 gcloud 建立 instance 後就可以連上使 用 docker > gcloud compute instances create instance-name --image projects/google-containers/global/images/ container-vm-v20140522 --zone us-central1-a --machine-type f1-micro
  66. 66. 一些看到的建議 •每個 container 應該當作一種 VM,不需要 一個 process 一個 container •用角色為基礎去建立 container,就像設定 server 會有 web, db, batch, log •不要將資料存在 container 內,例如 db 要 存的資料,或是 log 應該放到 host
  67. 67. Thanks
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×