SlideShare uma empresa Scribd logo
1 de 45
Baixar para ler offline
張旭 @zx1986
Docker 是什麽?
從結果來看, 您可以使用 Docker 將 Application
封裝到一個相當類似於虛擬主機 (VM) 的隔離環
境 (術語叫 Container) 中執行。
Docker 是什麽?
想像一下,只要執行一行指令,您開發的網站就可
以掛載到一個已經配置好的「主機」中,立即提供服
務,啟動過程可以迅速到就像執行一次 ls 指令那
樣。
Docker 是什麽?
想像一下,您配置好的環境可以憑藉一個設定檔
(Dockerfile),在任何支援 Docker Container 的平
台運行起來,就像是將一台一模一樣的「主機」搬過
去插電 (或是虛擬主機複製) 運作起來一樣。
Docker 是什麽?
想像一下,寫一個設定檔 (docker-compose.yml),
使用一行指令,您就可以喚起多台「主機」,每臺負
責不同的服務,例如 HAProxy、Apache、MySQL、
Memcached,瞬間就可以全部啟動,且彼此間網路
是互通的,服務是可以對外開放的。
Docker 的特色 - 1
● 作業系統層級的虛擬化產品
● 實作涉及 Linux Kernel 功能
● 100% 原生硬體的效能
● 虛擬主機等級的隔離及資源分配
● 應用程式等級的輕量及方便
Docker 的特色 - 2
● 在呼叫 Linux 的核心提供的虛擬化模組時,0.9 版前還需依賴
LXC、libvirt 及 systemd-nspawn 的功能,0.9 版之後,就預設
使用自己開發的 libcontainter 來呼叫。
● 由唯讀的多層次映像檔 (Image) 做為模板 (產生 Container)
● 產生 Container 後,保持最上層可寫入 (用來提供服務)
底層原理
Container 技術發展史
● 1979 - chroot
● 2008 - LXC
● 2013 - LMCTFY (Let Me Contain That For You - Google)
● 2013 - Docker
● 2014 - Rocket
● 2016 - Windows Containers
LXC (LinuX Containers)
● Kernel Namespaces - PID, User, Mount, Network 隔離
● Cgroups - CPU, Memory, Disk I/O 隔離
● Chroot - File System 隔離
Docker 0.9 以後已經改用自行開發的 libcontainter 來實作。
Docker is more than LXC
● AUFS - Another Union File System,相當於把 Host
(Server) 的目錄當成 Guest (Container) 的 Disk。
● Base Image - 透過 base image,可以在 Docker上執行各種
的 Distribution Linux 而不受限於 Host 的 OS 種類,Image
裡面其實就是一堆必要檔案的集合。
技術名詞
Docker 術語
● Image
● Container
● Registry
Docker 術語 - Image
A Docker image is a read-only template.
● 唯讀的映像檔
● 相當於 VM 的樣板機
● 不可變更的 (immutable)
Docker 術語 - Container
A Docker container holds everything that is needed for an
application to run. Each container is created from a Docker
image.
● 以 Image 為基板,放到記憶體中執行的
● Docker 執行起來的最小單位
● Container 裡面必須有一個前景 (foreground) 執行的程式
Docker 術語 - Registry
Docker registries hold images.
● 存放 Image 的倉庫
● 類似 Github 之於 Git Repository 的角色
運作架構
簡單的 Docker Client / Server 架構
詳細一點的 Docker Client / Server 架構
原生與寄生的 Docker Server 差異
Docker Client 只要設定好正確的環境變數,
即可對遠端 Docker Server 進行操作:
DOCKER_TLS_VERIFY="1"
DOCKER_HOST="tcp://192.168.99.100:2376"
DOCKER_CERT_PATH="/machines/certs/"
DOCKER_MACHINE_NAME="dev"
Docker Client
From Anywhere
妥善授權給 Docker Client
使用方法
安裝 Docker Client / Server
Docker 安裝 - Mac
$ brew install docker-machine
$ brew install docker
https://docs.docker.com/docker-for-mac
原生的,會把 docker-compose 也裝起來,COOL
Docker 安裝 - Ubuntu 14.04
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80
--recv-keys 58118E89F3A912897C070ADBF76221572C52609D
$ sudo vim /etc/apt/sources.list.d/docker.list
deb https://apt.dockerproject.org/repo ubuntu-trusty main
$ sudo apt-get update
$ sudo apt-get purge lxc-docker
$ sudo apt-get install docker-engine
Docker 安裝 - CentOS
$ sudo vim /etc/yum.repos.d/docker.repo
$ sudo yum install docker-engine
[docker-repo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
Dockerfile
Dockerfile - 1
● 想象 Dockerfile 是一道食譜,大家根據食譜就可以烹調
(docker build) 出同樣一道菜 (Docker Image) 來。
● 可以勉強將 Dockerfile 先想像成 Ruby 的 Gemfile、
NodeJS 的 package.json 來理解, 但 Dockerfile 絕不僅僅
是宣告相依套件而已。
● Dockerfile 手冊
:https://docs.docker.com/engine/reference/builder/
Dockerfile - 2
FROM centos:6
MAINTAINER zx1986 <zx1986@gmail.com>
EXPOSE 80 3306
USER root
ENV LANG en_US.UTF-8
ENV TZ=Asia/Taipei
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN rpm -iUvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
RUN yum -y update && yum -y groupinstall "Development Tools"
RUN yum -y update && yum -y install python-pip && pip install meld3==1.0.0 supervisor
CMD ["/usr/bin/supervisord"]
● 一個簡單的 Dockerfile 範例
docker [client]
Docker 常用指令
● docker images
● docker pull ubuntu
● docker run -it ubuntu bash
● docker ps -a
● docker stop
● docker rm
docker-compose
docker-compose 安裝
$ curl -L
https://github.com/docker/compose/releases/download/1.8.1/docker-co
mpose-`uname -s`-`uname -m` > docker-compose
$ chmod a+x docker-compose
$ mv docker-compose /usr/local/bin/
$ docker-compose --version
docker-compose.yml
● yaml 格式 (YAML Ain't Markup Language)
● 給 docker-compose 指令看的設定檔。
● 根據 docker-compose.yml 的設定,docker-compose 可以一次啓
動多個 docker container,並設定之間的互通關聯、資料共享等。
● docker-compose 背後其實很多個 docker 指令的組合、搭配,類似
git-flow 工具的背後其實是很多 git 指令的組合。
● docker-compose.yml 手冊:
https://docs.docker.com/compose/compose-file/
docker-compose 常用指令
● docker-compose up -d
● docker-compose ps
● docker-compose restart
● docker-compose logs -f
● docker-compose stop
● docker-compose rm
應用思考
Microservice - Martin Fowler
● 微服務架構 (各自專注做好一件事)
● 怎樣算是 Microservice?
○ 兩個 Pizza 可以餵飽的團隊 (人數)
○ 兩週可以開發完成的項目 (時間)
Container 到底該專一還是多工?
● 專注於單一應用 (服務) 才符合 Docker 的精神?
● 把 Docker 當成 VM 那樣使用?
● Container 裡面要跑其他多個背景服務 (daemon) 怎麼辦?
推薦閱讀 http://phusion.github.io/baseimage-docker
Docker 的風險
● 一定要做分散式叢集服務
● 做好翻船的準備(請備妥救生艇 - 替代方案)
參考資料
● https://philipzheng.gitbooks.io/docker_practice/content/
● https://speakerdeck.com/fntsrlike/docker-chu-tan-shi-yan-shi-zhong-de-yun-huo-jing
● https://speakerdeck.com/sskorc/docker-and-php
● https://speakerdeck.com/akalyaev/inside-docker
● https://speakerdeck.com/ndemoor/what-is-docker
● https://speakerdeck.com/slok/ship-it-with-docker
● https://linux.cn/article-6975-1.html
● http://lab.howie.tw/2014/08/docker-docker-lxc-hypervisor.html

Mais conteúdo relacionado

Mais procurados

20150604 docker 新手入門
20150604 docker 新手入門20150604 docker 新手入門
20150604 docker 新手入門azole Lai
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to DockerChris Chen
 
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018Will Huang
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训青帅 常
 
Docker open stack
Docker open stackDocker open stack
Docker open stackGuangya Liu
 
docker intro
docker introdocker intro
docker introkoji lin
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出Miles Chou
 
Docker集群管理 工具篇
Docker集群管理 工具篇Docker集群管理 工具篇
Docker集群管理 工具篇Guangya Liu
 
Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器升煌 黃
 
Docker home ted
Docker home tedDocker home ted
Docker home tedLayne Peng
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer TalkLarry Cai
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Bo-Yi Wu
 
Docker進階探討
Docker進階探討Docker進階探討
Docker進階探討國昭 張
 
認識那條鯨魚 Docker 初探
認識那條鯨魚   Docker 初探認識那條鯨魚   Docker 初探
認識那條鯨魚 Docker 初探仲昀 王
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧Chu-Siang Lai
 
cec-hello-docker
cec-hello-dockercec-hello-docker
cec-hello-dockerBruce Huang
 
Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Miles Chou
 
QNAP MOPCON 2015 - 輕鬆打造持續整合開發環境,使用 QNAP Docker
QNAP MOPCON 2015 -  輕鬆打造持續整合開發環境,使用 QNAP DockerQNAP MOPCON 2015 -  輕鬆打造持續整合開發環境,使用 QNAP Docker
QNAP MOPCON 2015 - 輕鬆打造持續整合開發環境,使用 QNAP DockerWu Fan-Cheng
 

Mais procurados (20)

Docker基礎
Docker基礎Docker基礎
Docker基礎
 
20150604 docker 新手入門
20150604 docker 新手入門20150604 docker 新手入門
20150604 docker 新手入門
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
 
Docker實務
Docker實務Docker實務
Docker實務
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训
 
Docker open stack
Docker open stackDocker open stack
Docker open stack
 
docker intro
docker introdocker intro
docker intro
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出
 
Docker集群管理 工具篇
Docker集群管理 工具篇Docker集群管理 工具篇
Docker集群管理 工具篇
 
Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器
 
Docker home ted
Docker home tedDocker home ted
Docker home ted
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 
Docker進階探討
Docker進階探討Docker進階探討
Docker進階探討
 
認識那條鯨魚 Docker 初探
認識那條鯨魚   Docker 初探認識那條鯨魚   Docker 初探
認識那條鯨魚 Docker 初探
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧
 
cec-hello-docker
cec-hello-dockercec-hello-docker
cec-hello-docker
 
Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊
 
QNAP MOPCON 2015 - 輕鬆打造持續整合開發環境,使用 QNAP Docker
QNAP MOPCON 2015 -  輕鬆打造持續整合開發環境,使用 QNAP DockerQNAP MOPCON 2015 -  輕鬆打造持續整合開發環境,使用 QNAP Docker
QNAP MOPCON 2015 - 輕鬆打造持續整合開發環境,使用 QNAP Docker
 

Semelhante a Docker

Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShopPhilip Zheng
 
Ruby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuRuby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuMarsZ Chen
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建Liyang Tang
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽Will Huang
 
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境均民 戴
 
CloudStack Installation on Ubuntu
CloudStack Installation on UbuntuCloudStack Installation on Ubuntu
CloudStack Installation on Ubuntu康志強 大人
 
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacMarsZ Chen
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)Will Huang
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作Philip Zheng
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践YuLing Liu
 
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來Shengyou Fan
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结Yiwei Ma
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践yiditushe
 
Docker In-Depth
Docker In-DepthDocker In-Depth
Docker In-DepthDavid Hsu
 
为什么上网浏览要用Shadowsocks?
为什么上网浏览要用Shadowsocks?为什么上网浏览要用Shadowsocks?
为什么上网浏览要用Shadowsocks?zzzzzz gg
 
Mac osx 安裝apache cordova教學
Mac osx 安裝apache cordova教學Mac osx 安裝apache cordova教學
Mac osx 安裝apache cordova教學Duncan Chen
 
Cloudstack dev/user sharing
Cloudstack dev/user sharingCloudstack dev/user sharing
Cloudstack dev/user sharinggavin_lee
 
Android系统移植技术详解
Android系统移植技术详解Android系统移植技术详解
Android系统移植技术详解zzc89522
 

Semelhante a Docker (20)

Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShop
 
Ruby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuRuby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for Ubuntu
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
 
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
 
CloudStack Installation on Ubuntu
CloudStack Installation on UbuntuCloudStack Installation on Ubuntu
CloudStack Installation on Ubuntu
 
Docker 101
Docker 101Docker 101
Docker 101
 
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for Mac
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践
 
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
 
Docker In-Depth
Docker In-DepthDocker In-Depth
Docker In-Depth
 
OSGi Small Lab
OSGi Small LabOSGi Small Lab
OSGi Small Lab
 
为什么上网浏览要用Shadowsocks?
为什么上网浏览要用Shadowsocks?为什么上网浏览要用Shadowsocks?
为什么上网浏览要用Shadowsocks?
 
Mac osx 安裝apache cordova教學
Mac osx 安裝apache cordova教學Mac osx 安裝apache cordova教學
Mac osx 安裝apache cordova教學
 
Cloudstack dev/user sharing
Cloudstack dev/user sharingCloudstack dev/user sharing
Cloudstack dev/user sharing
 
Android系统移植技术详解
Android系统移植技术详解Android系统移植技术详解
Android系统移植技术详解
 

Docker