Docker公司正着手将其容器方案同一类完全不同的应用程序打包方式加以合并——也就是unikernel。
为了实现这项目标,Docker方面收购了来自英国剑桥的初创企业Unikernel Systems公司,后者长久以来一直致力于这方面研发工作。容器王者的计划是利用Docker工作流创建出最小化、按需配置的操作系统,其中包含运行单一特定应用程序所必需的全部功能,且能够运行在任何平台之上——从微型物联网装置到数据中心服务器。
“通过将Docker中为人熟知的工具与可移植优势同下一代unikernel技术的卓越效率及针对性结合起来,”Docker公司在新闻稿中指出,“企业客户将能够拥有一套极为灵活的平台,从而在不受制于任何特定基础设施的前提下实现颁式应用程序的构建、发布与运行。”
简约而不简单
事实上,unikernel技术的设计思路并不复杂:选取一款应用程序,审视其必需的操作系统调用,而后对该应用进行编译并将其需要的操作系统组成部分打包成单一的统一内核当中。
虽然unikernel的构建难度较大,但其二进制镜像在尺寸方面要远远小于应用程序与完整操作系统的打包产物。另外,由于unikernel当中的活动组件更少,因此其攻击面也会相应减小——发生故障的机率亦大大降低。
正如在Docker正式出场之前,容器技术概念已经存在相当长一段时间但却始终未能得到广泛认同,unikernel机制也面临着同样的问题。Xen项目(部分项目成员目前正效力于Unikernel Systems公司)在不久之前创造出了Xen Mirage unikernel系统,这是一套由OCaml语言编写而成的定制化应用程序与操作系统堆栈。而作为另一个unikernel相关项目,IncludeOS则将该操作系统中的各项服务作为库添加到一款C++应用程序当中。
Unikernel能够对应用程序代码以及其运行所必需的操作系统组件进行编译,从而保证该应用拥有恰好必要的运行条件。如此一来,我们就能够获得体积极为小巧的单一、快速启动二进制系统镜像,其攻击面亦相当有限。
更简单的构建途径
那么Docker公司打算如何使用这一技术概念?简而言之:其利用现有Docker工具集以简化在各类Docker支持平台之上将应用程序打包为unikernel的流程。
Docker公司市场营销副总裁David Messina指出,这套方案将为unikernel世界带来“民主化”。根据他的观点,利用Docker的常规工具与工作流进行unikernel构建将“使得unikernel为成千上万已经接纳Docker技术的企业及组织机构所接受。”
根据Unikernel Systems公司CTO Anil Madhavapeddy的说法,这套工作流相当于首先在某套容器中选取应用程序外加配套的配置文件,而后在无需开发人员介入的前提下实现unikernel构建。整个构建过程与应用程序自身所使用的编程语言密切相关,这意味着利用C语言编写的应用程序将拥有完全不同于Java或者OCaml应用的关联性组合。目前对该工作流进行最大程度统一化调整的任务已经基本完成,这意味着我们可以通过同样的流程实现x86与ARM编译。
下一步发展方向
Madhavapeddy还对比了Docker计划采取的构建方式与当前现有unikernel系统的“昂贵、手动”构建模式(例如NetApp的OnTap以及思科的IOS)。
“我们已经确保其针对性倾向能够实际起效,”他指出,同时强调称开发人员也可以通过他们目前常用的各高级API构建低级组件。“Unikernel当中包含大量行之有效的构建组件,不过过去它们一直很难被拼装起来。”
在“为容器匹配量身定做的操作系统”之外,Docker公司给出的下阶段发展方向是利用CoreOS等方案进一步传播这项概念。不过unikernel方案不太可能彻底取代容器技术,正如容器也并不能完全取代虚拟机系统一样。
毫无疑问,如果unikernel真的能够通过略高于容器化应用的构建难度加以实现,那么其将带来极为可观的发展前景。其拥有诸多显著优势,包括允许我们在服务器之上以更高密度运行应用。另外,这也意味着Docker公司将能够以前所未有的方式实现微服务应用模式——例如立足于资源极为有限的客户端环境(也就是物联网装置)。