0 0 0

自己动手写Docker.epub

淡定哥
11天前 170
我用夸克网盘分享了「自己动手写Docker.epub」,点击链接即可保存。打开「夸克APP」在线查看,支持多种文档格式转换。
自己动手写Docker 作者: 陈显鹭/王炳燊/秦妤嘉 出版社: 电子工业出版社 出品方: 博文视点 出版年: 2017-7-1 页数: 212 定价: 65.00元 装帧: 平装 ISBN: 9787121317866

内容简介

本书在详细分析Docker所依赖的技术栈的基础上,一步一步地通过代码实例,让读者可以自己循序渐进地用Go语言构建出一个容器的引擎。不同于其他Docker原理介绍或代码剖析的书籍,本书旨在提供给读者一条动手路线,一步一步地实现Docker的隔离性,构建Docker的镜像、容器的生命周期及Docker的网络等。本书涉及的代码都托管在GitHub上,读者可以对照书中的步骤从代码层面学习构建流程,从而精通整个容器技术栈。本书也对目前业界容器技术的方向和实现做了简单介绍,以加深读者对容器生态的认识和理解。 本书适合对容器技术已经使用过或有一些了解,希望更深层次掌握容器技术原理和最佳实践的读者。

作者简介

陈显鹭 阿里云高级研发工程师,对Docker有深入研究,是Docker多个项目的Contributor,专注于容器技术的编排与基础环境研究。爱好折腾源代码,热爱开源文化并积极参与社区开源项目的研发。 王炳燊 阿里云研发工程师,具有丰富的Linux开发经验,对Docker有深入研究,多次提交Docker Patch。目前从事阿里云容器服务网络方案的设计与实现,专注于容器技术的基础环境研究。 秦妤嘉阿里云高级研发工程师、DevOps工程师,有丰富的容器化持续集成和持续交付开发实战经验,进行过Jenkins源码分析改造和Jenkins插件开发。目前从事阿里云容器服务持续集成和持续交付方案的设计和实现。

网友热评

lix7: 很好很薄的一本小册子,按章介绍了容器依赖的namespace(限制可见性)和cgroup(限制配额)技术,然后基于两者实现了docker的基础命令docker run,随后补充了aufs实现(虽然已经弃用了,但overlay2在思想上是一样的)、cmd命令、网络等等特性。最后运行了原生的nginx docker镜像,作为成果展示。全书没有什么废话,全是干货。当看到namespace和cgroup以代码形式一行一行构建起一个可用的容器时,才真正理解了docker是什么。 夜想曲: 容器运行离不开linux namespace与cgroup,以前只知道这个概念,但没见过相应的容器实现代码,也不知道具体是怎样的。读过这本书后,基本懂了。尤其第6章,写得不错,即使对linux网络虚拟化技术不了解,也能很好地读懂容器网络原理。 唯一不足的,就是过于简单,深度过浅,但作为面向go语言初学者或想了解容器大概原理的人来说,也是够了。 软件园的猪: 学docker一方面是学习docker对devops的作用,docker是不可变部署物的最佳形式;另一方面是docker本身的技术,包括namespace隔离、cgroup资源管理、aufs文件系统、bridge网络、封包路由。这本书能够消除对docker技术的很多迷惑。

图书目录

第1章 容器与开发语言………………………………………………………………………1 1.1 Docker………………………………………………………………………………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.2 Go……………………………………………………………………………………5 1.2.1 描述…………………………………………………………………………5 1.2.2 安装Go………………………………………………………………………6 1.2.3 配置GOPATH………………………………………………………………6 1.3 小结…………………………………………………………………………………7 第2章 基础技术………………………………………………………………………………8 2.1 LinuxNamespace介绍………………………………………………………………8 2.1.1 概念…………………………………………………………………………8 2.1.2 UTSNamespace………………………………………………………………10 2.1.3 IPCNamespace………………………………………………………………11 2.1.4 PIDNamespace………………………………………………………………13 2.1.5 MountNamespace……………………………………………………………14 2.1.6 UserNamespace………………………………………………………………16 XII自己动手写Docker 2.1.7 NetworkNamespace…………………………………………………………18 2.2 LinuxCgroups介绍…………………………………………………………………20 2.2.1 什么是LinuxCgroups………………………………………………………20 2.2.2 Docker是如何使用Cgroups的……………………………………………24 2.2.3 用Go语言实现通过cgroup限制容器的资源……………………………25 2.3 UnionFileSystem……………………………………………………………………26 2.3.1 什么是UnionFileSystem……………………………………………………26 2.3.2 AUFS…………………………………………………………………………27 2.3.3 Docker是如何使用AUFS的………………………………………………27 2.3.4 自己动手写AUFS……………………………………………………………34 2.4 小结…………………………………………………………………………………37 第3章 构造容器………………………………………………………………………………38 3.1 构造实现run命令版本的容器……………………………………………………38 3.1.1 Linuxproc文件系统介绍……………………………………………………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.1 busybox………………………………………………………………………59 4.1.2 pivot_root……………………………………………………………………60 4.2 使用AUFS包装busybox……………………………………………………………63 4.3 实现volume数据卷…………………………………………………………………67 4.4 实现简单镜像打包…………………………………………………………………75 4.5 小结…………………………………………………………………………………77 第5章 构建容器进阶…………………………………………………………………………78 5.1 实现容器的后台运行………………………………………………………………78 5.2 实现查看运行中容器………………………………………………………………82 5.2.1 准备数据……………………………………………………………………82 5.2.2 实现mydockerps……………………………………………………………87 5.3 实现查看容器日志…………………………………………………………………90 5.4 实现进入容器Namespace…………………………………………………………93 5.4.1 setns…………………………………………………………………………94 5.4.2 Cgo……………………………………………………………………………94 5.4.3 实现命令……………………………………………………………………94 5.5 实现停止容器………………………………………………………………………100 5.6 实现删除容器………………………………………………………………………104 5.7 实现通过容器制作镜像……………………………………………………………105 5.8 实现容器指定环境变量运行………………………………………………………117 5.8.1 修改runCommand……………………………………………………………117 5.8.2 修改Run函数………………………………………………………………117 5.8.3 修改NewParentProcess函数………………………………………………118 5.8.4 修改mydockerexec命令……………………………………………………119 5.9 小结…………………………………………………………………………………121 第6章 容器网络………………………………………………………………………………122 6.1 网络虚拟化技术介绍………………………………………………………………122 6.1.1 Linux虚拟网络设备…………………………………………………………122 6.1.2 Linux路由表…………………………………………………………………124 6.1.3 Linuxiptables…………………………………………………………………126 6.1.4 Go语言网络库介绍…………………………………………………………127 6.2 构建容器网络模型…………………………………………………………………128 6.2.1 模型…………………………………………………………………………128 6.2.2 调用关系……………………………………………………………………130 6.3 容器地址分配………………………………………………………………………137 6.3.1 bitmap算法介绍……………………………………………………………138 6.3.2 数据结构定义………………………………………………………………138 6.3.3 地址分配的实现……………………………………………………………140 6.3.4 地址释放的实现……………………………………………………………142 6.3.5 测试…………………………………………………………………………142 6.4 创建Bridge网络……………………………………………………………………144 6.4.1 BridgeDriverCreate实现……………………………………………………144 6.4.2 BridgeDriver初始化LinuxBridge流程……………………………………144 6.4.3 BridgeDriverDelete实现……………………………………………………148 6.4.4 测试…………………………………………………………………………148 6.5 在Bridge网络创建容器……………………………………………………………149 6.5.1 挂载容器端点的流程………………………………………………………150 6.5.2 测试…………………………………………………………………………156 6.6 容器跨主机网络……………………………………………………………………159 6.6.1 跨主机容器网络的IPAM……………………………………………………160 6.6.2 跨主机容器网络通信的常见实现方式……………………………………161 6.7 小结…………………………………………………………………………………163 第7章 高级实践………………………………………………………………………………164 7.1 使用mydocker创建一个可访问的nginx容器……………………………………164 7.1.1 获取nginxtar包……………………………………………………………164 7.1.2 构建自己的nginx镜像………………………………………………………165 7.1.3 运行mynginx容器…………………………………………………………167 7.2 使用mydocker创建一个flask+redis的计数器…………………………………169 7.2.1 创建redis容器………………………………………………………………169 7.2.2 制作flask镜像………………………………………………………………173 7.2.3 创建myflask容器……………………………………………………………176 7.3 runC…………………………………………………………………………………177 7.3.1 简介…………………………………………………………………………177 7.3.2 OCI标准包(bundle)………………………………………………………177 目录XV 7.3.3 config.json……………………………………………………………………178 7.3.4 mounts………………………………………………………………………178 7.3.5 process………………………………………………………………………179 7.3.6 user……………………………………………………………………………179 7.3.7 hostname……………………………………………………………………180 7.3.8 platform………………………………………………………………………180 7.3.9 钩子(Hook)………………………………………………………………181 7.4 runC创建容器流程…………………………………………………………………182 7.5 Dockercontainerd项目介绍…………………………………………………………186 7.5.1 架构…………………………………………………………………………187 7.5.2 特性和路线图………………………………………………………………188 7.5.3 containerd和Docker之间的关系…………………………………………188 7.5.4 containerd、OCI和runC之间的关系………………………………………188 7.5.5 containerd和容器编排系统的关系…………………………………………189 7.6 KubernetesCRI容器引擎……………………………………………………………189 7.6.1 什么是CRI…………………………………………………………………189 7.6.2 为什么需要CRI……………………………………………………………193 7.6.3 为什么CRI是接口且是基于容器的而不是基于Pod的…………………193 7.6.4 如何使用CRI………………………………………………………………193 7.6.5 CRI的目标…………………………………………………………………194 7.6.6 已知的问题…………………………………………………………………194 7.7 小结…………………………………………………………………………………195

自己动手写Docker.epub"网盘下载"

版权说明

1、本站不保存、不存储任何实质资源,以上二维码指向为网盘资源链接,其内容归对应版权方所有
2、如有侵犯版权的情况,请点击下面举报/反馈按钮反馈或发送邮件[email protected]投诉说明情况
3、我们核实后将第一时间删除相关页面内容,谢谢理解和配合

这些人下载过 (12)
  • 难忘记
  • Queen(魅眸)
  • Outlier局外人
  • 你要我怎么样
  • 别忘了最初的自己
  • 今朝酒醒不归处
  • 与梦伴
  • 却把我丢在某日某夜某街
  • 路过四月桃林
  • 不讲究
  • 鞋里住着风
  • 怎耐
最新回复 (0)

    暂无评论

请先登录后发表评论!

返回
请先登录后发表评论!