Docker源码分析

出版日期:2015-8-1
ISBN:9787111510720
作者:孙宏亮
页数:264页

内容概要

孙宏亮
硕士,浙江大学毕业,现为DaoCloud软件工程师,主要负责企业级容器云平台的研发工作。数年来一直从事云计算、PaaS领域的研究与实践,是国内较早一批接触Docker的先行者,同时也是Docker技术的推广者。

书籍目录

目录
赞誉

前言
第1章 Docker架构
1
1.1 引言
1
1.2 Docker总架构图
2
1.3 Docker各模块功能与实现分析
3
1.3.1 Docker Client
4
1.3.2 Docker Daemon
4
1.3.3 Docker Registry
6
1.3.4 Graph
7
1.3.5 Driver
7
1.3.6 libcontainer
10
1.3.7 Docker Container
10
1.4 Docker运行案例分析
11
1.4.1 docker pull
11
1.4.2 docker run
12
1.5 总结
14
第2章 Docker Client创建与命令执行
15
2.1 引言
15
2.2 创建Docker Client
16
2.2.1 Docker命令的flag参数解析
17
2.2.2 处理flag信息并收集Docker Client的配置信息
20
2.2.3 如何创建Docker Client
22
2.3 Docker命令执行
24
2.3.1 Docker Client解析请求命令
24
2.3.2 Docker Client执行请求命令
25
2.4 总结
27
第3章 启动Docker Daemon
28
3.1 引言
28
3.2 Docker Daemon的启动流程
29
3.3 mainDaemon()的具体实现
30
3.3.1 配置初始化
30
3.3.2 flag参数检查
32
3.3.3 创建engine对象
33
3.3.4 设置engine的信号捕获
34
3.3.5 加载builtins
35
3.3.6 使用goroutine加载daemon
对象并运行
38
3.3.7 打印Docker版本及驱动信息
41
3.3.8 serveapi的创建与运行
42
3.4 总结
42
第4章 Docker Daemon之NewDaemon实现
43
4.1 引言
43
4.2 NewDaemon具体实现
44
4.3 应用配置信息
45
4.3.1 配置Docker容器的MTU
45
4.3.2 检测网桥配置信息
46
4.3.3 查验容器间的通信配置
46
4.3.4 处理网络功能配置
47
4.3.5 处理PID文件配置
47
4.4 检测系统支持及用户权限
48
4.5 配置工作路径
49
4.6 加载并配置graphdriver
49
4.6.1 创建graphdriver
49
4.6.2 验证btrfs与SELinux的兼容性
51
4.6.3 创建容器仓库目录
51
4.6.4 迁移容器至aufs类型
51
4.6.5 创建镜像graph
52
4.6.6 创建volumesdriver以及volumes graph
53
4.6.7 创建TagStore
53
4.7 配置Docker Daemon网络环境
54
4.7.1 创建Docker网络设备
55
4.7.2 启用iptables功能
55
4.7.3 启用系统数据包转发功能
56
4.7.4 创建DOCKER链
56
4.7.5 注册处理方法至Engine
57
4.8 创建graphdb并初始化
57
4.9 创建execdriver
58
4.10 创建daemon实例
59
4.11 检测DNS配置
60
4.12 启动时加载已有Docker容器
61
4.13 设置shutdown的处理方法
61
4.14 返回daemon对象实例
62
4.15 总结
62
第5章 Docker Server的创建
63
5.1 引言
63
5.2 Docker Server创建流程
63
5.2.1 创建名为“serveapi”的Job
64
5.2.2 配置Job环境变量
64
5.2.3 运行Job
65
5.3 ServeApi运行流程
65
5.4 ListenAndServe实现
68
5.4.1 创建router路由实例
69
5.4.2 创建listener监听实例
74
5.4.3 创建http.Server
74
5.4.4 启动API服务
75
5.5 总结
75
第6章 Docker Daemon网络
76
6.1 引言
76
6.2 Docker Daemon网络介绍
77
6.3 Docker Daemon网络配置接口
78
6.4 Docker Daemon网络初始化
79
6.4.1 启动Docker Daemon传递flag参数
80
6.4.2 解析网络flag参数
80
6.4.3 预处理flag参数
80
6.4.4 确定Docker网络模式
81
6.5 创建Docker网桥
82
6.5.1 提取环境变量
83
6.5.2 确定Docker网桥设备名
83
6.5.3 查找bridgeIface网桥设备
83
6.5.4 bridgeIface已创建
84
6.5.5 bridgeIface未创建
85
6.5.6 获取网桥设备的网络地址
88
6.5.7 配置Docker Daemon的iptables
88
6.5.8 配置网络设备间数据报转发功能
88
6.5.9 注册网络Handler
89
6.6 总结
89
第7章 Docker容器网络
90
7.1 引言
90
7.2 Docker容器网络模式
93
7.2.1 bridge桥接模式
93
7.2.2 host模式
95
7.2.3 other container模式
96
7.2.4 none模式
97
7.3 Docker Client配置容器网络模式
97
7.3.1 使用Docker Client
98
7.3.2 runconfig包解析
98
7.3.3 CmdRun执行
102
7.4 Docker Daemon创建容器网络流程
103
7.4.1 创建容器之网络配置
103
7.4.2 启动容器之网络配置
105
7.5 execdriver网络执行流程
111
7.5.1 创建libcontainer的Config对象
112
7.5.2 调用libcontainer的namespaces启动容器
116
7.6 libcontainer实现内核态网络配置
117
7.6.1 创建exec.Cmd
118
7.6.2 启动exec.Cmd创建进程
119
7.6.3 为容器进程初始化网络环境
120
7.7 总结
122
第8章 Docker镜像
123
8.1 引言
123
8.2 Docker镜像介绍
124
8.3 rootfs
124
8.4 Union Mount
125
8.5 image
127
8.6 layer
128
8.7 总结
129
第9章 Docker镜像下载
130
9.1 引言
130
9.2 Docker镜像下载流程
131
9.3 Docker Client
131
9.3.1 解析镜像参数
132
9.3.2 配置认证信息
136
9.3.3 发送API请求
137
9.4 Docker Server
138
9.4.1 解析请求参数
138
9.4.2 创建并配置Job
139
9.4.3 触发执行Job
139
9.5 Docker Daemon
140
9.5.1 解析Job参数
140
9.5.2 创建session对象
141
9.5.3 执行镜像下载
142
9.6 总结
147
第10章 Docker镜像存储
149
10.1 引言
149
10.2 镜像注册
150
10.3 验证镜像ID
151
10.4 创建镜像路径
152
10.4.1 创建mnt、diff和layers子目录
153
10.4.2 挂载祖先镜像并返回根目录
155
10.5 存储镜像内容
157
10.5.1 解压镜像内容
158
10.5.2 收集镜像大小并记录
160
10.5.3 存储jsonData信息
161
10.6 注册镜像ID
162
10.7 总结
163
第11章 docker build实现
164
11.1 引言
164
11.2 docker build执行流程
165
11.2.1 Docker Client与docker build
166
11.2.2 Docker Server与docker build
170
11.2.3 Docker Daemon与docker build
171
11.3 Dockerfile命令解析流程
174
11.4 Dockerfile命令分析
177
11.4.1 FROM命令
177
11.4.2 RUN命令
178
11.4.3 ENV命令
182
11.5 总结
182
第12章 Docker容器创建
183
12.1 引言
183
12.2 Docker容器运行流程
184
12.3 Docker Daemon创建容器对象
185
12.3.1 LookupImage
186
12.3.2 CheckDepth
188
12.3.3 mergeAndVerifyConfig
188
12.3.4 newContainer
189
12.3.5 createRootfs
190
12.3.6 ToDisk
190
12.3.7 Register
191
12.4 Docker Daemon启动容器
191
12.4.1 setupContainerDns
192
12.4.2 Mount
193
12.4.3 initializeNetworking
194
12.4.4 verifyDaemonSetting
194
12.4.5 prepareVolumesForContainer
195
12.4.6 setupLinkedContainers
196
12.4.7 setupWorkingDirectory
199
12.4.8 createDaemonEnvironment
199
12.4.9 populateCommand
200
12.4.10 setupMountsForContainer
200
12.4.11 waitForStart
201
12.5 总结
202
第13章 dockerinit启动
203
13.1 引言
203
13.2 dockerinit介绍
204
13.2.1 dockerinit初始化内容
204
13.2.2 dockerinit与Docker Daemon
204
13.3 dockerinit执行入口
205
13.3.1 createCommand分析
205
13.3.2 namespace.exec
207
13.4 dockerinit运行
208
13.4.1 reexec.Init()的分析
208
13.4.2 dockerinit的执行流程
210
13.5 libcontainer的运行
211
13.5.1 Docker Daemon设置cgroups参数
213
13.5.2 Docker Daemon创建网络栈资源
213
13.5.3 dockerinit配置网络栈
213
13.5.4 dockerinit初始化mount namespace
215
13.5.5 dockerinit完成namespace配置
215
13.5.6 dockerinit执行用户命令Entrypoint
217
13.6 总结
218
第14章 libcontainer介绍
219
14.1 引言
219
14.2 Docker、libcontainer以及LXC的关系
220
14.3 libcontainer模块分析
221
14.3.1 namespace
221
14.3.2 cgroup
224
14.3.3 网络
225
14.3.4 挂载
226
14.3.5 设备
227
14.3.6 nsinit
227
14.3.7 其他模块
227
14.4 总结
228
第15章 Swarm架构设计与实现
229
15.1 引言
229
15.2 Swarm架构
230
15.2.1 Swarm Node
231
15.2.2 Docker Node
231
15.2.3 node discovery
231
15.2.4 scheduler
232
15.3 Swarm命令
232
15.3.1 swarm create
232
15.3.2 swarm manage
232
15.3.3 swarm join
233
15.3.4 swarm list
234
15.4 总结
234
第16章 Machine架构设计与实现
235
16.1 引言
235
16.2 Machine架构
236
16.2.1 Machine
237
16.2.2 Store
237
16.2.3 Host
237
16.2.4 Driver
238
16.2.5 Provisioner
238
16.2.6 Machine运行流程
239
16.3 Machine与Swarm的结合
240
16.4 总结
241
第17章 Compose架构设计与实现
242
17.1 引言
242
17.2 Compose介绍
242
17.3 Compose架构
243
17.4 Compose评价
246
17.4.1 Compose单机能力
246
17.4.2 Compose跨节点能力
247
17.4.3 Compose与Swarm
247
17.5 总结
247

作者简介

本书是一本引导读者深入了解Docker实现原理的技术普及读物,主要目标是通过对Docker架构和源代码的详细讲解和解剖,帮助读者对Docker的底层实现有一个全面的理解。
作者通过大量的流程图和代码片段对Docker的架构、Docker的重要模块,特别是对Swarm、Machine和Compose这三个模块进行了详细介绍和深度剖析,无论是Docker的使用者还是开发者,通过阅读此书都可以对Docker有更深刻的理解,能够更好的使用或者开发Docker。


 Docker源码分析下载



发布书评

 
 


精彩短评 (总计9条)

  •     作为一个完全没有看过go语言,没有用过docker的人都能很轻松的读懂,我觉得这本书写的非常好。
  •     写得还是蛮详细的,对于深刻理解docker很有帮忙,但是正因为太详细,所以也很容易迷失。
  •     主要是更新太块了,还是读的在线文档。
  •     好书
  •     这本书其实不错,虽然说是源码分析,作者都会介绍一下原理,也会对相关技术技术做介绍,并没有大片的代码。感兴趣可以快速看一下。
  •     读起来干巴巴的。
  •     作者手把手教你看docker代码及go。用此书入门docker其实不大适合。但是从源码的角度倒是对docker有了几分了解。其他就是实践的问题。
  •     只能粗读 达不到里面的深度,不过总体介绍的框架还是很好的。翻看了
  •     读起来干巴巴的,没啥意思.
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024