Docker和容器技術(shù)是當(dāng)下*火的IT技術(shù),無論是互聯(lián)網(wǎng)還是傳統(tǒng)企業(yè)都在研究和實(shí)踐如何用容器構(gòu)建自己的 IT 基礎(chǔ)設(shè)施。學(xué)習(xí)本書能夠讓讀者少走彎路,系統(tǒng)地學(xué)習(xí)、掌握和實(shí)踐 Docker 和容器技術(shù)。
本書共分為三部分。*部分介紹容器技術(shù)生態(tài)環(huán)境。第二部分是容器核心知識(shí),包括架構(gòu)、鏡像、容器、網(wǎng)絡(luò)和存儲(chǔ)。第三部分是容器進(jìn)階知識(shí),包括多主機(jī)管理、跨主機(jī)網(wǎng)絡(luò)方案、監(jiān)控、日志管理和數(shù)據(jù)管理。讀者在學(xué)習(xí)的過程中,可以跟著教程進(jìn)行操作,在實(shí)踐中掌握 Docker 容器技術(shù)的核心技能。在之后的工作中,可以將本教程作為參考書,按需查找相關(guān)知識(shí)點(diǎn)。
本書主要面向微服務(wù)軟件開發(fā)人員,以及 IT 實(shí)施和運(yùn)維工程師等相關(guān)人員,也適合高等院校和培訓(xùn)學(xué)校相關(guān)專業(yè)的師生教學(xué)參考。
容器技術(shù)是繼大數(shù)據(jù)和云計(jì)算之后又一炙手可熱的技術(shù),而且未來相當(dāng)一段時(shí)間內(nèi)都會(huì)非常流行對(duì) IT 從業(yè)者來說,掌握容器技術(shù)是市場的需要,也是提升自我價(jià)值的重要途徑每一輪新技術(shù)的興起,無論對(duì)公司還是個(gè)人既是機(jī)會(huì)也是挑戰(zhàn)
前 言
寫在最前面
《每天5分鐘玩轉(zhuǎn)Docker容器技術(shù)》是一個(gè)有關(guān)容器技術(shù)的教程,有下面兩個(gè)特點(diǎn):
1. 系統(tǒng)講解當(dāng)前最流行的容器技術(shù)
從容器的整個(gè)生態(tài)環(huán)境到各種具體的技術(shù),從整體到細(xì)節(jié)逐一討論。
2. 重實(shí)踐并兼顧理論
從實(shí)際操作的角度帶領(lǐng)大家學(xué)習(xí)容器技術(shù)。
為什么要寫這個(gè)
簡單回答是:容器技術(shù)非常熱門,但門檻高。
容器技術(shù)是繼大數(shù)據(jù)和云計(jì)算之后又一炙手可熱的技術(shù),而且未來相當(dāng)一段時(shí)間內(nèi)都會(huì)非常流行。
對(duì) IT 行業(yè)來說,這是一項(xiàng)非常有價(jià)值的技術(shù)。而對(duì) IT 從業(yè)者來說,掌握容器技術(shù)是市場的需要,也是提升自我價(jià)值的重要途徑。
拿我自己的工作經(jīng)歷來說,畢業(yè)后的頭幾年是做 J2EE 應(yīng)用開發(fā)。后來到一家大型IT公司,公司的產(chǎn)品從中間件到操作系統(tǒng)、從服務(wù)器到存儲(chǔ)、從虛擬化到云計(jì)算都有涉及。
我所在的部門是專門做 IT 基礎(chǔ)設(shè)施實(shí)施服務(wù)的,最開始是做傳統(tǒng)的 IT 項(xiàng)目,包括服務(wù)器配置,雙機(jī) HA 等。隨著虛擬化技術(shù)成熟,工作上也開始涉及各種虛擬化技術(shù)的規(guī)劃和實(shí)施,包括 VMWare、KVM、PowerVM等。后來云計(jì)算興起,在公司業(yè)務(wù)和個(gè)人興趣的驅(qū)動(dòng)下,開始學(xué)習(xí)和實(shí)踐 OpenStack,在這個(gè)過程中寫了《每天5分鐘玩轉(zhuǎn)OpenStack》教程并得到大家的認(rèn)可。
現(xiàn)在以 Docker 為代表的容器技術(shù)來了,而且關(guān)注度越來越高,這一點(diǎn)可以從 Google Trend 中 Docker 的搜索上升趨勢(shì)中清楚看到,如下圖所示(圖中曲線上揚(yáng)最高的為Docker)。
每一輪新技術(shù)的興起,無論對(duì)公司還是個(gè)人既是機(jī)會(huì)也是挑戰(zhàn)。
我個(gè)人的看法是:如果某項(xiàng)新技術(shù)未來將成為主流,就應(yīng)該及早盡快掌握。
因?yàn)椋?/p>
1. 新技術(shù)意味著新的市場和新的需求
初期掌握這種技術(shù)的人不會(huì)很多,而市場需求會(huì)越來越大,因而會(huì)形成供不應(yīng)求的賣方市場,物以稀為貴,這對(duì)技術(shù)人員將是一個(gè)難得的價(jià)值提升機(jī)會(huì)。
2. 學(xué)習(xí)新技術(shù)需要時(shí)間和精力,早起步早成材
機(jī)會(huì)講過了,咱們?cè)賮砜纯刺魬?zhàn)。
新技術(shù)往往意味著技術(shù)上的突破和創(chuàng)新,會(huì)有不少新的概念和方法,而且從大數(shù)據(jù)、云計(jì)算和容器技術(shù)來看,這些新技術(shù)都是平臺(tái)級(jí)別,覆蓋的技術(shù)范圍非常廣,包括計(jì)算、網(wǎng)絡(luò)、存儲(chǔ)、高可用、監(jiān)控、安全等多個(gè)方面,要掌握這些新技術(shù)對(duì) IT 老兵尚有不小困難,更別說新人了。
由于對(duì)技術(shù)一直保持著很高的熱誠和執(zhí)著,在掌握了 OpenStack 相關(guān) IaaS 技術(shù)后,我便開始調(diào)研 PaaS 技術(shù)棧。正好這時(shí) Docker 也越來越流行,自然而然便開始了容器相關(guān)技術(shù)的學(xué)習(xí)研究和實(shí)踐。
學(xué)習(xí)容器技術(shù)的過程可以說是驚喜不斷,經(jīng)常驚嘆于容器理念的先進(jìn)和容器生態(tài)環(huán)境的完整和強(qiáng)大。很多傳統(tǒng)軟件開發(fā)和運(yùn)維中的難題在容器世界里都能輕松解決,也漸漸理解了容器為何如此受到青睞。
不夸張地說,容器為我打開了一扇通往另一個(gè)軟件世界的大門,讓我沉浸其中,激動(dòng)不已。高興之余,我也迫不及待地想把我所看到、所學(xué)到和所想到的有關(guān)容器的知識(shí)介紹給更多的人,讓更多的IT工程師能夠從容器技術(shù)中受益。
我希望這個(gè)教程也能為大家打開這扇門,降低學(xué)習(xí)的曲線,系統(tǒng)地學(xué)習(xí)和掌握容器技術(shù)。
寫給誰看
這套教程的目標(biāo)讀者包括:
1. 軟件開發(fā)人員
相信微服務(wù)架構(gòu)(Microservice Architectur)會(huì)逐漸成為開發(fā)應(yīng)用系統(tǒng)的主流,而容器則是這種架構(gòu)的基石。市場將需要更多能夠開發(fā)出基于容器的應(yīng)用程序的軟件開發(fā)人員。
2. IT 實(shí)施和運(yùn)維工程師
容器為應(yīng)用提供了更好的打包和部署方式,越來越多的應(yīng)用將以容器的方式在開發(fā)、測(cè)試和生產(chǎn)環(huán)境中運(yùn)行。掌握容器相關(guān)技術(shù)將成為實(shí)施和運(yùn)維工程師的核心競爭力。
3. 我自己
我堅(jiān)信最好的學(xué)習(xí)方法是分享。編寫這個(gè)教程同時(shí)也是對(duì)自己學(xué)習(xí)和實(shí)踐容器技術(shù)的總結(jié)。對(duì)于知識(shí),只有把它寫出來并能夠讓其他人理解,才能說明真正掌握。
包含哪些內(nèi)容
本系列教程分為《每天5分鐘玩轉(zhuǎn)Docker容器技術(shù)》和《每天5分鐘玩轉(zhuǎn)Docker容器平臺(tái)》兩本,包括以下三大塊內(nèi)容:
下面分別介紹各部分包含的內(nèi)容。
1. 啟程
如下圖所示,啟程會(huì)介紹容器的生態(tài)系統(tǒng),讓大家先從整體上了解容器包含哪些技術(shù),各種技術(shù)之間的相互關(guān)系是什么,然后再來看我們的教程都會(huì)涉及生態(tài)中的哪些部分。
為了讓大家盡快對(duì)容器有個(gè)感性認(rèn)識(shí),我們會(huì)搭建實(shí)驗(yàn)環(huán)境并運(yùn)行第一個(gè)容器,為之后的學(xué)習(xí)熱身。
2. 容器技術(shù)
容器技術(shù)主要內(nèi)容如下圖所示,包含容器核心知識(shí)和容器進(jìn)階知識(shí)兩部分。
核心知識(shí)主要回答有關(guān)容器 What、Why 和 How 三方面的問題,其中以 How 為重,將展開討論架構(gòu)、鏡像、容器、網(wǎng)絡(luò)和存儲(chǔ)。
進(jìn)階知識(shí)包括將容器真正用于生成所必需的技術(shù),包括多主機(jī)管理、跨主機(jī)網(wǎng)絡(luò)、監(jiān)控、數(shù)據(jù)管理、日志管理和安全管理。
這部分內(nèi)容將在本書《每天5分鐘玩轉(zhuǎn)Docker容器技術(shù)》中詳細(xì)討論。
3. 容器平臺(tái)技術(shù)
如下圖所示,容器平臺(tái)技術(shù)包括容器編排引擎、容器管理平臺(tái)和基于容器的 PaaS。容器平臺(tái)技術(shù)在生態(tài)環(huán)境中占據(jù)著舉足輕重的位置,對(duì)于容器是否能夠落地,是否能應(yīng)用于生產(chǎn)至關(guān)重要。
我們將在本系列教程的另一本書《每天5分鐘玩轉(zhuǎn)Docker容器平臺(tái)》中詳細(xì)討論容器編排引擎、容器管理平臺(tái)和基于容器的 PaaS,學(xué)習(xí)和實(shí)踐業(yè)界最具代表性的開源產(chǎn)品。
怎樣的編寫方式
我會(huì)繼續(xù)采用《每天5分鐘玩轉(zhuǎn)OpenStack》(本書已在清華出版)的方式,通過大量的實(shí)驗(yàn)由淺入深地探討和實(shí)踐容器技術(shù),力求達(dá)到如下目標(biāo):
(1)快速上手:以最直接、最有效的方式讓大家把容器用起來。
(2)循序漸進(jìn):由易到難、從淺入深,詳細(xì)分析容器的各種功能和配置使用方法。
(3)理解架構(gòu):從設(shè)計(jì)原理和架構(gòu)分析入手,深入探討容器的架構(gòu)和運(yùn)行機(jī)理。
(4)注重實(shí)踐:以大量實(shí)際操作案例為基礎(chǔ),讓大家能夠掌握真正的實(shí)施技能。
在內(nèi)容的發(fā)布上還是通過微信公眾號(hào)(cloudman6)每周一、三、五定期分享。歡迎大家通過公眾號(hào)提出問題和建議,進(jìn)行技術(shù)交流。
為什么叫《每天5分鐘玩轉(zhuǎn)Docker容器技術(shù)》
為了降低學(xué)習(xí)的難度并且考慮到移動(dòng)端碎片化閱讀的特點(diǎn),每次推送的內(nèi)容大家只需要花5分鐘就能看完(注意這里說的是看完,有時(shí)候完全理解可能需要更多時(shí)間哈),每篇內(nèi)容包含1~3個(gè)知識(shí)點(diǎn),這就是我把本書命名為《每天5分鐘玩轉(zhuǎn)Docker容器技術(shù)》的原因。雖然是碎片化推送,但整個(gè)教程是系統(tǒng)、連貫和完整的,只是化整為零了。
好了,今天這5分鐘算是開了個(gè)頭,下面我們正式開始玩轉(zhuǎn)Docker容器技術(shù)。
編 者
2017年7月
CloudMan,十多年 IT 從業(yè)經(jīng)驗(yàn),就職于國際知名 IT 企業(yè),從事 IT 基礎(chǔ)設(shè)施實(shí)施服務(wù),項(xiàng)目涉及服務(wù)器、存儲(chǔ)、網(wǎng)絡(luò)、虛擬化、云技術(shù)等各個(gè)方面。CloudMan 對(duì)新技術(shù)長期保持濃厚的興趣和學(xué)習(xí)熱情,十幾年來一直專注 IT 技術(shù)領(lǐng)域的鉆研與實(shí)踐。
目 錄
第一篇 啟 程
第1章 鳥瞰容器生態(tài)系統(tǒng) 3
1.1 容器生態(tài)系統(tǒng) 3
1.2 本教程覆蓋的知識(shí)范圍 10
1.3 準(zhǔn)備實(shí)驗(yàn)環(huán)境 10
1.3.1
環(huán)境選擇 10
1.3.2
安裝 Docker 10
1.4 運(yùn)行第一個(gè)容器 11
1.5 小結(jié) 12
第二篇 容器技術(shù)
第2章 容器核心知識(shí)概述 15
2.1
What
什么是容器 15
2.2
Why
為什么需要容器 16
2.2.1
容器解決的問題 16
2.2.2
Docker 的特性 20
2.2.3
容器的優(yōu)勢(shì) 20
2.3
How
容器是如何工作的 21
2.4 小結(jié) 24
第3章 Docker 鏡像 26
3.1 鏡像的內(nèi)部結(jié)構(gòu) 26
3.1.1
hello-world
最小的鏡像 26
3.1.2
base 鏡像 27
3.1.3
鏡像的分層結(jié)構(gòu) 30
3.2 構(gòu)建鏡像 32
3.2.1
docker commit 32
3.2.2
Dockerfile 34
3.3
RUN vs CMD vs ENTRYPOINT 42
3.3.1
Shell 和 Exec 格式 42
3.3.2
RUN 44
3.3.3
CMD 44
3.3.4
ENTRYPOINT 45
3.3.5
最佳實(shí)踐 46
3.4 分發(fā)鏡像 46
3.4.1
為鏡像命名 46
3.4.2
使用公共 Registry 49
3.4.3
搭建本地 Registry 51
3.5 小結(jié) 52
第4章 Docker 容器 55
4.1 運(yùn)行容器 55
4.1.1
讓容器長期運(yùn)行 56
4.1.2
兩種進(jìn)入容器的方法 57
4.1.3
運(yùn)行容器的最佳實(shí)踐 59
4.1.4
容器運(yùn)行小結(jié) 59
4.2
stop/start/restart 容器 60
4.3
pause / unpause 容器 61
4.4 刪除容器 61
4.5
State Machine 62
4.6 資源限制 65
4.6.1
內(nèi)存限額 65
4.6.2
CPU 限額 66
4.6.3
Block IO 帶寬限額 68
4.7 實(shí)現(xiàn)容器的底層技術(shù) 69
4.7.1
cgroup 70
4.7.2
namespace 70
4.8 小結(jié) 72
第5章 Docker 網(wǎng)絡(luò) 74
5.1
none 網(wǎng)絡(luò) 74
5.2
host 網(wǎng)絡(luò) 75
5.3
bridge 網(wǎng)絡(luò) 76
5.4
user-defined 網(wǎng)絡(luò) 78
5.5 容器間通信 84
5.5.1
IP通信 84
5.5.2
Docker DNS Server 85
5.5.3
joined 容器 85
5.6 將容器與外部世界連接 87
5.6.1
容器訪問外部世界 87
5.6.2
外部世界訪問容器 90
5.7 小結(jié) 91
第6章 Docker 存儲(chǔ) 92
6.1
storage driver 92
6.2
Data Volume 94
6.2.1
bind mount 94
6.2.2
docker managed volume 96
6.3 數(shù)據(jù)共享 99
6.3.1
容器與 host 共享數(shù)據(jù) 99
6.3.2
容器之間共享數(shù)據(jù) 99
6.4
volume container 100
6.5
data-packed volume container 102
6.6
Data Volume 生命周期管理 103
6.6.1
備份 104
6.6.2
恢復(fù) 104
6.6.3
遷移 104
6.6.4
銷毀 104
6.7 小結(jié) 105
第三篇 容器進(jìn)階知識(shí)
第7章 多主機(jī)管理 109
7.1 實(shí)驗(yàn)環(huán)境描述 110
7.2 安裝 Docker
Machine 111
7.3 創(chuàng)建 Machine
112
7.4 管理Machine 114
第8章 容器網(wǎng)絡(luò) 117
8.1
libnetwork & CNM 117
8.2 overlay
119
8.2.1
實(shí)驗(yàn)環(huán)境描述 120
8.2.2
創(chuàng)建overlay網(wǎng)絡(luò) 121
8.2.3
在overlay中運(yùn)行容器 122
8.2.4
overlay 網(wǎng)絡(luò)連通性 124
8.2.5
overlay 網(wǎng)絡(luò)隔離 126
8.2.6
overlay IPAM 127
8.3
macvlan 127
8.3.1
準(zhǔn)備實(shí)驗(yàn)環(huán)境 127
8.3.2
創(chuàng)建 macvlan 網(wǎng)絡(luò) 128
8.3.3
macvlan 網(wǎng)絡(luò)結(jié)構(gòu)分析 130
8.3.4
用 sub-interface 實(shí)現(xiàn)多 macvlan 網(wǎng)絡(luò) 131
8.3.5
macvlan 網(wǎng)絡(luò)間的隔離和連通 132
8.4
flannel 136
8.4.1
實(shí)驗(yàn)環(huán)境描述 137
8.4.2
安裝配置 etcd 137
8.4.3
build flannel 138
8.4.4
將 flannel 網(wǎng)絡(luò)的配置信息保存到 etcd 139
8.4.5
啟動(dòng) flannel 139
8.4.6
配置 Docker 連接 flannel 141
8.4.7
將容器連接到 flannel 網(wǎng)絡(luò) 143
8.4.8
flannel 網(wǎng)絡(luò)連通性 144
8.4.9
flannel 網(wǎng)絡(luò)隔離 146
8.4.10
flannel 與外網(wǎng)連通性 146
8.4.11
host-gw backend 146
8.5
weave 148
8.5.1
實(shí)驗(yàn)環(huán)境描述 148
8.5.2
安裝部署 weave 149
8.5.3
在host1中啟動(dòng)weave 149
8.5.4
在 host1 中啟動(dòng)容器 150
8.5.5
在host2中啟動(dòng)weave并運(yùn)行容器 153
8.5.6
weave 網(wǎng)絡(luò)連通性 154
8.5.7
weave 網(wǎng)絡(luò)隔離 155
8.5.8
weave 與外網(wǎng)的連通性 156
8.5.9
IPAM 158
8.6
calico 158
8.6.1
實(shí)驗(yàn)環(huán)境描述 159
8.6.2
啟動(dòng) etcd 159
8.6.3
部署 calico 160
8.6.4
創(chuàng)建calico網(wǎng)絡(luò) 161
8.6.5
在 calico 中運(yùn)行容器 161
8.6.6
calico 默認(rèn)連通性 164
8.6.7
calico policy 167
8.6.8
calico IPAM 169
8.7 比較各種網(wǎng)絡(luò)方案 170
8.7.1
網(wǎng)絡(luò)模型 171
8.7.2
Distributed Store 171
8.7.3
IPAM 171
8.7.4
連通與隔離 172
8.7.5
性能 172
第9章 容器監(jiān)控 173
9.1
Docker自帶的監(jiān)控子命令 173
9.1.1
ps 173
9.1.2
top 174
9.1.3
stats 175
9.2
sysdig 175
9.3
Weave Scope 179
9.3.1
安裝 179
9.3.2
容器監(jiān)控 181
9.3.3
監(jiān)控 host 184
9.3.4
多主機(jī)監(jiān)控 186
9.4
cAdvisor 189
9.4.1
監(jiān)控 Docker Host 189
9.4.2
監(jiān)控容器 191
9.5
Prometheus 194
9.5.1
架構(gòu) 194
9.5.2
多維數(shù)據(jù)模型 195
9.5.3
實(shí)踐 196
9.6 比較不同的監(jiān)控工具 204
9.7 幾點(diǎn)建議 205
第10章 日志管理 207
10.1
Docker logs 207
10.2
Docker logging driver 209
10.3
ELK 211
10.3.1
日志處理流程 211
10.3.2
安裝 ELK 套件 212
10.3.3
Filebeat 214
10.3.4
管理日志 216
10.4
Fluentd 220
10.4.1
安裝 Fluentd 221
10.4.2
重新配置 Filebeat 221
10.4.3
監(jiān)控容器日志 221
10.5
Graylog 222
10.5.1
Graylog 架構(gòu) 222
10.5.2
部署 Graylog 223
10.5.3
配置 Graylog 225
10.5.4
監(jiān)控容器日志 227
10.6
小結(jié) 229
第11章 數(shù)據(jù)管理 230
11.1
從一個(gè)例子開始 230
11.2
實(shí)踐 Rex-Ray driver 232
11.2.1
安裝 Rex-Ray 232
11.2.2
配置 VirtualBox 234
11.2.3
創(chuàng)建Rex-Ray volume 236
11.2.4
使用 Rex-Ray volume 237
寫在最后 243