更多书籍点击进入>> CiCi岛php
电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍html
本书是一本引导读者深刻了解Docker实现原理的技术普及读物,主要目标是经过对Docker架构和源代码的详细讲解和解剖,帮助读者对Docker的底层实现有一个全面的理解。 做者经过大量的流程图和代码片断对Docker的架构、Docker的重要模块,特别是对Swarm、Machine和Compose这三个模块进行了详细介绍和深度剖析,不管是Docker的使用者仍是开发者,经过阅读此书均可以对Docker有更深入的理解,可以更好的使用或者开发Docker。node
本书是一本引导读者深刻了解Docker实现原理的技术普及读物,主要目标是经过对Docker架构和源代码的详细讲解和解剖,帮助读者对Docker的底层实现有一个全面的理解。本书的内容主要集中于三部分:Docker的架构、Docker的模块,以及Docker的三驾马车Swarm、Machine和Compose。 第一部分(第1章)主要从宏观的角度和读者一块儿领略Docker的架构设计,并初步介绍架构中各模块的职责。 第二部分(第2~14章)是本书的主体部分,主要针对Docker中多个重要的模块进行具体深刻分析,包括DockerClient、DockerDaemon、DockerServer、Docker网络、Docker镜像、Docker容器等。读者能够发现,Docker的模块之间耦合度很是低,很适合按部就班,层层深刻。第2~8章主要从Docker软件的架构入手,勾勒骨架;第9~11章集中于Docker镜像技术,夯实基础;第12~14章则进一步分析Docker容器的始末,阐述本质。 第三部分(第15~17章)介绍Docker生态三驾马车—Swarm、Machine和Compose。Docker拥有强大的单机能力,三驾马车能够很好地补充Docker的跨主机能力以及部署能力。读者能够经过这几章感觉Docker生态中其余功能强大的软件。git
赞誉
序
前言
第1章 Docker架构
1.1 引言
1.2 Docker总架构图
1.3 Docker各模块功能与实现分析
1.3.1 Docker Client
1.3.2 Docker Daemon
1.3.3 Docker Registry
1.3.4 Graph
1.3.5 Driver
1.3.6 libcontainer
1.3.7 Docker Container
1.4 Docker运行案例分析
1.4.1 docker pull
1.4.2 docker run
1.5 总结 程序员
第2章 Docker Client建立与命令执行
2.1 引言
2.2 建立Docker Client
2.2.1 Docker命令的flag参数解析
2.2.2 处理flag信息并收集Docker Client的配置信息
2.2.3 如何建立Docker Client
2.3 Docker命令执行
2.3.1 Docker Client解析请求命令
2.3.2 Docker Client执行请求命令
2.4 总结 github
第3章 启动Docker Daemon
3.1 引言
3.2 Docker Daemon的启动流程
3.3 mainDaemon()的具体实现
3.3.1 配置初始化
3.3.2 flag参数检查
3.3.3 建立engine对象
3.3.4 设置engine的信号捕获
3.3.5 加载builtins
3.3.6 使用goroutine加载daemon
对象并运行
3.3.7 打印Docker版本及驱动信息
3.3.8 serveapi的建立与运行
3.4 总结 docker
第4章 Docker Daemon之NewDaemon实现
4.1 引言
4.2 NewDaemon具体实现
4.3 应用配置信息
4.3.1 配置Docker容器的MTU
4.3.2 检测网桥配置信息
4.3.3 查验容器间的通讯配置
4.3.4 处理网络功能配置
4.3.5 处理PID文件配置
4.4 检测系统支持及用户权限
4.5 配置工做路径
4.6 加载并配置graphdriver
4.6.1 建立graphdriver
4.6.2 验证btrfs与SELinux的兼容性
4.6.3 建立容器仓库目录
4.6.4 迁移容器至aufs类型
4.6.5 建立镜像graph
4.6.6 建立volumesdriver以及volumes graph
4.6.7 建立TagStore
4.7 配置Docker Daemon网络环境
4.7.1 建立Docker网络设备
4.7.2 启用iptables功能
4.7.3 启用系统数据包转发功能
4.7.4 建立DOCKER链
4.7.5 注册处理方法至Engine
4.8 建立graphdb并初始化
4.9 建立execdriver
4.10 建立daemon实例
4.11 检测DNS配置
4.12 启动时加载已有Docker容器
4.13 设置shutdown的处理方法
4.14 返回daemon对象实例
4.15 总结 json
第5章 Docker Server的建立
5.1 引言
5.2 Docker Server建立流程
5.2.1 建立名为"serveapi"的Job
5.2.2 配置Job环境变量
5.2.3 运行Job
5.3 ServeApi运行流程
5.4 ListenAndServe实现
5.4.1 建立router路由实例
5.4.2 建立listener监听实例
5.4.3 建立http.Server
5.4.4 启动API服务
5.5 总结 api
第6章 Docker Daemon网络
6.1 引言
6.2 Docker Daemon网络介绍
6.3 Docker Daemon网络配置接口
6.4 Docker Daemon网络初始化
6.4.1 启动Docker Daemon传递flag参数
6.4.2 解析网络flag参数
6.4.3 预处理flag参数
6.4.4 肯定Docker网络模式
6.5 建立Docker网桥
6.5.1 提取环境变量
6.5.2 肯定Docker网桥设备名
6.5.3 查找bridgeIface网桥设备
6.5.4 bridgeIface已建立
6.5.5 bridgeIface未建立
6.5.6 获取网桥设备的网络地址
6.5.7 配置Docker Daemon的iptables
6.5.8 配置网络设备间数据报转发功能
6.5.9 注册网络Handler
6.6 总结 安全
第7章 Docker容器网络
7.1 引言
7.2 Docker容器网络模式
7.2.1 bridge桥接模式
7.2.2 host模式
7.2.3 other container模式
7.2.4 none模式
7.3 Docker Client配置容器网络模式
7.3.1 使用Docker Client
7.3.2 runconfig包解析
7.3.3 CmdRun执行
7.4 Docker Daemon建立容器网络流程
7.4.1 建立容器之网络配置
7.4.2 启动容器之网络配置
7.5 execdriver网络执行流程
7.5.1 建立libcontainer的Config对象
7.5.2 调用libcontainer的namespaces启动容器
7.6 libcontainer实现内核态网络配置
7.6.1 建立exec.Cmd
7.6.2 启动exec.Cmd建立进程
7.6.3 为容器进程初始化网络环境
7.7 总结
第8章 Docker镜像
8.1 引言
8.2 Docker镜像介绍
8.3 rootfs
8.4 Union Mount
8.5 image
8.6 layer
8.7 总结
第9章 Docker镜像下载
9.1 引言
9.2 Docker镜像下载流程
9.3 Docker Client
9.3.1 解析镜像参数
9.3.2 配置认证信息
9.3.3 发送API请求
9.4 Docker Server
9.4.1 解析请求参数
9.4.2 建立并配置Job
9.4.3 触发执行Job
9.5 Docker Daemon
9.5.1 解析Job参数
9.5.2 建立session对象
9.5.3 执行镜像下载
9.6 总结
第10章 Docker镜像存储
10.1 引言
10.2 镜像注册
10.3 验证镜像ID
10.4 建立镜像路径
10.4.1 建立mnt、diff和layers子目录
10.4.2 挂载祖先镜像并返回根目录
10.5 存储镜像内容
10.5.1 解压镜像内容
10.5.2 收集镜像大小并记录
10.5.3 存储jsonData信息
10.6 注册镜像ID
10.7 总结
第11章 docker build实现
11.1 引言
11.2 docker build执行流程
11.2.1 Docker Client与docker build
11.2.2 Docker Server与docker build
11.2.3 Docker Daemon与docker build
11.3 Dockerfile命令解析流程
11.4 Dockerfile命令分析
11.4.1 FROM命令
11.4.2 RUN命令
11.4.3 ENV命令
11.5 总结
第12章 Docker容器建立
12.1 引言
12.2 Docker容器运行流程
12.3 Docker Daemon建立容器对象
12.3.1 LookupImage
12.3.2 CheckDepth
12.3.3 mergeAndVerifyConfig
12.3.4 newContainer
12.3.5 createRootfs
12.3.6 ToDisk
12.3.7 Register
12.4 Docker Daemon启动容器
12.4.1 setupContainerDns
12.4.2 Mount
12.4.3 initializeNetworking
12.4.4 verifyDaemonSetting
12.4.5 prepareVolumesForContainer
12.4.6 setupLinkedContainers
12.4.7 setupWorkingDirectory
12.4.8 createDaemonEnvironment
12.4.9 populateCommand
12.4.10 setupMountsForContainer
12.4.11 waitForStart
12.5 总结
第13章 dockerinit启动
13.1 引言
13.2 dockerinit介绍
13.2.1 dockerinit初始化内容
13.2.2 dockerinit与Docker Daemon
13.3 dockerinit执行入口
13.3.1 createCommand分析
13.3.2 namespace.exec
13.4 dockerinit运行
13.4.1 reexec.Init()的分析
13.4.2 dockerinit的执行流程
13.5 libcontainer的运行
13.5.1 Docker Daemon设置cgroups参数
13.5.2 Docker Daemon建立网络栈资源
13.5.3 dockerinit配置网络栈
13.5.4 dockerinit初始化mount namespace
13.5.5 dockerinit完成namespace配置
13.5.6 dockerinit执行用户命令Entrypoint
13.6 总结
第14章 libcontainer介绍
14.1 引言
14.2 Docker、libcontainer以及LXC的关系
14.3 libcontainer模块分析
14.3.1 namespace
14.3.2 cgroup
14.3.3 网络
14.3.4 挂载
14.3.5 设备
14.3.6 nsinit
14.3.7 其余模块
14.4 总结
第15章 Swarm架构设计与实现
15.1 引言
15.2 Swarm架构
15.2.1 Swarm Node
15.2.2 Docker Node
15.2.3 node discovery
15.2.4 scheduler
15.3 Swarm命令
15.3.1 swarm create
15.3.2 swarm manage
15.3.3 swarm join
15.3.4 swarm list
15.4 总结
第16章 Machine架构设计与实现
16.1 引言
16.2 Machine架构
16.2.1 Machine
16.2.2 Store
16.2.3 Host
16.2.4 Driver
16.2.5 Provisioner
16.2.6 Machine运行流程
16.3 Machine与Swarm的结合
16.4 总结
第17章 Compose架构设计与实现
17.1 引言
17.2 Compose介绍
17.3 Compose架构
17.4 Compose评价
17.4.1 Compose单机能力
17.4.2 Compose跨节点能力
17.4.3 Compose与Swarm
17.5 总结
Praise 赞 誉
像谷歌同样部署本身的应用,这是不少软件工程师的梦想。Docker的目标是圆不少人的梦。自从InfoQ推出Docker系列文章,做为操做系统课程教师的我一直在学习并关注Docker的茁壮成长。
当我发现这上面刊登的“Docker源码分析”系列文章的做者竟然是咱们课程组的研究生助教孙宏亮时,惊喜之情溢于言表。宏亮对Docker的理解十分深入,他本人是Docker的积极拥护者、倡导者和贡献者。他在研究生毕业之后投身到了创业公司DaoCloud,去为Docker的梦想开创美好的将来。
最近,我又欣喜地发现,这系列文章以及后续章节即将正式出版成书,有机会同更多的Docker用户、开发者、学习者见面。本书经过分析解读Docker源码,让读者了解 Docker的内部结构和实现,以便更好地使用Docker。该书的内容组织深刻浅出,表述准确到位, 有大量流程图和代码片断帮助读者理解Docker各个功能模块的流程,是学习Docker开源系统的良师益友。
—寿黎旦,浙江大学计算机学院教授
近年来,Docker迅速风靡了云计算世界,可是专门针对Docker的技术实现进行深刻分析的文章却相对较少。这一方面因为Docker技术变化很快,源码分析很快会跟不上版本发展;另外一方面,对源代码的解析,须要对整个Docker设计具有全局的视角,才能深刻浅出地找到源码中的脉络。
宏亮的这本《Docker源码分析》,恰如其时的出现,弥补了这个空白,对于但愿参与到Docker社区、参与代码贡献或构建本身的Docker应用环境的读者来讲,应是一本案头必备书籍。
—王兴宇,《Linux中国》创始人
在崇尚源码至上的工程师文化里,文档介绍、发布会材料都是苍白的,惟有研读源码,才能深入理解软件背后的原理。与全部其余软件同样,读源码并非学习Docker最快的途径,可是若是有人通读源码后给出了详细分析,你就能够轻松地站在巨人的肩膀上。
很高兴看到国内这么快就出版源码分析的书籍。对于全部想在Docker方面进阶和想晋升为高端用户的读者,都值得阅读本书,也但愿经过《Docker源码分析》一书,能够诞生更多的社区贡献者,共同推进Docker的发展。
—黄强,华为Docker Committer
值得自豪的是,就在Docker蓬勃发展之际,第一本详尽剖析Docker源码的著做出自国人之手。
本书在每章宏观的流程梳理背后都伴随有更加细致深刻的源码分析。不管读者是只想了解使用Docker,仍是抱着深刻理解Docker并参与社区开发、二次开发的心态,本书都值得一读。
—胡科平,华为Docker Committer
这本书从源码的角度对Docker的实现原理进行了深刻的探讨和细腻的讲解,将当前热门的容器技术的背后机理讲解得深刻浅出明白透彻。不管是Docker的用户仍是开发者,经过阅读本书均可以对Docker有更深入的理解,可以更好地使用或者开发Docker。
—雷继棠,华为Docker Committer
Docker已是一个成长2年时间的云计算技术,它正在以惊人的速度在全球范围内扩张本身的“疆土”。我做为Docker中国区的开发者,很是但愿能看到有一本书详细地告诉我,Docker的每个细节是如何实现的。因此当我在InfoQ上看到宏亮的“Docker源码分析”专栏时眼前一亮。今天,它终于汇编成书摆在你个人眼前。我但愿你能在这本书上学到更多Docker技术的精髓思想,在实战Docker技术时能够运用自如!
—肖德时,数人科技CTO
我家里的书柜中至今仍然保留着一本《Linux内核彻底注释》,它伴随我很长一段时间,使我受益不浅。10年以后,当我拿到宏亮的《Docker源代码分析》草稿,昨日又重现。这本书不管是对学习Docker,仍是掌握Go语言,都是很是好的一手资源。雷锋不常有,你们要支持!
—赵鹏,VisualOps创始人
Foreword 序
三年前,我在VMware负责Cloud Foundry这一款开源PaaS产品在中国的开发者社区和生态系统建设工做。当时关于Cloud Foundry的中文文档很是少,更不用说有深度的技术干货了,因此当CSDN上出现了一个专门从底层模块和源码的角度,对Cloud Foundry作深度剖析的系列博客文章时,一会儿就引发了个人注意。
通过一番“人肉搜索”,我很是惊奇的发现,这一系列干货的做者孙宏亮,居然是浙江大学计算系的一年级研究生。当时,VMware跟浙江大学在Cloud Foundry方面有比较深刻的合做,浙大计算机系的SEL实验室,投入了精锐的师资力量,从事分布式系统和新一代PaaS的研究工做。宏亮初入浙江大学,就在这样的氛围下开始了他的研究生求学生涯,应当说是很是幸运的。
宏亮在CSDN上的系列文章,主打“源码分析”,这正是当时开源社区内比较缺乏的内容。提笔写“源码分析”,须要必定的勇气,阅读源码须要耗费大量的精力, 须要从数十万行代码中整理出清晰的逻辑,从中抽丝拨茧、归纳精华,这是一份很是辛苦的工做。并且,分析源码也须要一些“挑战权威”的精神,不只仅是简单的代码解析,更须要提炼出本身的观点,甚至勇于发现和纠正一些已有的问题。
在源码分析方面,宏亮充分体现了“初生牛犊不怕虎”的精神,很是详细地剖析了当时Cloud Foundry的几个主要模块,条理清晰,技术分析准确到位。宏亮这一系列文章帮助了包括一线互联网公司在内的许多企业了解、认识和最终使用Cloud Foundry,宏亮也借此奠基了他在PaaS社区的“江湖地位”。
从去年开始,Docker的热潮开始波及中国开发者社区。我有幸跟宏亮一块儿在CSDN主办的第一届Container技术大会上发表联合主题演讲,向来宾介绍Cloud Foundry内部的容器技术实现,以及对Docker的一些展望。那次大会是一个很重要的里程碑,在那以后,宏亮开始深刻研究Docker的底层实现,并在InfoQ连载“Docker源码分析”系列文章。
对PaaS平台的研究越深刻,越可以发现和体会Docker对开发和运维的价值。若是说当初的Cloud Foundry模块和源码分析文章,是读研期间的学习笔记,那此次宏亮的《Docker源码分析》,则是一个通过了深思熟虑、系统性、结构化的工做。Docker开源项目发展速度很是快,此次在文章连载内容的基础上出书,为了保证内容的准确性和时效性,宏亮补充了大量Docker最新项目的内容,特别是对Swarm、Machine和Compose这三个模块的开发进展作了紧密的追踪。
这是一本从架构和代码角度讲解Docker底层实现的技术图书,我从连载第一篇开始就对这个系列的文章保持了紧密的关注,也目击了宏亮在后期整理加工成书过程当中的辛勤努力。在《Docker源码分析》成书付梓出版之际,很是幸运,可以为宏亮写着一篇推荐序。这本书很是适合如下三类读者学习和阅读。
但愿以Docker容器交付软件的程序员。
Docker是将来互联网软件的交付件,这件事随着OCP标准的制定,正在逐渐成为事实。程序员和运维工程师都须要了解Docker的工做方式,尤为是Docker镜像的结构,软件经过Dockerfile打包时的优化方式等,这些内容在本书中都有很是详细的阐述。
Docker化云计算平台的建设者和维护者。
Docker公司在今年的全球开发者大会上提出了“Production Ready”的口号,有愈来愈多的互联网公司和传统企业采用Docker来构建开发、测试和运维平台。Docker在网络、存储、安全等领域的细节,是平台建设者和维护者必须深刻了解的部分,这些领域还在不断变化,新的项目也层出不穷,但本书对网络、存储和安全的基本知识和概念,作了很是清晰的介绍,也深刻到了底层实现的代码。
Go语言程序员。
即便不在项目中使用Docker,本书也可以为Go语言程序员带来帮助。Docker项目中大量采用了Go语言,尤为是在处理并发场景时,Docker对Go 语言的运用可谓出神入化。本书能够帮助Go语言程序员亲身体验特大型项目中Go语言的威力,以及实战场景中Golang模式和功能的用法。
最后,预祝宏亮在Docker的学习和工做中再创佳绩,也但愿读者能够从本书收获知识,开阔眼界。
喻 勇
2015年7月13日
Preface 前 言
Docker是什么
Docker从2013年诞生,短短两年时间就在全球IT技术圈内迅速走红,实乃技术圈内不可忽视的一阵飓风。然而,Docker是什么,Docker带来了什么?
Docker官方如此描述Docker:“Build, Ship, Run. An open platform for distributed applications for developers and sysadmins”。换言之,Docker为开发者与系统管理者提供了分布式应用的开放平台,从而能够便捷地构建、迁移与运行分布式应用。
多年来,IT行业中开发与运维一直是两个界限清晰的词。开发工程师专门从事软件的开发工做,最终交付软件代码;运维工程师则部署前者交付的软件,并接管软件的运行与管理。然而,在长时间的实践过程当中,开发与运维分离的方式不免存在弊病,二者职责的过度清晰致使软件效率的下降。随着分布式系统的流行,系统规模愈来愈大,软件愈来愈复杂,系统环境配置暴露的问题层出不穷。究其原因,仍是由于开发人员缺乏软件运行环境的认知,而运维人员对软件逻辑所知甚少。在这样的背景下,DevOps横空出世,提倡开发与运维不可分割,协调并进。
Docker无疑是DevOps大潮中最具实践价值的不二法宝。Docker从Linux内核的角度出发,属于轻量级虚拟化技术,有能力秒级提供应用隔离环境,完成云计算时代分布式应用的第一需求“隔离”。另外,Docker的镜像技术利用联合文件系统的优点,自下至上打包系统软件、系统环境以及软件程序,将运行环境与应用程序灵活地结合,快速运行Docker化的应用程序。同时,可读性极强的Dockerfile,极大地简化镜像的复杂性,并为镜像的转移与从新构建提供了可能性。
Docker提供轻便的资源分配方式,解决应用运行与系统环境的依赖,弥合应用跨节点迁移的鸿沟,种种特性都代表Docker几乎就是为“云计算”而生的。现在,Docker社区不断扩大并健康发展,多家国际IT巨头也纷纷宣布支持Docker,这一切更是让全球IT人士对Docker的将来充满信心。
本书的内容
本书是一本引导读者了解Docker实现原理的技术普及书。笔者一直坚信,了解软件或者系统最直接、最透彻的方式就是研读它们的源码。“源码即文档”也是鼓励开发者能更多地从源码的角度去学习软件或系统的本质。
本书的内容主要集中于3个部分:Docker的架构,Docker的模块,Docker的三驾马车Swarm、Machine以及Compose。
第一部分,主要从宏观的角度和读者一块儿领略Docker的架构设计,并初步介绍架构中各模块的职责。
第二部分是本书的主体部分,主要针对Docker中多个重要的模块进行具体深刻分析,包括:Docker Client、Docker Daemon、Docker Server、Docker网络、Docker镜像、Docker容器等。读者能够发现,Docker 的模块之间耦合度很是低,很适合按部就班,层层深刻。第2章至第8章主要从Docker软件的架构入手,勾勒骨架;第9章至第11章重点讨论Docker镜像技术,夯实基础;第12章至第14章则进一步分析Docker容器的始末,阐述本质。
第三部分介绍Docker生态三驾马车Swarm、Machine、Compose。Docker拥有强大的单机能力,三驾马车能够很好地补充Docker的跨主机能力以及部署能力。读者能够经过第15章至第17章感觉Docker生态圈中其余功能强大的软件。
但愿本书可以让读者最大化地感觉Docker的神奇与魅力。
关于勘误
因为时间与水平都比较有限,所以本书不免会存在一些纰漏和错误。若是读者发现了问题,请及时与我联系。我也会在本书后续的版本中加以改正。个人邮箱是:allen.sun@daocloud.io。我很是但愿和你们一块儿学习与讨论Docker,并共同推进Docker在社区的发展。
致谢
最后,向本书编写过程当中给予我巨大帮助的人们表示最诚挚的感谢。感谢个人父母,没有他们的鼓励和支持,此书不可能在如此短的时间内完成。感谢个人母校浙江大学以及SEL实验室的老师与同窗们,是他们在我求学过程当中给予无私的指引与帮助。感谢个人同事熊中祥,是他在本书编写过程当中提出了不少宝贵的建议,尤为在Machine和Compose部分。感谢个人同事喻勇和冯钊,他们为本书的编写作了不少沟通与协调工做。最后,还要感谢华章公司的编辑们,她们认真细致的工做,使本书以完美的形式展示给各位读者。
孙宏亮
2015年6月
本篇文章由一文多发平台ArtiPub自动发布