书籍作者:浙江大学SEL实验室 | ISBN:9787115401106 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:4983 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书从实践者的角度,在讲解Docker高级实践技巧的同时,深入到源代码层次,为读者梳理出Docker容器技术和基于Docker的容器云技术(如Kubernetes)的实现方法和设计思路,帮助读者理解如何在实际场景中利用Docker解决问题并启发新的思考。全书包括两部分,第一部分深入解读Docker容器技术,包括Docker入门、架构总览、Docker容器核心原理解读,以及Docker高级实践技巧;第二部分深入解读基于Docker的主流容器云技术,讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署的容器云(Compose、Machine、Swarm、Fleet)、专注应用支撑的容器云(Flynn、Deis),以及一切皆容器的Kubernetes。
浙江大学软件工程实验室(Software Engineering Lab,SEL)云计算团队组建于2011年,组织博士和硕士研究生搭建、分析和钻研开源的云计算技术,包括Docker、Kubernetes、Cloud Foundry、OpenStack、CloudStack、Eucalyptus、Convirt、OpenShift等,积极为开源社区贡献代码,管理和参与线上线下讨论社区,参加国内外云计算技术峰会并发言。以开源社区为技术交流研发平台,浙江大学SEL实验室在4年多的时间里成长为一个充满热情、富有能力的云计算研发团队,也在国内外开源云计算社区,尤其是在Docker、Kubernetes和Cloud Foundry社区得到了广泛认可。
本书的写作目的不仅是在技术层面深入分析Docker背后的技术原理和设计思想,更在于从我们团队几年来在云计算方面的积累出发,理清当前基于Docker的云计算平台(容器云)的发展脉络,以期对IT企业的开发运维人员、容器云服务提供商以及Docker技术爱好者在技术选型、技术路线规划上有所帮助。
2013年是Docker正式开源发布的年份,也是我们团队开始使用Docker的时间。当时Docker作为一个单机版轻量级虚拟化工具,并没有如当前发达的生态系统。我们使用Docker处理Cloud Foundry这类复杂分布式系统的快速部署和迁移。结果是我们体验到了惊喜还有遗憾。确实,那时候Docker 1.0尚未发布,作为最先吃螃蟹的人之一,我们除了能感受到Docker相比虚拟机的在资源利用率和性能上的巨大优势以及在使用方式上的高效便捷,还不得不忍受当时的Docker与一个完整的数据中心运维系统之间的差距。比如网络,跨宿主机间的通信在很长一段时间都困扰着我们;比如容器内部不能单独配置内核参数,一旦应用对性能有特殊要求的时候,就无法单独进行优化定制;再比如维护,时常需要手动清理僵尸容器、镜像等。
在随后的一整年里,我们真真切切地感受到了Docker是如何从一个开发运维人员略有耳闻的工具成为一个技术圈里家喻户晓的名词。基于Docker的公有云、私有云项目也如雨后春笋般涌现;各大知名技术社区都为Docker开辟专栏,甚至出现了专为讨论Docker而生的技术社区。基于Docker的中国本土化也开始萌芽,各类国内镜像托管和加速服务层出不穷。Docker官方也没有闲着,前不久Docker的各类邮件列表中都出现了招聘中国区执行官的消息。Docker生态系统的建立已经是不争的事实,在这一年的时间里,我们团队也从Docker的使用者,成为了Docker、Kubernetes、libcontainer等开源项目的特性维护者(maintainer)和代码贡献者(contributor)。
当前Docker已决不仅仅是一项轻量级虚拟化技术,官方的Docker运维三件套、来自第三方的Kubernetes、OpenShift v3、Flynn、Deis等项目已经基于Docker这种容器技术构建出各种各样的容器云服务平台,关于Docker等容器技术的讨论重心也已经从“容器”转变为“容器云”。Docker对于IT行业的价值也从节省资源这一方面扩展到对整个软件开发运维生命周期的改造。
作为软件行业多年的实践者和教育者,我们一直试图探索这样一些问题:云计算除了当前被广为接受的基础设施云平台(IaaS)的形态,是否还有更加贴近开发人员和运维人员的形态?云计算如何以更好的形态服务于互联网、互联网+这样一个以软件连接人与人,以软件连接人与企业,以软件连接企业与企业的时代?正是Docker这样的容器技术的出现使得这样的探索成为可能。
本书结构
本书共分两部分,沿着从容器到容器云的发展脉络,介绍Docker以及围绕Docker构建的各类容器云平台技术,深入分析了Kubernetes背后的技术原理和设计思想。
第一部分讲解了Docker容器的核心原理和实践技巧。其中第1章和第2章能够让读者在短时间内体验这场IT界的风暴,并且初步了解Docker的使用方法,为后续的源码解析做铺垫。第3章是本书第一部分的核心,这一章以最新的Docker 1.6.2版本源码为基础,结合最新的社区主干1.7.0代码进展,深入地分析了容器的namespace和cgroups原理,紧接着我们以docker run命令为线索,一路贯穿Docker的容器创建、镜像组织、联合文件系统以及容器网络初始化的源码,深入透彻地向读者展示了从一句指令到最终Linux容器生成的整个过程中,Docker源码背后的执行路线和设计原理。第4章则介绍了Docker相关的几类实践技巧,包括网络、监控、服务发现等。值得一提的是,在上述代码走读的过程中,本书几乎没有贴出任何一部分Docker源码或者函数,而是力图使用平实的语言和生动的图示来展示代码背后的执行逻辑和设计思想。Docker的源码字字珠玑,我们希望能够使用这样的解读方式使读者真正理解Docker和容器背后的设计方法和技术本质,而不是变成一本单纯的技术手册。
第二部分深入分析基于Docker的各类容器云平台的架构细节和背后的设计理念,这些容器云虽然在底层技术上都基于Docker这样的容器技术,但在背后的设计思想上却存在很大的差异。我们将看到一个颠覆原有的IaaS、PaaS云计算生硬的分类方式而精彩纷呈的容器云世界,其中第5章介绍了一个最简单的容器云解决方案作为引子;第6章和第7章分析和比较了几类典型的容器云开源项目,这包括了Docke官方的三剑客项目、Fleet以及更类似经典PaaS的Flynn和Deis;第8章是本书第二部分的重点章节,我们以Kubernetes 0.16版本源码为基础,从核心概念到架构梳理,再到深入到组件级别的Kubernetes源码解析,从多个维度详细讲解了Kubernetes容器云平台的各种技术细节,这在国内尚属首次。希望通过这部分容器云平台源码解读,我们能够带领读者从纷繁复杂的容器云项目中梳理出一个细致的脉络,让读者在选型和二次开发的过程中减少迷茫和试错。而作为Kubernetes项目的贡献者和特性维护者,我们希望有更多的技术人员能够从源码层面对Kubernetes有更深刻的理解和认识,并且同我们一起来推动这个优秀的开源项目在国内的进步和落地。在第二部分的结尾,我们试图回答之前的提问,即容器云应该以何种形态来更好地支撑当今时代。
致谢
对于能够编写国内第一本在源代码层面深度解析Docker和Kubernetes,并揭秘基于Docker容器的云计算生态圈底层技术的图书,我们感到非常荣幸。浙江大学SEL实验室云计算团队在此向所有支持帮助我们的朋友表达最诚挚的谢意,没有大家的支持,我们很可能无法顺利地完成这项工作。
感谢浙江大学软件学院杨小虎院长对云计算团队一直以来的关怀和支持,杨院长的远见卓识和诲人不倦令人钦佩。
感谢多年来与我一同奋战在云计算前线,并参与本书大量编写工作的张磊和孙健波。他们自加入云计算团队以来一直战斗在云计算领域最前沿,是写作本书的中坚力量。
感谢以极大热情参与到本书写作中的浙江大学计算机学院、软件学院的各位研究生,他们的热情是我们团队活力的源泉,他们使那些分散在各个领域的技术得以整合。在本书编写过程中,他们不计个人得失地精诚合作,这是本书得以成书的基石。
特别要感谢不辞辛劳为本书出谋划策、日以继夜不断审阅修改的图灵公司的编辑们。在整个写作过程中,我们团队得到了出版方的大力支持,他们认真负责的态度是本书顺利出版的保证。
感谢InfoQ主编郭蕾一直以来对浙大团队技术分享工作所做出的支持和推广,他和InfoQ的同事们的努力是推动本书发起的最大动力。
感谢《第一本Docker书》的译者刘斌对本书进行的细致的审读,并为我们提出了宝贵的修订建议。
感谢浙江大学SEL实验室云计算团队的其他所有人,他们认真负责的工作态度和令人满意的工作成果是本书不可或缺的支持力量。
感谢大家的共同努力,让我们的成果得以面世,在Docker布道之路上贡献一份光热,传播惠及当下的云计算前沿技术。
丁轶群
浙江大学SEL实验室云计算团队
第一部分 Docker深入解读
第1章 从容器到容器云 2
1.1 云计算平台 2
1.2 容器,新的革命 3
1.3 进化:从容器到容器云 7
第2章 Docker基础 8
2.1 Docker的安装 8
2.2 Docker操作参数解读 9
2.3 搭建你的第一个Docker应用栈 16
2.3.1 Docker集群部署 16
2.3.2 第一个Hello World 17
2.3.3 开发、测试和发布一体化 27
第3章 Docker核心原理解读 28
3.1 Docker背后的内核知识 28
3.1.1 namespace资源隔离 28
3.1.2 cgroups资源限制 45
3.2 Docker架构概览 53
3.3 client和daemon 55
3.3.1 client模式 55
3.3.2 daemon模式 57
3.3.3 从client到daemon 63
3.4 libcontainer 66
3.4.1 libcontainer的工作方式 68
3.4.2 libcontainer实现原理 69
3.4.3 使用nsinit与libcontainer进行交互 74
3.5 Docker镜像管理 76
3.5.1 什么是Docker镜像 76
3.5.2 Docker镜像关键概念 78
3.5.3 Docker镜像操作解析 80
3.5.4 Docker容器的迁移方法 84
3.6 Docker存储驱动 85
3.6.1 存储驱动的功能与管理 86
3.6.2 aufs与Device Mapper驱动 87
3.7 Docker数据卷 93
3.7.1 数据卷的使用方式 94
3.7.2 数据卷原理解读 98
3.8 Docker网络管理 102
3.8.1 Docker网络基础 102
3.8.2 Docker daemon网络配置原理 107
3.8.3 libcontainer网络配置原理 111
3.8.4 Link原理解析 115
3.9 Docker与容器安全 118
3.9.1 Docker的安全机制 118
3.9.2 Docker安全问题 122
3.9.3 Docker安全的解决方案 126
第4章 Docker高级实践技巧 138
4.1 容器化思维 138
4.1.1 SSH服务器的替代方案 139
4.1.2 Docker内应用日志管理方案 139
4.1.3 其他技巧汇总 140
4.2 Docker高级网络实践 142
4.2.1 玩转Linux network namespace 143
4.2.2 pipework原理解析 148
4.2.3 pipework跨主机通信 154
4.2.4 OVS划分VLAN 159
4.2.5 OVS隧道模式 163
4.3 Dockerfile最佳实践 175
4.3.1 Dockerfile的使用 176
4.3.2 Dockerfile实践心得 180
4.4 Docker容器的监控手段 182
4.4.1 Docker容器监控维度 182
4.4.2 容器监控命令 183
4.4.3 常用的容器监控工具 186
4.5 容器化应用构建的基础:高可用配置中心 189
4.5.1 etcd经典应用场景 190
4.5.2 etcd实现原理 194
第二部分 Docker云平台解读
第5章 构建自己的容器云 210
5.1 再谈云平台的层次架构 210
5.2 从小工到专家 213
第6章 专注编排与部署:三剑客与Fleet 218
6.1 编排小神器Fig 218
6.1.1 再谈容器编排与部署 218
6.1.2 Compose原理:一探究竟 221
6.2 环境透明化工具Machine 225
6.2.1 Machine与虚拟机软件 226
6.2.2 Machine与IaaS平台 227
6.2.3 Machine小结 228
6.3 集群抽象工具Swarm 229
6.3.1 Swarm简介 229
6.3.2 试用Swarm 230
6.3.3 Swarm集群的多种创建方式 231
6.3.4 Swarm对请求的处理 233
6.3.5 Swarm集群的调度策略 233
6.3.6 Swarm与Machine 234
6.4 编排之秀Fleet 235
6.4.1 旧问题新角度:Docker distro 235
6.4.2 Fleet的原理剖析 239
第7章 专注应用支撑和运行时:Flynn 和Deis 245
7.1 Flynn,一个小而美的两层架构 245
7.1.1 第0层:容器云的基础设施 246
7.1.2 第1层:容器云的功能框架 246
7.1.3 Flynn体系架构与实现原理 247
7.2 谈谈Deis与Flynn 257
7.2.1 应用发布上的比较 258
7.2.2 关于Deis的一些思考 260
第8章 一切皆容器:Kubernetes 261
8.1 Kubernetes简介 261
8.2 Kubernetes的设计解读 262
8.2.1 一个典型案例:Guestbook. 263
8.2.2 Kubernetes核心概念剖析 265
8.3 Kubernetes核心组件解读 294
8.3.1 APIServer 294
8.3.2 Scheduler 301
8.3.3 Controller Manager 309
8.3.4 kubelet 314
8.3.5 kube-proxy 320
8.3.6 核心组件协作流程 325
8.4 Kubernetes用户认证授权与资源管理 328
8.4.1 namespace解析 328
8.4.2 基于token文件或客户端证书的认证机制 333
8.4.3 基于访问规则的授权机制 334
8.4.4 基于资源的授权控制AdmissionControl 336
8.5 Kubernetes网络核心原理 347
8.5.1 单pod单IP模型 348
8.5.2 pod和网络容器 350
8.5.3 实现Kubernetes的网络模型 353
8.6 Kubernetes高级实践 356
8.6.1 Kubernetes高级实践之应用健康检查 356
8.6.2 Kubernetes高级实践之高可用性 358
8.6.3 Kubernetes高级实践之日志 362
8.6.4 Kubernetes高级实践之集成DNS 364
8.6.5 Kubernetes高级实践之容器上下文环境 366
8.7 不要停止思考 368
第三部分 附录
附录A Docker的安装 372
附录B 阅读Docker源代码的神兵利器 379
附录C 快速熟悉开源项目 388
附录D cgroups的测试与使用 391
附录E cgroups子系统配置参数介绍 395
附录F Kubernetes的安装 400
后记 403
新人简单说两句......
简单说两句,有不对的地方,请多包涵. 这本书是boss推荐的, 1)前部分对docker的原理讲解的很清楚. 这可能是目前很多docker书中所没有的. 2)以容器云的思路思考怎么使用部署docker,这应该是很多公司用docker的难点,.........
2015-11-12 15:03
讲的很深入
前半部分讲docker,后半部分讲kubernetes。看得出,作者对源码确实有自己的理解。作者列表里好多牛人,孙健波,孙宏亮。。。唯一的问题是:k8s版本有点老了,希望能赶紧出1.0版的。github上k8s的很多文档和例子也.........
2015-11-04 23:42