Docker和容器技術是當下火的IT技術,無論是互聯網還是傳統企業都在研究和實踐如何用容器構建自己的 IT 基礎設施。學習本書能夠讓讀者少走彎路,系統地學習、掌握和實踐 Docker 和容器技術。本書共分為三部分。部分介紹容器技術生態環境。第二部分是容器核心知識,包括架構、鏡像、容器、網絡和存儲。第三部分是容器進階知識,包括多主機管理、跨主機網絡方案、監控、日志管理和數據管理。讀者在學習的過程中,可以跟著教程進行操作,在實踐中掌握 Docker 容器技術的核心技能。在之后的工作中,可以將本教程作為參考書,按需查找相關知識點。本書主要面向微服務軟件開發人員,以及 IT 實施和運維工程師等相關人員,也適合高等院校和培訓學校相關專業的師生教學參考。
容器技術是繼大數據和云計算之后又一炙手可熱的技術,而且未來相當一段時間內都會非常流行對 IT 從業者來說,掌握容器技術是市場的需要,也是提升自我價值的重要途徑每一輪新技術的興起,無論對公司還是個人既是機會也是挑戰
CloudMan,十多年 IT 從業經驗,就職于國際知名 IT 企業,從事 IT 基礎設施實施服務,項目涉及服務器、存儲、網絡、虛擬化、云技術等各個方面。CloudMan 對新技術長期保持濃厚的興趣和學習熱情,十幾年來一直專注 IT 技術領域的鉆研與實踐。
目 錄
及時篇 啟 程
第1章 鳥瞰容器生態系統 3
1.1 容器生態系統 3
1.2 本教程覆蓋的知識范圍 10
1.3 準備實驗環境 10
1.3.1環境選擇 10
1.3.2安裝 Docker 10
1.4 運行及時個容器 11
1.5 小結 12
第二篇 容器技術
第2章 容器核心知識概述 15
2.1What ——什么是容器 15
2.2Why ——為什么需要容器 16
2.2.1容器解決的問題 16
2.2.2Docker 的特性 20
2.2.3容器的優勢 20
2.3How ——容器是如何工作的 21
2.4 小結 24
第3章 Docker 鏡像 26
3.1 鏡像的內部結構 26
3.1.1hello-world ——最小的鏡像 26
3.1.2base 鏡像 27
3.1.3鏡像的分層結構 30
3.2 構建鏡像 32
3.2.1docker commit 32
3.2.2Dockerfile 34
3.3RUN vs CMD vs ENTRYPOINT 42
3.3.1Shell 和 Exec 格式 42
3.3.2RUN 44
3.3.3CMD 44
3.3.4ENTRYPOINT 45
3.3.5實踐 46
3.4 分發鏡像 46
3.4.1為鏡像命名 46
3.4.2使用公共 Registry 49
3.4.3搭建本地 Registry 51
3.5 小結 52
第4章 Docker 容器 55
4.1 運行容器 55
4.1.1讓容器長期運行 56
4.1.2兩種進入容器的方法 57
4.1.3運行容器的實踐 59
4.1.4容器運行小結 59
4.2stop/start/restart 容器 60
4.3pause / unpause 容器 61
4.4 刪除容器 61
4.5State Machine 62
4.6 資源限制 65
4.6.1內存限額 65
4.6.2CPU 限額 66
4.6.3Block IO 帶寬限額 68
4.7 實現容器的底層技術 69
4.7.1cgroup 70
4.7.2namespace 70
4.8 小結 72
第5章 Docker 網絡 74
5.1none 網絡 74
5.2host 網絡 75
5.3bridge 網絡 76
5.4user-defined 網絡 78
5.5 容器間通信 84
5.5.1IP通信 84
5.5.2Docker DNS Server 85
5.5.3joined 容器 85
5.6 將容器與外部世界連接 87
5.6.1容器訪問外部世界 87
5.6.2外部世界訪問容器 90
5.7 小結 91
第6章 Docker 存儲 92
6.1storage driver 92
6.2Data Volume 94
6.2.1bind mount 94
6.2.2docker managed volume 96
6.3 數據共享 99
6.3.1容器與 host 共享數據 99
6.3.2容器之間共享數據 99
6.4volume container 100
6.5data-packed volume container 102
6.6Data Volume 生命周期管理 103
6.6.1備份 104
6.6.2恢復 104
6.6.3遷移 104
6.6.4銷毀 104
6.7 小結 105
第三篇 容器進階知識
第7章 多主機管理 109
7.1 實驗環境描述 110
7.2 安裝 DockerMachine 111
7.3 創建 Machine112
7.4 管理Machine 114
第8章 容器網絡 117
8.1libnetwork & CNM 117
8.2 overlay119
8.2.1實驗環境描述 120
8.2.2創建overlay網絡 121
8.2.3在overlay中運行容器 122
8.2.4overlay 網絡連通性 124
8.2.5overlay 網絡隔離 126
8.2.6overlay IPAM 127
8.3macvlan 127
8.3.1準備實驗環境 127
8.3.2創建 macvlan 網絡 128
8.3.3macvlan 網絡結構分析 130
8.3.4用 sub-interface 實現多 macvlan 網絡 131
8.3.5macvlan 網絡間的隔離和連通 132
8.4flannel 136
8.4.1實驗環境描述 137
8.4.2安裝配置 etcd 137
8.4.3build flannel 138
8.4.4將 flannel 網絡的配置信息保存到 etcd 139
8.4.5啟動 flannel 139
8.4.6配置 Docker 連接 flannel 141
8.4.7將容器連接到 flannel 網絡 143
8.4.8flannel 網絡連通性 144
8.4.9flannel 網絡隔離 146
8.4.10flannel 與外網連通性 146
8.4.11host-gw backend 146
8.5weave 148
8.5.1實驗環境描述 148
8.5.2安裝部署 weave 149
8.5.3在host1中啟動weave 149
8.5.4在 host1 中啟動容器 150
8.5.5在host2中啟動weave并運行容器 153
8.5.6weave 網絡連通性 154
8.5.7weave 網絡隔離 155
8.5.8weave 與外網的連通性 156
8.5.9IPAM 158
8.6calico 158
8.6.1實驗環境描述 159
8.6.2啟動 etcd 159
8.6.3部署 calico 160
8.6.4創建calico網絡 161
8.6.5在 calico 中運行容器 161
8.6.6calico 默認連通性 164
8.6.7calico policy 167
8.6.8calico IPAM 169
8.7 比較各種網絡方案 170
8.7.1網絡模型 171
8.7.2Distributed Store 171
8.7.3IPAM 171
8.7.4連通與隔離 172
8.7.5性能 172
第9章 容器監控 173
9.1Docker自帶的監控子命令 173
9.1.1ps 173
9.1.2top 174
9.1.3stats 175
9.2sysdig 175
9.3Weave Scope 179
9.3.1安裝 179
9.3.2容器監控 181
9.3.3監控 host 184
9.3.4多主機監控 186
9.4cAdvisor 189
9.4.1監控 Docker Host 189
9.4.2監控容器 191
9.5Prometheus 194
9.5.1架構 194
9.5.2多維數據模型 195
9.5.3實踐 196
9.6 比較不同的監控工具 204
9.7 幾點建議 205
第10章 日志管理 207
10.1Docker logs 207
10.2Docker logging driver 209
10.3ELK 211
10.3.1日志處理流程 211
10.3.2安裝 ELK 套件 212
10.3.3Filebeat 214
10.3.4管理日志 216
10.4Fluentd 220
10.4.1安裝 Fluentd 221
10.4.2重新配置 Filebeat 221
10.4.3監控容器日志 221
10.5Graylog 222
10.5.1Graylog 架構 222
10.5.2部署 Graylog 223
10.5.3配置 Graylog 225
10.5.4監控容器日志 227
10.6小結 229
第11章 數據管理 230
11.1從一個例子開始 230
11.2實踐 Rex-Ray driver 232
11.2.1安裝 Rex-Ray 232
11.2.2配置 VirtualBox 234
11.2.3創建Rex-Ray volume 236
11.2.4使用 Rex-Ray volume 237
寫在 243