本文讲的是Docker开源组件:HyperKit、VPNKit和DataKit介绍,【编者的话】Anil Madhavapeddy是Docker的技术大拿,也在Cambridge University计算机实验室任教。Anil是Xen Hypervisor最初开发者,现在正在做unikernel方面工作。Anil曾经在NetApp、XenSource、Citrix、Intel和NASA工作过。他是开源OpenBSD操作系统最活跃贡献者。
我们已经在Mac和Windows系统上做了很多内置Docker支持工作,这样让各个操作系统之上的Docker使用习惯可以无缝切换。Mac和Windows上的Docker已经做到可以和Linux Docker容器一样,将存储和网络高效桥接入Docker容器,而不需要任何第三方软件的帮助。
Docker完全基于开源基金会(Solomon Hykes在OSCON 2016做了主题演讲,介绍了Docker与开源之间的发展史),今天,我们将支持Mac和Windows桌面应用的Docker核心技术也贡献给了开源社区。
Mac和Windows版本的Docker技术包括硬件虚拟化,嵌入式操作系统和unikernel技术,用户之前并未有这种体验。我们来仔细研究一下源码是怎么工作的,这样用户可以更好将其用于自己的项目或者贡献自己的代码。
在Mac上运行Docker,会运行一个轻量级hipervisor(独立运行的嵌入式linux实例),其中包含最新稳定版本Docker引擎。跟其他hypervisor不同,因为内置Hypervisor框架(从OSX10.10开始引入),它不需要admin优先权。Docker应用也内置支持Docker VM网络和存储的库,它们在Linux和OSX/Windows之间提供只能交互。
今天,我们很高兴发布这些开源组件,我们将它们应用到Mac和Windows下的Docker,这些新组件包括:
为了开发Mac和Windows下Docker,每个组件包可以单独使用也可以组合使用。这只是开始:随后我们还会开发其他成熟组件(例如:文件系统框架),其中一些组件包括:HyperKit、DataKit和VPNKit。
HyperKit
HyperKit是一种轻量级虚拟化方法,基于MacOSX10.10之后引入的Hypervisor框架。HyperKit应用可以利用硬件虚拟化运行VMs,但是并不需要特殊权限或者复杂管理工具栈。
HyperKit是基于xHyve和vHyve项目,与其他相关功能模块(例如:VPNKit和DataKit)合作使得运行更加有效。由于HyperKit架构与库之上,因此将其和unikernel库连接起来就显得很直接。例如,我们可以通过使用MirageOS QCow库(用OCaml编写),加入持久化块设备支持。
用户可以贡献什么?
有几个重要方面:
- 支持更多客户机操作系统。Linux是目前唯一支持的操作系统。FreeBSD可以启动,但是需要运行安装器因此不是无缝的。为了启动Windows,OpenBSD 或 NetBSD必须打补丁加入更多BIOS支持,而且需要更细致的测试。
- 支持更多高级语言绑定。因为HyperKit以库形式表现,可以使用标准外界功能接口跟高级语言整合。
- Hypervisor功能。某些传统hypervisor功能,例如睡眠、恢复,实时硬件性能计数器重定位并不被支持。为了保证HyperKit轻量级和易于嵌入,这些功能可以以库方式加进来。
我们会确保贡献者被很好组织,他们调教代码会被很好整合到上游项目。
用户还可以做什么?
需要启动特殊或者短时虚机的应用都可以从HyperKit中获益,例如像Linux的传统操作系统,或者某些unikernel项目。
DataKit
DataKit是与Git兼容文件系统相协调的工具包。它重用了UNIX管道概念和Plan9 9P协议,同时使用了树结构流数据而不是裸文本。DataKit使得用户通过使用简单脚本与复杂文件系统,可以在松耦合进程之间定义复杂工作流。
DataKit是围绕数据流重建的应用架构,借用Plan9的“everything is a file”概念,在git时代提出了 “everything is a versioned file”的概念。因为在Mac和Windows下的Docker中大量使用DataKit和9P, 我们也开源了go-p9p项目,它是一个现代的,用于Go环境的永久9P库。
用户还可以做什么?
如下是用DataKit创建CI(持续集成)系统的例子,只有50行脚本:github.com/docker/datakit/tree/master/ci。
README也介绍了如何将DataKit于Github整合。DataKit可以用于任何需要在数据(版本数据)之间协调的场景。
用户可以贡献什么?
DataKit中对Github PR的支持还很原始,非常需要更多贡献。DataKit可以被用于很多场景,欢迎分享用户自己的项目。
VPNKit
VPNKit是在裸Ethernet网络流量和MacOSX/Windows各自socket之间传输数据的网络库。基于MirageOSTCP/IP unikernel栈,是用OCaml编写的库。 如果需要在user-space内对网路进行粒度控制,VPNKit将会非常有用,另外还可以很方便用高级语言扩展。
用户可以贡献什么?
VPNKit提供了Mac和Windows下Docker容器之间网络交互点,可以用贡献的抓包和监控的方法扩展,将特定包模式通过proxy协议转发到过滤器进行过滤,或者通过HTTP协议可视化用于web应用排错。
用户还可以做什么?
如果VPNKit支持更多端点(endpoint)类型,那么它也可以用于测试网络流量,而不会真正产生或者发送数据造成压力。也可以在应用之间创建轻量级overlay网络。
下一步
VPNKit和DataKit为Mac和Windows下Docker提供了特殊模块,开源他们也许可以带来更多惊喜。这种说法并不是互斥的,我们更希望听到大家自己的项目。在各自项目中,可以记下各自bug。
如果在OSCON,可以在我们的会议上与相关项目维护者见面,可以通过如下链接找到关于Mac和Windows下Docker的演讲报告:slides for the talk I gave yesterday at OSCON。
如果不在场,可以注册使用Docker for Mac and Windows beta ,将使用反馈发还给我们。最后,我们队所有在开源此项目中的共享着表示感谢。
原文链接:Improving Docker with Unikernels: Introducing HyperKit, VPNKit and DataKit(翻译:杨峰)
原文发布时间为:2016-05-22
本文作者:hokingyang
本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:Docker开源组件:HyperKit、VPNKit和DataKit介绍