自己动手写Docker出版时间:2017内容简介 《自己动手写Docker》在详细分析Docker所依赖的技术栈的基础上,一步一步地通过代码实例,让读者可以自己循序渐进地用Go语言构建出一个容器的引擎。不同于其他Docker原理介绍或代码剖析的书籍,《自己动手写Docker》旨在提供给读者一条动手路线,一步一步地实现Docker的隔离性,构建Docker的镜像、容器的生命周期及Docker的网络等。《自己动手写Docker》涉及的代码都托管在GitHub上,读者可以对照书中的步骤从代码层面学习构建流程,从而精通整个容器技术栈。《自己动手写Docker》也对目前业界容器技术的方向和实现做了简单介绍,以加深读者对容器生态的认识和理解。 《自己动手写Docker》适合对容器技术已经使用过或有一些了解,希望更深层次掌握容器技术原理和至佳实践的读者。目录第1章容器与开发语言11.1Docker 11.1.1简介 11.1.2容器和虚拟机比较 21.1.3容器加速开发效率 31.1.4利用容器合作开发 41.1.5利用容器快速扩容 41.1.6安装使用Docker 41.2Go 51.2.1描述 51.2.2安装Go 61.2.3配置GOPATH 61.3小结 7第2章基础技术82.1Linux Namespace 介绍 82.1.1概念 82.1.2UTS Namespace 102.1.3IPC Namespace 112.1.4PID Namespace 132.1.5Mount Namespace 142.1.6User Namespace 162.1.7Network Namespace 182.2Linux Cgroups介绍 202.2.1什么是Linux Cgroups 202.2.2Docker是如何使用Cgroups的 242.2.3用Go语言实现通过cgroup限制容器的资源 252.3Union File System 262.3.1什么是Union File System 262.3.2AUFS 272.3.3Docker是如何使用AUFS的 272.3.4自己动手写AUFS342.4小结 37第3章构造容器383.1构造实现run命令版本的容器 383.1.1Linux proc 文件系统介绍 383.1.2实现 run 命令 393.2增加容器资源限制 453.2.1定义Cgroups的数据结构 453.2.2在启动容器时增加资源限制的配置 513.3增加管道及环境变量识别 533.4小结 58第4章构造镜像594.1使用busybox创建容器 594.1.1busybox 594.1.2pivot_root 604.2使用AUFS包装busybox 634.3实现volume数据卷 674.4实现简单镜像打包 754.5小结 77第5章构建容器进阶785.1实现容器的后台运行 785.2实现查看运行中容器 825.2.1准备数据 825.2.2实现mydocker ps 875.3实现查看容器日志 905.4实现进入容器Namespace 935.4.1setns 945.4.2Cgo 945.4.3实现命令 945.5实现停止容器 1005.6实现删除容器 1045.7实现通过容器制作镜像 1055.8实现容器指定环境变量运行 1175.8.1修改runCommand 1175.8.2修改Run函数 1175.8.3修改NewParentProcess函数 1185.8.4修改mydocker exec命令 1195.9小结 121第6章容器网络1226.1网络虚拟化技术介绍 1226.1.1Linux虚拟网络设备 1226.1.2Linux路由表 1246.1.3Linux iptables 1266.1.4Go语言网络库介绍 1276.2构建容器网络模型 1286.2.1模型 1286.2.2调用关系 1306.3容器地址分配 1376.3.1bitmap算法介绍 1386.3.2数据结构定义 1386.3.3地址分配的实现 1406.3.4地址释放的实现 1426.3.5测试 1426.4创建Bridge网络 1446.4.1Bridge Driver Create实现 1446.4.2Bridge Driver初始化Linux Bridge流程 1446.4.3Bridge Driver Delete实现 1486.4.4测试 1486.5在Bridge网络创建容器 1496.5.1挂载容器端点的流程 1506.5.2测试 1566.6容器跨主机网络 1596.6.1跨主机容器网络的IPAM 1606.6.2跨主机容器网络通信的常见实现方式 1616.7小结 163第7章高级实践1647.1使用mydocker 创建一个可访问的nginx容器 1647.1.1获取nginx tar包 1647.1.2构建自己的nginx镜像 1657.1.3运行mynginx容器 1677.2使用mydocker 创建一个??sk + redis的计数器 1697.2.1创建redis容器 1697.2.2制作??sk镜像 1737.2.3创建my??sk容器 1767.3runC 1777.3.1简介 1777.3.2OCI 标准包(bundle) 1777.3.3con??.json 1787.3.4mounts 1787.3.5process 1797.3.6user 1797.3.7hostname 1807.3.8platform 1807.3.9钩子(Hook) 1817.4runC 创建容器流程 1827.5Docker containerd 项目介绍 1867.5.1架构 1877.5.2特性和路线图 1887.5.3containerd和Docker 之间的关系 1887.5.4containerd、OCI和runC之间的关系 1887.5.5containerd和容器编排系统的关系 1897.6Kubernetes CRI容器引擎 1897.6.1什么是CRI 1897.6.2为什么需要CRI 1937.6.3为什么CRI是接口且是基于容器的而不是基于Pod的 1937.6.4如何使用CRI 1937.6.5CRI的目标 1947.6.6已知的问题 1947.7小结 195 上一篇: 模型思考者:您需要知道什么才能使数据为您工作(英文原版) 下一篇: 解忧程序员:高薪编程、求职面试与成长转型宝典