Docker镜像的核心价值

题图摄于北京中轴线景山:2015第一场雪

最近的几场演讲和技术交流中,有个问题常被问到:既然容器(Container)不是什么新技术,为什么Docker能在短时间内如此风靡世界,得到大家的一致推崇呢?

其实,早在2005年,Sun公司就推出了Solaris Zone,加上Solaris的Resource Management(RM)技术,已经提供了企业级的Container产品。后来出现的Linux namespaces/cgroup基本上与Solaris Zone/RM相当,虽然有LXC等工具,但发布之后也没有大红大紫。Container就象深藏地窖的美酒,一直无人发觉,直到2013年Docker的出现,才真正打开了这个酒坛子,让酒香飘满大街小巷。Docker大行其道的个中原因很多,除了开放技术和云计算普及的大环境外,Docker的一些内在特点是主要原因。

那么Docker带来的核心价值在哪里呢?我们先来看看Docker的含义,除了是公司的名字外,还可指Docker Engine和Docker Registry,分别代表着容器的运行时(runtime)和容器镜像。容器的运行时是依赖Linux的开放API name spaces和cgroup实现的,没有太多隐藏的技术门槛,比较容易开发出来。目前,除了Docker外,还有CoreOS和Pivotal提供容器的运行时。而Docker的容器镜像则不同,它定义了分层的容器封装格式,并提供了镜像的SaaS服务(DockerHub),有成千上万的镜像生成和运行在各种环境中,已经成为事实上的镜像标准。笔者认为,相比可替换的Docker Engine,简单高效的层次镜像格式才是Docker技术的核心所在。下面这张图描述的是Docker容器的生命周期,其中容器镜像的关联箭头最多,不言而喻,镜像技术就是Docker的核心所在。

图片来自Docker网站

业内一些项目的进展似乎也印证了这点。本月初Pivotal 公司发布了企业级PaaS产品PCF v1.6。PCF (Pivotal Cloud Foundry) 是基于开源项目Cloud Foundry的商业版本,在v1.6的新特性里面包括了对Docker容器镜像的支持,用户只要把应用封装在Docker镜像里面,就可以和Buildpack等其他运行时一样在PCF的平台上运行了。需要指出的是,PCF支持的仅是Docker镜像,不是Docker Engine。用户的Docker镜像被挂载到Cloud Foundry自有的容器引擎Garden里,由Garden来运行应用。这里丝毫没有Docker Engine的影子,所以准确的说,PCF应该是“兼容”Docker镜像。

图片来自Pivotal网站

CloudFoundry的容器引擎原来称为Warden,后用Go语言替换Ruby重写后称为Garden。Warden作为Cloud Foundry的一部分,研发和开源时间略早于Docker,但由于缺乏有效的镜像管理方式,加之被埋没在CF项目中毫不显眼,使其被Docker后来居上,最终错失了一统江湖的大好机遇。

虚机化容器是另一种不用Docker Engine而直接使用(兼容)Docker镜像的方式。这类项目包括VMware的vSphere Integrated Containers (Project Bonneville),国内创业公司的Hyper和Intel的Clear Containers。尽管这些项目的实现方式不尽相同,但原理却是共通的:用极简的操作系统内核(约20MB)来启动虚拟机,然后挂接Docker image到虚拟机里面的文件系统,再运行容器封装的应用(下图)。这样做的好处是用虚拟机解决了容器固有的安全性缺陷,又获得与容器近似的启动时间和便捷性,因此虚机化容器在多租户公有云和企业用户中有很大的潜力。这些项目摆脱了Docker Engine甚至Linux Container,直接使用Docker镜像,再次诠释了Docker镜像才是大家的真爱。(关于Project Bonneville可参考文后链接)

回到文首的问题,Solaris Zone虽有强大的ZFS作为container的文件系统,但是缺乏打包和移植容器的有效手段,大大制约其应用范围。Docker能够大获成功,封装应用的镜像格式和配套的SaaS - DockerHub居功至伟。想想Docker的口号:“Build, Ship and Run”,难道不是“Build Images, Ship Images, and Run Images”的缩略语吗?Docker Image实质上获得了容器镜像标准的地位,接下来围绕镜像的各类服务和工具自然成为兵家必争之地。例如Registry服务,除了Docker自家的DockerHub和Docker Trusted Registry产品外,还有Google, CoreOS, AWS, Artifactory等众多竞争对手。大多数面向容器的云服务平台,或多或少都需要对Docker Registry做定制化,Docker镜像解析也是必备的基本能力。容器镜像标准的确立是件好事,就象当初HTTP规范制定后,涌现出许多不同的浏览器和Web服务器一样,势必引领出百花齐放、百家争鸣的新格局,让我们拭目以待吧。

本文已开通评论,欢迎反馈讨论。