SlideShare uma empresa Scribd logo
1 de 71
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2
dotCloud
 
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
 

Mais procurados (20)

Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出
 
Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊
 
Docker
DockerDocker
Docker
 
Continuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIContinuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CI
 
Docker應用
Docker應用Docker應用
Docker應用
 
cec-hello-docker
cec-hello-dockercec-hello-docker
cec-hello-docker
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
 
Docker初识
Docker初识Docker初识
Docker初识
 
認識那條鯨魚 Docker 初探
認識那條鯨魚   Docker 初探認識那條鯨魚   Docker 初探
認識那條鯨魚 Docker 初探
 
Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2
 
Continuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CIContinuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CI
 
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
QNAP MOPCON 2015 - 輕鬆打造持續整合開發環境,使用 QNAP Docker
QNAP MOPCON 2015 -  輕鬆打造持續整合開發環境,使用 QNAP DockerQNAP MOPCON 2015 -  輕鬆打造持續整合開發環境,使用 QNAP Docker
QNAP MOPCON 2015 - 輕鬆打造持續整合開發環境,使用 QNAP Docker
 
Deployment with Capistrano
Deployment with CapistranoDeployment with Capistrano
Deployment with Capistrano
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 

Destaque (7)

Installing and running Postfix within a docker container from the command line
Installing and running Postfix within a docker container from the command lineInstalling and running Postfix within a docker container from the command line
Installing and running Postfix within a docker container from the command line
 
Dockers y wp
Dockers y wpDockers y wp
Dockers y wp
 
Docker in10mins
Docker in10minsDocker in10mins
Docker in10mins
 
Dockerizing WordPress
Dockerizing WordPressDockerizing WordPress
Dockerizing WordPress
 
Docker by Example - Basics
Docker by Example - Basics Docker by Example - Basics
Docker by Example - Basics
 
Docker by Example - Basics
Docker by Example - Basics Docker by Example - Basics
Docker by Example - Basics
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 

Semelhante a docker intro

Semelhante a docker intro (20)

Docker open stack
Docker open stackDocker open stack
Docker open stack
 
Docker基礎
Docker基礎Docker基礎
Docker基礎
 
Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShop
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作
 
讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術
 
DAE 新变化介绍
DAE 新变化介绍DAE 新变化介绍
DAE 新变化介绍
 
Docker 101
Docker 101Docker 101
Docker 101
 
Docker基礎
Docker基礎Docker基礎
Docker基礎
 
Docker實務
Docker實務Docker實務
Docker實務
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)
 
Cloudstack dev/user sharing
Cloudstack dev/user sharingCloudstack dev/user sharing
Cloudstack dev/user sharing
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
 
Weic2015 docker
Weic2015 dockerWeic2015 docker
Weic2015 docker
 
企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養
 
Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践
 
Docker workshop
Docker workshopDocker workshop
Docker workshop
 
Docker集群管理 工具篇
Docker集群管理 工具篇Docker集群管理 工具篇
Docker集群管理 工具篇
 

Mais de koji lin (18)

サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
 
G1GC
G1GCG1GC
G1GC
 
Using armeria to write your RPC
Using armeria to write your RPCUsing armeria to write your RPC
Using armeria to write your RPC
 
使用 Java 上的 future/promise API
使用 Java 上的 future/promise  API使用 Java 上的 future/promise  API
使用 Java 上的 future/promise API
 
Annotation processing and code gen
Annotation processing and code genAnnotation processing and code gen
Annotation processing and code gen
 
Jcconf
JcconfJcconf
Jcconf
 
Use Lambdas in Android
Use Lambdas in AndroidUse Lambdas in Android
Use Lambdas in Android
 
Java8 time
Java8 timeJava8 time
Java8 time
 
Java8 stream
Java8 streamJava8 stream
Java8 stream
 
Java8 lambda
Java8 lambdaJava8 lambda
Java8 lambda
 
Idea13
Idea13Idea13
Idea13
 
CompletableFuture
CompletableFutureCompletableFuture
CompletableFuture
 
Raspberry Pi with Java
Raspberry Pi with JavaRaspberry Pi with Java
Raspberry Pi with Java
 
Services you can use to monitor and analyze mobile app
Services you can use to monitor and analyze mobile appServices you can use to monitor and analyze mobile app
Services you can use to monitor and analyze mobile app
 
Programming with Threads in Java
Programming with Threads in JavaProgramming with Threads in Java
Programming with Threads in Java
 
JQuery
JQueryJQuery
JQuery
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發
 
Android Location-based應用開發分享
Android Location-based應用開發分享Android Location-based應用開發分享
Android Location-based應用開發分享
 

docker intro