序
我是阿里云容器服务团队的架构师易立,很荣幸为这本书作序。
当显鹭等几位同学跟我谈起他们想写一本介绍如何从头打造一个Docker引擎的书时,我有些担心这样的内容是不是太小众,毕竟绝大多数读者都是Docker的使用者而非开发者。然而读完样章,看到这三位同学笔下翔实的内容,文中透出的热情和自信打消了我的顾虑。
Docker是技术圈中的当红小鲜肉。自从2013年横空出世以来,迅速在开发者社区流行开来。在2016年9月,Docker镜像在Docker Hub的总下载量就已经超过了60亿次,并且以每6周10亿次的速度迅速增长。
大家都知道Docker技术脱胎于Linux Container(LXC)技术,在LXC的发展过程中,IBM、Google、Red Hat、Canonical等技术巨擘做出了众多的贡献。然而,Docker到底有什么魔力,能够在这么短的时间之内就风靡了整个技术圈呢?
Docker公司的创始人兼CTOü Solomon Hykes,有机地把一系列技术Cgroups、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月