本書(shū)根據(jù)Docker 1.10版和Kubernetes 1.2版對(duì)第1版進(jìn)行了全面更新,從實(shí)踐者的角度出發(fā),以Docker和Kubernetes為重點(diǎn),沿著“基本用法介紹”到“核心原理解讀”到“高級(jí)實(shí)踐技巧”的思路,一本書(shū)講透當(dāng)前主流的容器和容器云技術(shù),有助于讀者在實(shí)際場(chǎng)景中利用Docker容器和容器云解決問(wèn)題并啟發(fā)新的思考。全書(shū)包括兩部分,首部分深入解讀Docker容器技術(shù),包括Docker架構(gòu)與設(shè)計(jì)、核心源碼解讀和高級(jí)實(shí)踐技巧;第二部分歸納和比較了三類(lèi)基于Docker的主流容器云項(xiàng)目,包括專(zhuān)注Docker容器編排與部署的容器云、專(zhuān)注應(yīng)用支撐的容器云以及一切皆容器的Kubernetes,進(jìn)而詳細(xì)解讀了Kubernetes核心源碼的設(shè)計(jì)與實(shí)現(xiàn),介紹了幾種典型場(chǎng)景下的Kubernetes實(shí)踐。
本書(shū)適用于有一定Docker基礎(chǔ)的開(kāi)發(fā)者、架構(gòu)師、IT專(zhuān)業(yè)學(xué)生以及探索基于Docker構(gòu)建云計(jì)算平臺(tái)的技術(shù)人員,也非常適合作為高校教材或培訓(xùn)資料。
1.本書(shū)以源碼解讀為基礎(chǔ),以構(gòu)建Docker云平臺(tái)為目標(biāo),通過(guò)回答實(shí)際項(xiàng)目中的問(wèn)題為線(xiàn)索,全面解析Docker原理。這是國(guó)內(nèi)首部在解讀Docker原理的同時(shí)深入實(shí)踐Docker三件套和云平臺(tái)的圖書(shū),也是國(guó)內(nèi)首部深入解讀Kubernetes的圖書(shū)。
2.基于Docker新版本,新增runc和libnetwork兩個(gè)全新而又十分重要的概念。
3.基于Kubernetes 1.2新版本,全面解讀volume plugin、secret、auto scaling等全新特性。
浙江大學(xué)軟件工程實(shí)驗(yàn)室(Software Engineering Lab,SEL)云計(jì)算團(tuán)隊(duì)組建于2011年,組織博士和碩士研究生搭建、分析和鉆研開(kāi)源的云計(jì)算技術(shù),包括Docker、Kubernetes、Cloud Foundry、OpenStack、CloudStack、Eucalyptus、Convirt、OpenShift等,積極為開(kāi)源社區(qū)貢獻(xiàn)代碼,管理和參與線(xiàn)上線(xiàn)下討論社區(qū),參加國(guó)內(nèi)外云計(jì)算技術(shù)峰會(huì)并發(fā)言。以開(kāi)源社區(qū)為技術(shù)交流研發(fā)平臺(tái),浙江大學(xué)SEL實(shí)驗(yàn)室在4年多的時(shí)間里成長(zhǎng)為一個(gè)充滿(mǎn)熱情、富有能力的云計(jì)算研發(fā)團(tuán)隊(duì),也在國(guó)內(nèi)外開(kāi)源云計(jì)算社區(qū),尤其是在Docker、Kubernetes和Cloud Foundry社區(qū)得到了廣泛認(rèn)可。
第一部分 Docker深入解讀
第1章 從容器到容器云 2
1.1 云計(jì)算平臺(tái) 2
1.2 容器,新的革命 3
1.3 進(jìn)化:從容器到容器云 7
第2章 Docker 基礎(chǔ) 8
2.1 Docker的安裝 8
2.2 Docker操作參數(shù)解讀 9
2.3 搭建你的第一個(gè)Docker應(yīng)用棧 16
2.3.1 Docker集群部署 16
2.3.2 第一個(gè)Hello World 17
2.3.3 開(kāi)發(fā)、測(cè)試和發(fā)布一體化 27
第3章 Docker核心原理解讀 28
3.1 Docker背后的內(nèi)核知識(shí) 28
3.1.1 namespace資源隔離 28
3.1.2 cgroups資源限制 45
3.2 Docker架構(gòu)概覽 53
3.2.1 Docker daemon 54
3.2.2 Docker client 54
3.2.3 鏡像管理 54
3.2.4 execdriver、volumedriver、graphdriver 55
3.2.5 network 55
3.3 client和daemon 56
3.3.1 client模式 56
3.3.2 daemon模式 58
3.3.3 從client到daemon 64
3.4 libcontainer 67
3.4.1 libcontainer的工作方式 69
3.4.2 libcontainer實(shí)現(xiàn)原理 70
3.4.3 使用runC與libcontainer進(jìn)行交互 75
3.5 Docker鏡像管理 77
3.5.1 什么是Docker鏡像 77
3.5.2 Docker鏡像關(guān)鍵概念 80
3.5.3 Docker鏡像構(gòu)建操作 81
3.5.4 Docker鏡像的分發(fā)方法 84
3.6 Docker存儲(chǔ)管理 87
3.6.1 Docker鏡像元數(shù)據(jù)管理 87
3.6.2 Docker存儲(chǔ)驅(qū)動(dòng) 89
3.7 Docker數(shù)據(jù)卷 99
3.7.1 數(shù)據(jù)卷的使用方式 100
3.7.2 數(shù)據(jù)卷原理解讀 105
3.8 Docker網(wǎng)絡(luò)管理 108
3.8.1 Docker網(wǎng)絡(luò)基礎(chǔ) 108
3.8.2 Docker daemon網(wǎng)絡(luò)配置原理 116
3.8.3 libcontainer網(wǎng)絡(luò)配置原理 119
3.8.4 傳統(tǒng)的link原理解析 125
3.8.5 新的link介紹 127
3.9 Docker與容器安全 129
3.9.1 Docker的安全機(jī)制 129
3.9.2 Docker安全問(wèn)題 135
3.9.3 Docker安全的解決方案 139
第4章 Docker 高級(jí)實(shí)踐技巧 151
4.1 容器化思維 151
4.1.1 SSH服務(wù)器的替代方案 151
4.1.2 Docker內(nèi)應(yīng)用日志管理方案 152
4.1.3 容器化思維及更多 153
4.2 Docker高級(jí)網(wǎng)絡(luò)實(shí)踐 153
4.2.1 玩轉(zhuǎn)Linux networknamespace 154
4.2.2 pipework原理解析 159
4.2.3 pipework跨主機(jī)通信 165
4.2.4 OVS劃分VLAN 170
4.2.5 OVS隧道模式 174
4.3 Dockerfile最佳實(shí)踐 187
4.3.1 Dockerfile的使用 187
4.3.2 Dockerfile實(shí)踐心得 191
4.4 Docker容器的監(jiān)控手段 193
4.4.1 Docker容器監(jiān)控維度 194
4.4.2 容器監(jiān)控命令 195
4.4.3 常用的容器監(jiān)控工具 197
4.5 容器化應(yīng)用構(gòu)建的基礎(chǔ):高可用配置中心 201
4.5.1 etcd經(jīng)典應(yīng)用場(chǎng)景 201
4.5.2 etcd實(shí)現(xiàn)原理 206
第二部分 Docker云平臺(tái)解讀
第5章 構(gòu)建自己的容器云 222
5.1 再談云平臺(tái)的層次架構(gòu) 222
5.2 從小工到專(zhuān)家 225
第6章 專(zhuān)注編排與部署:三劍客與Fleet 230
6.1 編排小神器Fig/Compose 230
6.1.1 再談容器編排與部署 230
6.1.2 Compose原理:一探究竟 233
6.2 跨平臺(tái)宿主環(huán)境管理工具M(jìn)achine 237
6.2.1 Machine與虛擬機(jī)軟件 237
6.2.2 Machine與IaaS平臺(tái) 238
6.2.3 Machine小結(jié) 239
6.3 集群抽象工具Swarm 240
6.3.1 Swarm簡(jiǎn)介 240
6.3.2 試用Swarm 241
6.3.3 Swarm集群的多種創(chuàng)建方式 243
6.3.4 Swarm對(duì)請(qǐng)求的處理 245
6.3.5 Swarm集群的調(diào)度策略 245
6.3.6 Swarm集群高可用(HA) 246
6.3.7 Swarm與Machine 247
6.3.8 Swarm小結(jié) 248
6.4 編排之秀Fleet 248
6.4.1 舊問(wèn)題新角度:Docker distro 249
6.4.2 Fleet的原理剖析 252
第7章 專(zhuān)注應(yīng)用支撐和運(yùn)行時(shí):Flynn和Deis 258
7.1 Flynn,一個(gè)小而美的兩層架構(gòu) 258
7.1.1 第0層:容器云的基礎(chǔ)設(shè)施 259
7.1.2 第1層:容器云的功能框架 259
7.1.3 Flynn體系架構(gòu)與實(shí)現(xiàn)原理 260
7.2 談?wù)凞eis與Flynn 270
7.2.1 應(yīng)用發(fā)布上的比較 271
7.2.2 關(guān)于Deis的一些思考 273
第8章 一切皆容器:Kubernetes 274
8.1 Kubernetes是個(gè)什么樣的項(xiàng)目 274
8.2 Kubernetes的設(shè)計(jì)解讀 275
8.2.1 一個(gè)典型案例:Guestbook 275
8.2.2 pod設(shè)計(jì)解讀 277
8.2.3 replication controller設(shè)計(jì)解讀 288
8.2.4 service的設(shè)計(jì)解讀 294
8.2.5 新一代副本控制器replica set 306
8.2.6 Deployment 307
8.2.7 DaemonSet 312
8.2.8 ConfigMap 312
8.2.9 Job 317
8.2.10 Horizontal Pod Autoscaler 318
8.3 Kubernetes核心組件解讀 320
8.3.1 Kubernetes的整體架構(gòu) 320
8.3.2 APIServer 321
8.3.3 scheduler 328
8.3.4 controller manager 338
8.3.5 kubelet 346
8.3.6 kube-proxy 352
8.3.7 核心組件協(xié)作流程 362
8.4 Kubernetes存儲(chǔ)核心原理 366
8.4.1 volume設(shè)計(jì)解讀 366
8.4.2 volume實(shí)現(xiàn)原理分析 367
8.4.3 volume使用案例 368
8.4.4 persistent volume 371
8.5 Kubernetes網(wǎng)絡(luò)核心原理 372
8.5.1 單pod單IP模型 373
8.5.2 pod和網(wǎng)絡(luò)容器 374
8.5.3 實(shí)現(xiàn)Kubernetes的網(wǎng)絡(luò)模型 377
8.6 Kubernetes多租戶(hù)管理與資源控制 381
8.6.1 namespace設(shè)計(jì)解讀 381
8.6.2 Kubernetes用戶(hù)認(rèn)證機(jī)制 385
8.6.3 Kubernetes用戶(hù)授權(quán)機(jī)制 387
8.6.4 Kubernetes多維資源管理機(jī)制admission control 390
8.7 Kubernetes高級(jí)實(shí)踐 402
8.7.1 應(yīng)用健康檢查 402
8.7.2 高可用性 405
8.7.3 日志 408
8.7.4 集成DNS 410
8.7.5 容器上下文環(huán)境 412
8.8 Kubernetes未來(lái)動(dòng)向 414
8.8.1 Ubernetes 414
8.8.2 petSet 415
8.8.3 performance 417
8.8.4 rescheduler 417
8.8.5 OCI標(biāo)準(zhǔn) 419
8.9 不要停止思考 419
第三部分 附錄
附錄A Docker的安裝 424
附錄B 閱讀Docker源代碼的神兵
利器 432
附錄C 快速熟悉開(kāi)源項(xiàng)目 441
附錄D cgroups的測(cè)試與使用 444
附錄E cgroups子系統(tǒng)配置參數(shù)介紹 448
附錄F Kubernetes的安裝 453
后記 457