Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Docker
Search
張旭
October 10, 2016
Technology
0
120
Docker
Just another docker intro.
張旭
October 10, 2016
Tweet
Share
More Decks by 張旭
See All by 張旭
Using iTerm
zx1986
0
970
Deployment with Capistrano
zx1986
0
110
半導體簡介
zx1986
1
370
Other Decks in Technology
See All in Technology
スプリントゴールにチームの状態も設定する背景とその効果 / Team state in sprint goals why and impact
kakehashi
2
100
君は隠しイベントを見つけれるか?
mujyun
0
300
よくわからんサービスについての問い合わせが来たときの強い味方 Amazon Q について
kazzpapa3
0
220
AIを駆使したゲーム開発戦略: 新設AI組織の取り組み / sge-ai-strategy
cyberagentdevelopers
PRO
1
130
日経電子版におけるリアルタイムレコメンドシステム開発の事例紹介/nikkei-realtime-recommender-system
yng87
1
510
「 SharePoint 難しい」ってよく聞くけど、そんなに言うなら8歳の息子に試してもらった
taichinakamura
1
630
国土交通省 データコンペ参加者向け勉強会
takehikohashimoto
0
110
使えそうで使われないCloudHSM
maikamibayashi
0
170
プロダクトチームへのSystem Risk Records導入・運用事例の紹介/Introduction and Case Studies on Implementing and Operating System Risk Records for Product Teams
taddy_919
1
170
急成長中のWINTICKETにおける品質と開発スピードと向き合ったQA戦略と今後の展望 / winticket-autify
cyberagentdevelopers
PRO
1
160
【若手エンジニア応援LT会】AWSで繋がり、共に成長! ~コミュニティ活動と新人教育への挑戦~
kazushi_ohata
0
180
APIテスト自動化の勘所
yokawasa
7
4.2k
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Facilitating Awesome Meetings
lara
49
6k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
46
2.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
YesSQL, Process and Tooling at Scale
rocio
167
14k
GitHub's CSS Performance
jonrohan
1030
460k
Speed Design
sergeychernyshev
24
570
The Cult of Friendly URLs
andyhume
78
6k
A better future with KSS
kneath
238
17k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Designing on Purpose - Digital PM Summit 2013
jponch
115
6.9k
Transcript
張旭 @ 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 裡面其實就是一堆必要檔案的集合。
None
None
技術名詞
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 <
[email protected]
> 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
None
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 可以餵飽的團隊 (人數) ◦ 兩週可以開發完成的項目 (時間)
None
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