前言:这篇文章最初由盆盆发表在华来四微信公众号(微信号:sysinternal)。虽然Windows Docker要等到微软Build大会时才能看到实例演示,但这并不妨碍我们利用手头拥有的公开材料对其进行大胆猜测和深入分析。对于盆盆来说,猜测的过程甚至比谜底揭晓更有乐趣!

大家知道,Docker相对虚拟机,属于轻量级应用方案。就好比图中的这个创意便携打印机,不需要把功能封装在笨重的传统打印机里。Windows Docker也是这样,不需要把应用封装在笨重的虚拟机里,以节省资源以及提高性能。

盆盆发表过一篇Windows Docker和Nano Server的文章,您可以在公众号里回复docker6阅读这篇文章(在微信里关注公众号:sysinternal)。

虽然Windows Docker要等到微软Build大会时才能看到实例演示,但这并不妨碍我们利用手头拥有的公开材料对其进行大胆猜测和深入分析。对于盆盆来说,猜测的过程甚至比谜底揭晓更有乐趣!

我们可以从很多公开的资料里猜测Windows Docker技术有可能就是所谓的DrawBridge(虽然微软官方并没有确认),例如以下的公开报道。所以我们的目的就来看看这个DrawBridge到底是什么原理。

http://t.cn/RAN9Y9h

当然猜测归猜测,还必须以事实为准绳。庶不负胡适先生“大胆假设,小心求证”的教导(今年盆盆还拜谒过胡适先生墓)。

那么盆盆用来小心求证的论据是什么?

求证论据

这是微软研究院公开的一篇有关DrawBridge的论文《Rethinking the Library OS from the Top Down》,其PDF文档下载地址如下:

http://research.microsoft.com/apps/pubs/default.aspx?id=141071

这里是公开可以观看的Video:

http://channel9.msdn.com/Shows/Going+Deep/Drawbridge-An-Experimental-Library-Operating-System

以上两个资料都比较老,2011年,针对当时的Windows 7进行原理描述,而且还针对桌面应用(例如Excel进行描述),但是基本道理是不会变动太大的。

理论上来说,桌面应用需要更多的进程间交互,例如Word可能需要通过OLE调用其它Office文档对象等。而服务端的应用之间的交互一般是通过网络来实现(例如虚拟机一般拥有完整的网络栈,以便能支持这种需求)。

大胆分析

视频里提到,类似Excel这样的用户应用程序,其API调用是通过用户模式的ntdll.dll来实现,由ntdll.dll再代为调用内核模式下的OS Kernel相关功能。而类似图形化界面、桌面、剪贴板等,则是通过用户模式下的Windows子系统(例如图中的user32.dll、gdi32.dll和kernel32.dll等),和内核模式下的win32k.sys来完成。

前面所述的PDF文档把传统的OS服务分为3个类别:用户服务、应用服务和硬件服务,用不同的颜色灰度来表示。

视频里提到一个Library OS的概念,相当于给每个进程“包”了一层很薄的"外皮"。其实质是给上述提到的两个重要的内核模式组件win32k.sys和OS Kernel提供了用户模式下的独立副本,其中对应win32k.sys的用户模式副本叫做win32k.dll,而OS Kernel的用户模式副本叫做NTUM(NT Kernel User Mode)。每个Docker进程都有自己独立的Library OS,通过secmon(Secure Monitor)和Host OS内核进行交互。这大概就是其代号"DrawBridge"的由来吧。

和Linux Docker不一样,Windows进程大多数有图形化界面,所以为了对其进行管理,我们可以借助secmon中的RDP服务来实现,参考视频里的截图。这样的话,多个Windows Docker容器,可以通过RDP服务来共享Host上的图形化资源。当然我相信广大微软IT运维人员会越来越喜欢通过PowerShell对应用进行控管。

PDF文档里提到,Library OS所需的代码改动极小,在Windows 7的项目上只消耗了约2个人年的代价。这是一件好事情,越小的代码修改,意味着越稳定。

PDF还提到DrawBridge和虚拟机以及传统进程模式之间的比较。可见DrawBridge相对传统进程所增加的开销非常低,几乎可以忽略不计。

盆盆在前一篇文档里也提到Docker和其他应用封装模式的比较:

Hyper-V Container是怎么回事?

说实在话,盆盆手里也没有什么猛料,只能猜测它是整合了Hyper-V虚拟化和DrawBridge技术的容器。可能更加适合生产环境。既然是可选的部署模式,那么为了适合在Azure和其他Hypervisor上运行,Hyper-V Container必然能支持在虚拟化里的虚拟化(好拗口)。

一切得等待Build大会上的实况演示了。等Build大会过后,华来四会第一时间奉上最新的深入分析。

本文所涉及的Windows内部原理,欢迎大家可以在公众号里回复课程2查看黄爱华老师的精品课程"Windows性能优化与蓝屏诊断"(需要在微信里关注公众号:sysinternal)。

最后请容盆盆得瑟一下,前天花了200大元从网上买了一个可折叠的钢架电脑桌,直接放在空调正下方,避免夏天时被空调直接吹到而引起感冒,等于是降低受攻击面、提高可工作时间。同时可折叠还能节省空间。注意我说的不是Windows Nano Server哈!