您好,欢迎来到聚文网。
登录
免费注册
网站首页
|
搜索
热搜:
磁力片
|
漫画
|
购物车
0
我的订单
商品分类
首页
幼儿
文学
社科
教辅
生活
销量榜
自己动手写Docker
阿里容器品牌军一线生产实践 从自己动手到Docker深度定制
字数: 269
装帧: 简装
出版社: 电子工业出版社
作者: 陈显鹭 著
出版日期: 2017-07-01
商品条码: 9787121317866
版次: 1
开本: 其他
页数: 212
出版年份: 2017
定价:
¥65
销售价:
登录后查看价格
¥{{selectedSku?.salePrice}}
库存:
{{selectedSku?.stock}}
库存充足
{{item.title}}:
{{its.name}}
加入购物车
立即购买
加入书单
收藏
精选
¥5.83
世界图书名著昆虫记绿野仙踪木偶奇遇记儿童书籍彩图注音版
¥5.39
正版世界名著文学小说名家名译中学生课外阅读书籍图书批发 70册
¥8.58
简笔画10000例加厚版2-6岁幼儿童涂色本涂鸦本绘画本填色书正版
¥5.83
世界文学名著全49册中小学生青少年课外书籍文学小说批发正版
¥4.95
全优冲刺100分测试卷一二三四五六年级上下册语文数学英语模拟卷
¥8.69
父与子彩图注音完整版小学生图书批发儿童课外阅读书籍正版1册
¥24.2
好玩的洞洞拉拉书0-3岁宝宝早教益智游戏书机关立体翻翻书4册
¥7.15
幼儿认字识字大王3000字幼儿园中班大班学前班宝宝早教启蒙书
¥11.55
用思维导图读懂儿童心理学培养情绪管理与性格培养故事指导书
¥19.8
少年读漫画鬼谷子全6册在漫画中学国学小学生课外阅读书籍正版
¥64
科学真好玩
¥12.7
一年级下4册·读读童谣和儿歌
¥38.4
原生态新生代(传统木版年画的当代传承国际研讨会论文集)
¥11.14
法国经典中篇小说
¥11.32
上海的狐步舞--穆时英(中国现代文学馆馆藏初版本经典)
¥21.56
猫的摇篮(精)
¥30.72
幼儿园特色课程实施方案/幼儿园生命成长启蒙教育课程丛书
¥24.94
旧时风物(精)
¥12.04
三希堂三帖/墨林珍赏
¥6.88
寒山子庞居士诗帖/墨林珍赏
¥6.88
苕溪帖/墨林珍赏
¥6.88
楷书王维诗卷/墨林珍赏
¥9.46
兰亭序/墨林珍赏
¥7.74
祭侄文稿/墨林珍赏
¥7.74
蜀素帖/墨林珍赏
¥12.04
真草千字文/墨林珍赏
¥114.4
进宴仪轨(精)/中国古代舞乐域外图书
¥24.94
舞蹈音乐的基础理论与应用
编辑推荐
√ 经阿里云战火洗礼,将容器|Go|新规范和开源项目精密地融为一体。√ 容器编排很好实践与生产环境容器化,是迈向高阶应用的重大课题。√ 理解容器底层实现原理,是攀登效用极限及创造其扩展应用的基石。√ 造轮子可取之义在于知其所以然——全局、脉络、趋势及其特殊性。
内容简介
通过讲解 Docker 使用到的各种底层技术,例如Namespace、Cgroups等来自己一步步动手完成一个简单版本的Docker。在自己动手的过程中,从而对Docker 这个技术有一个整体、细致的了解。能够明白Docker 的原理以及结构,从而加深对目前炽手可热的Docker 技术的理解,方便解决工作中使用Docker 遇到的各种问题。
作者简介
陈显鹭 阿里云不错研发工程师,对Docker有深入研究,是Docker多个项目的Contributor,专注于容器技术的编排与基础环境研究。爱好折腾源代码,热爱开源文化并积极参与社区开源项目的研发。王炳燊 阿里云研发工程师,具有丰富的Linux开发经验,对Docker有深入研究,多次提交Docker Patch。目前从事阿里云容器服务网络方案的设计与实现,专注于容器技术的基础环境研究。秦妤嘉 阿里云不错研发工程师、DevOps工程师,有丰富的容器化持续集成和持续交付开发实战经验,进行过Jenkins源码分析改造和Jenkins插件开发。目前从事阿里云容器服务持续集成和持续交付方案的设计和实现。
目录
目录 章 容器与开发语言………………………………………………………………………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 Linux Namespace 介绍 ………………………………………………………………8 2.1.1 概念 …………………………………………………………………………8 2.1.2 UTS Namespace ………………………………………………………………10 2.1.3 IPC Namespace ………………………………………………………………11 2.1.4 PID Namespace ………………………………………………………………13 2.1.5 Mount Namespace ……………………………………………………………14 2.1.6 User Namespace ………………………………………………………………16 2.1.7 Network Namespace ………………………………………………………… 18 2.2 Linux Cgroups 介绍 ………………………………………………………………… 20 2.2.1 什么是Linux Cgroups ……………………………………………………… 20 2.2.2 Docker 是如何使用Cgroups 的 …………………………………………… 24 2.2.3 用Go 语言实现通过cgroup 限制容器的资源 …………………………… 25 2.3 Union File System …………………………………………………………………… 26 2.3.1 什么是Union File System …………………………………………………… 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 Linux 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.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 实现mydocker ps …………………………………………………………… 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 修改mydocker exec 命令 …………………………………………………… 119 5.9 小结 ………………………………………………………………………………… 121 第6 章 容器网络……………………………………………………………………………… 122 6.1 网络虚拟化技术介绍 ……………………………………………………………… 122 6.1.1 Linux 虚拟网络设备 ………………………………………………………… 122 6.1.2 Linux 路由表 ………………………………………………………………… 124 6.1.3 Linux iptables ………………………………………………………………… 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 Bridge Driver Create 实现 …………………………………………………… 144 6.4.2 Bridge Driver 初始化Linux Bridge 流程 …………………………………… 144 6.4.3 Bridge Driver Delete 实现 …………………………………………………… 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 获取nginx tar 包 …………………………………………………………… 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 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 Docker containerd 项目介绍 ………………………………………………………… 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 Kubernetes CRI 容器引擎 …………………………………………………………… 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引擎的书时,我有些担心这样的内容是不是太小众,毕竟绝大多数读者都是Docker的使用者而非开发者。然而读完样章,看到这三位同学笔下翔实的内容,文中透出的热情和自信打消了我的顾虑。Docker是技术圈中的当红小鲜肉。自从2013年横空出世以来,迅速在开发者社区流行开来。在2016年9月,Docker镜像在Docker Hub的总下载量就已经超过了60亿次,并且以每6周10亿次的速度迅速增长。大家都知道Docker技术脱胎于Linux Container(LXC)技术,在LXC的发展过程中,IBM、Google、Redhat、Canonical等技术巨擘做出了众多的贡献。然而,Docker到底有什么魔力,能够在这么短的时间之内就风靡了整个技术圈呢?Docker公司的创始人兼CTO—Solomon Hykes,有机地把一系列技术CGroup、Namespace和UnionFS整合起来,极大地降低了容器技术的复杂度,简化了开发者用户体验。他敏锐地预测到一旦标准化容器技术最终出现,整个技术行业将会受到怎样深远的影响。Docker公司开源了Docker Engine,定义了一个以容器镜像为标准的应用打包格式;并且建立Docker Hub服务进行镜像分发和协作。这些举措迅速创建了一个良好的社区和合作伙伴生态圈,包含AWS、Google、Microsoft、IBM和国内的众多公司。在短短几年的时间内,Docker几乎成为了容器技术的代名词。“得标准者得天下”,容器底层标准化之争风云再起。2014年底,CoreOS推出rkt容器引擎 ,试图挑战Docker另立标准。Docker在2015年6月宣布成立OCI(Open Container Initiative)组织作为Linux基金会的协作项目,并将其容器标准和runtime参考实现(RunC)贡献出来,旨在围绕容器格式和运行时制定一个开放的工业化标准。这一举措化解了社区在容器标准上的第一次分歧。随着容器技术的快速发展,技术生态逐渐从围绕单机环境构建和运行容器化应用,发展为支持大规模容器编排技术。云平台成为了分布式网络操作系统,而容器成为了“进程”执行单元,可以动态地运行在不同宿主机环境中。其中,Kubernetes、Mesos、Docker 诸强争霸,各有所长。2016 年6 月,Docker 宣布开始在Docker Engine 中内置Swarm mode,这极大地简化了容器编排的复杂性,但也遭到了社区的强烈反对。Google 发起CRI(Container Runtime Interface,容器运行时接口)项目,通过shim 的抽象层使得调度框架支持不同的容器引擎实现。Mesos 推出了Unified Containerizer,以支持Docker 、Appc、OCI 等不同的镜像格式,而无须再依赖Docker Engine。面对这些挑战,2016 年12 月14 日,Docker 公司宣布将Docker Engine 的核心组件Containerd 捐赠到一个新的开源社区,任其独立发展和运营,目标是提供一个标准化的容器runtime,其注重简单、健壮性和可移植性。由于Containerd 只包含容器管理最基本的能力,因此上层框架可以有更大的灵活性来提供容器的调度和编排能力。阿里云、AWS、 Google、IBM 和Microsoft 会作为Containerd 的初始成员,为项目贡献力量。在技术爆发的年代,新技术层出不穷,而快餐式的阅读和了解无法帮助我们梳理和把握发展的脉络。对一些核心技术既要知其然也要知其所以然,这样才能举一反三,对技术趋势建立起自己的理解和判断。了解容器基础知识,可以深入理解容器在进程管理、资源管理、安全隔离等方面与传统方式的不同,也有助于了解容器在网络、存储、安全等方面的特殊性。最好的学习方式莫过于自己亲手实践。计算机界的泰斗 Andrew Tanenbaum 教授为教学而构建了Minix,而这也启发了Linus Torvalds 大神创造了Linux。我们期待同学们能够从本书循序渐进的讲解中学习容器相关的技术细节,深入理解Docker 的底层技术实现,围绕容器技术实现创造性的扩展和应用。易立2017 年1 月前言为什么要写这本书Docker 技术可谓是近年最火热的技术之一,铺天盖地的技术论坛和各种讲座,大家都在分享关于如何容器化及如何使用Docker优化自己运维和开发流程的经验。随着Docker技术的逐渐普及,使用Docker已经不再是一个难题。现在更加重要的是生产环境容器化的最佳实践,另外就是容器的编排框架之争。但是,对于技术人员来说,除去Docker 外表的繁华外,什么是容器,容器到底是怎么创建的,容器底层的技术探秘也是非常重要的。我在2014年开始接触 Docker,经历了从最初的新奇—感叹竟然还有Docker 这样的好工具,到逐渐熟悉Docker的各种功能,尝试在生产环境中使用Docker技术的过程。但是,每每被人问到:“Docker技术到底是怎么实现的呢?”我只能粗粗浅浅地说:“Docker是使用Linux Kernel的Namespace 和 Cgroups实现的一种容器技术。”那么,什么是Namespace,什么是Cgroups,Docker是怎么使用它们的,容器到底是怎么一步步被创建出来的?问到这些,我就会支支吾吾地不知所以。由此可见,了解容器技术的底层技术,然后明白它们是如何工作的,尤为重要,这些才是整个容器技术的基石,掌握了这些基石才能更加容易地向上攀登。单单讲解底层的技术实现细节和源码解读是很枯燥的一件事,一般来说很难有耐心去一点点细读然后揣摩其中的奥妙,这样囫囵吞枣地过一遍技术细节,作用不大。因此,便萌生了写一本《自己动手写Docker》这样的书的想法。本书不去刻意讲解容器技术的细节,用到什么讲解什么,点到为止,更加细节的内容留给读者自己探索。通过阅读本书,可以一步步地去了解容器技术的实现细节,更可以跟着作者一步步地用自己的代码去实现它。本书最大的乐趣莫过于用自己最新了解到的知识去动手实现自己的容器。由此可以进一步打开你进入容器技术社区的大门。本书的内容本书的目的是去引导读者通过学习容器技术的实现细节,一步步去构建一个简单的容器。从这个过程中,了解整个容器技术领域和实现细节。本书注重原理的讲解与实践,每一部分都会有详细的代码解析,力争用最少最精简的代码,帮助读者构建自己的容器。本书的内容主要分为“容器与开发语言”“基础技术”“构造容器”“构造镜像”“构造容器进阶”“容器网络”“高级实践”这7 章。? 容器与开发语言:主要介绍 Docker 的基本功能和特点,并且对后面即将使用的Go 语言做一个简单的介绍。? 基础技术:主要介绍实现容器的底层技术,如Namespace、Cgroups、Union File System。每一小节都会有文字性介绍,并且附有一个简短的小例子程序,介绍在容器上是如何使用这项技术的,方便读者清晰地理解各个技术点在容器上的作用。? 构造容器:使用前面两章介绍的基础技术,构造一个最简单的容器环境,会将整体实现细节及代码解析一点点展现,直接使用前面介绍的基础技术,从而更加有实战感。? 构造镜像: 使用2.3 节介绍的分层文件系统技术,构建一个简单的容器镜像,体现容器镜像的分层思想。? 构造容器进阶:更加贴近真实的容器实现,在原来的基础上,增加更丰富的功能。通过这一章的学习,读者可以更好地了解各种技术是如何整合在一起,去实现容器整体功能的。? 容器网络: 除了实现一个容器环境之外,这一章还会讲解如何使自己的容器和宿主机通信,以及如何让不同的容器之间进行通信,更加贴近真实环境。? 高级实践: 使用自己编写的容器,运行一些通用程序,验证容器的可用性。此外,本章还介绍了目前Docker 使用的容器运行引擎,以及目前容器运行态引擎的概况。适用读者? 希望更加深入地了解容器技术的读者。? 已经使用过Docker,希望探查细节的读者。? Go 语言程序员,了解如何使用 Go 语言来编写自己的容器。? 容器技术爱好者。如何阅读由于本书的定位是自己动手写Docker,侧重于实战,因此仅仅纸面阅读是无法体会所有要点的。所有的源码均托管在github.com/xianlubird/mydocker,您可以在这里下载到本书的所有源码。每一章节都会有一个对应的tag,建议您在阅读书中讲解的同时,也将代码下载下来,在本机尝试运行,了解整个代码的运行流程。我们非常欢迎向本项目提交Pull Request,在阅读思考中不断交流学习。关于勘误由于时间和水平都比较有限,因此本书难免会存在一些纰漏和错误。如果读者发现了问题,请及时与我们联系,我们也会在后面的版本中加以改正,邮箱是xianlubird@gmail.com。非常希望与大家共同学习容器技术。致谢最后,向本书编写过程中给予我们巨大帮助的人们表示诚挚的感谢。感谢女友的支持,没有她包揽所有家务,我不会有大量空余时间编写此书。感谢同事姜继忠和谢瑶瑶对于本书containerd 和Kubernetes 相关章节内容的支持。感谢阿里云容器服务团队在本书编写期间给予的理解与包容。最后,感谢张春雨编辑,是他的帮助与支持才使得本书由一个想法变成了实体,展现给各位读者。陈显鹭
×
Close
添加到书单
加载中...
点此新建书单
×
Close
新建书单
标题:
简介:
蜀ICP备2024047804号
Copyright 版权所有 © jvwen.com 聚文网