docker intro
Upcoming SlideShare
Loading in...5
×
 

docker intro

on

  • 489 views

 

Statistics

Views

Total Views
489
Views on SlideShare
487
Embed Views
2

Actions

Likes
12
Downloads
17
Comments
0

1 Embed 2

http://www.plurk.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

docker intro docker intro Presentation Transcript

  • 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 REPOSITORIES
  • 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,馬 上執行 > docker search tomcat > docker pull tutum/tomcat:latest > docker run -d -p 8080:8080 tutum/tomcat
  • Docker Functions
  • Changes and Update
  • 邊玩邊了解
  • 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
  • Vagrant •1.6 supports Docker provider •為何需要 Vagrant ? •在非 Linux 環境下,透過編輯 Vagrantfile 方便管理 boot2docker •尤其 Synced Folders, Networking 很方 便,可以較輕鬆的讓 host 跟 container 溝通
  • 安裝 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
  • 安裝 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 Process Container ce8fd02cffaf Image Ubuntu 14.04
  • 安裝 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 !
  • 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
  • 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 Container 63d304af38e > docker run -i -t koji/java8 bash root@63d304af38ee:/#
  • 安裝 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
  • 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
  • push image
 OS Image Ubuntu 14.04 User Space Kernel Space Process Image koji/java8 > docker push koji/java8-tomcat7 Image koji/java8-tomcat7
  • Changes and Update
  • 其他 command •docker stop 停止 container •docker start 啟動停止的 container •docker rm 刪除 container •docker images 列出 images •docker rmi 刪除 image
  • •除了上述手動方式建立 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
  • 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↵
  • 常用功能 •Port Forwarding •Mount Volume •Linking Container
  • Port Forwarding •讓 host 的 port 轉到 container 指定 port •-p hostport:containerport > docker run -p 18080:8080 koji/tomcat startup.sh
  • 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:8080 tutum/ tomcat
  • •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 …
  • 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 path... 等等設定,但是 樣就跟正式執行時的設定有了差異 •修改 container 內設定,還是修改 container 外設 定?
  • 在測試環境下 •機器上同時有好幾個專案或不同版本 •port mapping •native library version incompatible •存取相同路徑下的 案 •通常每個 middleware 都必須改寫 port, file path...等等設定,但是 樣就跟正式執行時的 設定有了差異
  • 例如想要用 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 的方式, 因為輕量,所以多開 幾個執行也沒問題 •Selenium with real browser •Infrastructure CI
  • 用來嘗試新版本 •想裝一下應用程式試看看... •想裝一下新版的 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" }] } Dockerrun.aws.json
  • AWS •Elastic Beanstalk •不能多 container 在一台機器上 •可以用 EC2 自己建制好環境 •連上後自己操作 docker •搭配 Docker registry 背後用 Amazon S3 來當做 private repository
  • 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
  • 一些看到的建議 •每個 container 應該當作一種 VM,不需要 一個 process 一個 container •用角色為基礎去建立 container,就像設定 server 會有 web, db, batch, log •不要將資料存在 container 內,例如 db 要 存的資料,或是 log 應該放到 host
  • Thanks