通过讲解 Docker 使用到的各种底层技术,例如Namespace、Cgroups等来自己一步步动手完成一个简单版本的Docker。在自己动手的过程中,从而对Docker 这个技术有一个整体、细致的了解。能够明白Docker 的原理以及结构,从而加深对目前炽手可热的Docker 技术的理解,方便解决工作中使用Docker 遇到的各种问题。
2015年在 IBM CDL 从事研发工程师工作,方向为云计算与虚拟化。2016年初加入阿里云,就职容器服务,从事Docker 研发与容器化技术解决方案。
目录
第1章容器与开发语言………………………………………………………………………1
1.1Docker ………………………………………………………………………………1
1.1.1简介 …………………………………………………………………………1
1.1.2容器和虚拟机比较 …………………………………………………………2
1.1.3容器加速开发效率 …………………………………………………………3
1.1.4利用容器合作开发 …………………………………………………………4
1.1.5利用容器快速扩容 …………………………………………………………4
1.1.6安装使用Docker ……………………………………………………………4
1.2Go ……………………………………………………………………………………5
1.2.1描述 …………………………………………………………………………5
1.2.2安装Go ………………………………………………………………………6
1.2.3配置GOPATH ………………………………………………………………6
1.3小结 …………………………………………………………………………………7
第2章基础技术………………………………………………………………………………8
2.1Linux Namespace 介绍 ………………………………………………………………8
2.1.1概念 …………………………………………………………………………8
2.1.2UTS Namespace ………………………………………………………………10
2.1.3IPC Namespace ………………………………………………………………11
2.1.4PID Namespace ………………………………………………………………13
2.1.5Mount Namespace ……………………………………………………………14
2.1.6User Namespace ………………………………………………………………16
2.1.7Network Namespace ………………………………………………………… 18
2.2Linux Cgroups 介绍 ………………………………………………………………… 20
2.2.1什么是Linux Cgroups ……………………………………………………… 20
2.2.2Docker 是如何使用Cgroups 的 …………………………………………… 24
2.2.3用Go 语言实现通过cgroup 限制容器的资源 …………………………… 25
2.3Union File System …………………………………………………………………… 26
2.3.1什么是Union File System …………………………………………………… 26
2.3.2AUFS ………………………………………………………………………… 27
2.3.3Docker 是如何使用AUFS 的 ……………………………………………… 27
2.3.4自己动手写AUFS…………………………………………………………… 34
2.4小结 ………………………………………………………………………………… 37
第3 章构造容器……………………………………………………………………………… 38
3.1构造实现run 命令版本的容器 …………………………………………………… 38
3.1.1Linux proc 文件系统介绍 …………………………………………………… 38
3.1.2实现 run 命令 ……………………………………………………………… 39
3.2增加容器资源限制 ………………………………………………………………… 45
3.2.1定义Cgroups 的数据结构 ………………………………………………… 45
3.2.2在启动容器时增加资源限制的配置 ……………………………………… 51
3.3增加管道及环境变量识别 ………………………………………………………… 53
3.4小结 ………………………………………………………………………………… 58
第4 章构造镜像……………………………………………………………………………… 59
4.1使用busybox 创建容器 …………………………………………………………… 59
4.1.1busybox ……………………………………………………………………… 59
4.1.2pivot_root …………………………………………………………………… 60
4.2使用AUFS 包装busybox …………………………………………………………… 63
4.3实现volume 数据卷 ………………&h
好。。。。z
通过这本书可以很容易理解docker的原理,写的非常好