产品特色
编辑推荐
国内首部Docker源码分析著作
从源码角度全面解析Docker设计与实现
填补Docker理论与实践之间的鸿沟
一本引导读者深入了解Docker实现原理的技术普及读物,主要目标是通过对Docker架构和源代码的详细讲解和解剖,帮助读者对Docker的底层实现有一个全面的理解
作者通过大量的流程图和代码片段对Docker的架构、Docker的重要模块,特别是对Swarm、Machine和Compose这三个模块进行了详细介绍和深度剖析
无论是Docker的使用者还是开发者,通过阅读此书都可以对Docker有更深刻的理解,能够更好的使用或者开发Docker
内容简介
《Docker源码分析》是一本引导读者深入了解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生态中其他功能强大的软件。
作者简介
孙宏亮,硕士,浙江大学毕业,现为DaoCloud软件工程师,主要负责企业级容器云平台的研发工作。数年来一直从事云计算、PaaS领域的研究与实践,是国内较早一批接触Docker的先行者,同时也是Docker技术的推广者。
精彩书评
★像谷歌一样部署自己的应用,这是很多软件工程师的梦想。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创始人 目录
赞誉
序
前言
第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 总结
第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 总结
第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 总结
第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 总结
第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 总结
前言/序言
Docker是什么
Docker从2013年诞生,短短两年时间就在全球IT技术圈内迅速走红,实乃技术圈内不可忽视
Docker源码分析 电子书 下载 mobi epub pdf txt