热门排行
简介
Docker源码分析是一本引导读者深入了解Docker实现原理的技术普及读物,此书的主要目标是通过对Docker架构和源代码的详细讲解和解剖,帮助读者对Docker的底层实现有一个全面的理解。有需要的用户可以免费下载学习。
作者通过大量的流程图和代码片段对Docker的架构、Docker的重要模块,特别是对Swarm、Machine和Compose这三个模块进行了详细介绍和深度剖析,无论是Docker的使用者还是开发者,通过阅读此书都可以对Docker有更深刻的理解,能够更好的使用或者开发Docker。
作者简介
孙宏亮是DaoCloud初创团队成员,软件工程师,浙江大学计算机科学专业应届毕业研究生。
读研期间活跃在PaaS和Docker开源社区,对Cloud Foundry有深入研究和丰富实践,擅长底层平台代码分析,对分布式平台的架构有一定经验,撰写了大量有深度的技术博客。
2014年末以合伙人身份加入DaoCloud团队,致力于传播以Docker为主的容器的技术,推动互联网应用的容器化步伐。
Docker介绍
Docker是Docker公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发,并遵从Apache 2.0协议。目前,Docker可以在容器内部快速自动化部署应用,并可以通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率,并且提升诸如IO等方面的性能。
由于众多新颖的特性以及项目本身的开放性,Docker在不到两年的时间里迅速获得诸多厂商的青睐,其中更是包括Google、Microsoft、VMware等业界行业领导者。Google在今年六月份推出了Kubernetes,提供Docker容器的调度服务,而今年8月Microsoft宣布Azure上支持Kubernetes,随后传统虚拟化巨头VMware宣布与Docker强强合作。今年9月中旬,Docker更是获得4000万美元的C轮融资,以推动分布式应用方面的发展。
从目前的形势来看,Docker的前景一片大好。本系列文章从源码的角度出发,详细介绍Docker的架构、Docker的运行以及Docker的卓越特性。本文是Docker源码分析系列的第一篇———Docker架构篇。
Docker版本信息
本文关于Docker架构的分析都是基于Docker的源码与Docker相应版本的运行结果,其中Docker为最新的1.2版本。
Docker架构分析内容安排
本文的目的是:在理解Docker源代码的基础上,分析Docker架构。分析过程中主要按照以下三个步骤进行:
* Docker的总架构图展示
* Docker架构图内部各模块功能与实现分析
* 以Docker命令的执行为例,进行Docker运行流程阐述
docker源码分析目录:
赞誉
序
前言
第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介绍
......
第15章 Swarm架构设计与实现
......
第16章 Machine架构设计与实现
......
第17章 Compose架构设计与实现
......