前言:這篇文章最初由盆盆發表在華來四微信公衆號(微信號:sysinternal)。雖然Windows Docker要等到微軟Build大會時才能看到實例演示,但這並不妨礙咱們利用手頭擁有的公開材料對其進行大膽猜想和深刻分析。對於盆盆來講,猜想的過程甚至比謎底揭曉更有樂趣!docker
你們知道,Docker相對虛擬機,屬於輕量級應用方案。就比如圖中的這個創意便攜打印機,不須要把功能封裝在笨重的傳統打印機裏。Windows Docker也是這樣,不須要把應用封裝在笨重的虛擬機裏,以節省資源以及提升性能。性能優化
盆盆發表過一篇Windows Docker和Nano Server的文章,您能夠在公衆號裏回覆docker6閱讀這篇文章(在微信裏關注公衆號:sysinternal)。微信
雖然Windows Docker要等到微軟Build大會時才能看到實例演示,但這並不妨礙咱們利用手頭擁有的公開材料對其進行大膽猜想和深刻分析。對於盆盆來講,猜想的過程甚至比謎底揭曉更有樂趣!網絡
咱們能夠從不少公開的資料裏猜想Windows Docker技術有可能就是所謂的DrawBridge(雖然微軟官方並無確認),例如如下的公開報道。因此咱們的目的就來看看這個DrawBridge究竟是什麼原理。app
固然猜想歸猜想,還必須以事實爲準繩。庶不負胡適先生「大膽假設,當心求證」的教導(今年盆盆還拜謁過胡適先生墓)。ide
那麼盆盆用來當心求證的論據是什麼?性能
求證論據優化
這是微軟研究院公開的一篇有關DrawBridge的論文《Rethinking the Library OS from the Top Down》,其PDF文檔下載地址以下:ui
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哈!