Windows 原生 Docker 正式商用

DaoCloud發表於2016-10-13

上圖顯示:Windows 應用已經可以穩定地執行在原生容器管理平臺之上

2016 年 9 月 26 日,微軟 Ignite 技術大會在亞特蘭大舉行,微軟官方正式釋出了 Windows Server 2016。對於廣大 Windows 開發人員和 IT 技術專家來說,Windows 最令人激動的新功能,非「容器」莫屬。而執行在 Windows Server 2016 上的容器,正是由 Docker 公司所驅動。

本篇部落格將詳細剖析這些讓 Docker 容器與 Windows 完美匹配的技術創新點,並嘗試闡述這些成就的重要意義。我們也推薦你看看同期釋出的幾篇部落格,其中一篇講述瞭如何建立你的第一臺 Windows 容器,還有一篇詳細介紹了 Docker 公司和微軟公司為了在 Windows 上支援 Docker 而開展的一系列商業合作。

2013 年,第一版 Docker 正式問世。從那以後的三年間,Docker 發展勢如破竹,徹底改變了 Linux 開發者和運維人員 “構建、交付和執行(build,ship and run)” 應用的方式。如今,Docker Engine 和容器已經可以在 Windows 平臺之上原生使用了,開發者和 IT 專家們也可以在 Windows 平臺應用和基礎架構上,體驗一把 Linux 使用者曾經經歷過的大革新,享受 Linux 使用者曾經享受過的福利:更好的安全性、更高的敏捷性、更優良的便捷性,以及隨時可以把私有應用遷移到雲端之上的靈活性。

而對於那些需要建立和維護 Linux 和 Windows 兩大架構平臺的開發人員和 IT 專家們來說,Docker 執行在 Windows 平臺的重大意義更加不言而喻:現在,Docker 平臺已經可以為 Linux 和 Windows 應用的管理提供一整套工具、API 和映象格式了。隨著 Linux 和 Windows 應用與伺服器不斷地 「Docker 化」,開發者和 IT 專家將能夠通過使用 Docker 技術來管理和改進本地和雲端的複雜微服務部署。

在 Windows Server 之上執行容器

Docker 和微軟已經磨合了兩年,期間開展了一系列的合作——Windows 核心中容器化基元(primitives)越來越多,為了充分利用這些新基元,雙方協力把 Docker Engine 和 CLI 遷移到 Windows 平臺上,Docker 還給 Docker Hub 增加了多架構映象支援。今天 Windows 平臺中正式引入 Docker,正是這兩年合作的結晶。

結果就是,現在在 Windows 平臺上已經可以完美使用強大無比的 docker run 來快速啟動一個完全獨立的新容器了。

核心容器化功能已經整合進所有版本的 Windows Server 2016,在 Win10 的週年更新系統中也有。Windows 原生的 Docker daemon 可以在 Windows Server 2016 和 Win10 系統上執行(雖然 Win10 上只能建立和執行基於 Windows Server 的容器)。

Windows 版的 docker run 和 Linux 版有著一樣的意義:全程式隔離,自帶層級變動支援的沙盒檔案系統(還有 Windows 登錄檔!)。每個容器都只面向一個純淨的 Windows 系統,而且無法介入到系統上的其他程式(不管這個程式是否被容器化了)。

舉個例子,兩個用著不同網路資訊服務(IIS)版本,用著不同 . NET 框架的 Docker 化應用,可以在同一個系統中友好共存,甚至可以在互不影響的情況下,給各自的檔案系統和登錄檔讀寫資料。

容器化之後,Windows IT 專家們可以隔離全部程式,釋出狀態的工件將變得非常穩定,用起虛擬機器來就更加得心應手了,不必擔心在硬體虛擬化過程中產生的資源超支和靈敏度降低。

Linux 上的容器可以用不同的安全檔案執行,Windows 上的容器也與此類似,可以執行以下兩種隔離模式中的一種:

1、Windows Server 容器使用和 Linux 容器一樣的共享核心程式隔離正規化。由於容器作為標準(但是隔離)的程式來執行,所以啟動很快,而資源超支可以降到最低。

2、有了 Hyper-V 隔離,容器一啟動就會生成一個很小的管理程式,容器程式就在這個程式裡執行。雖然啟動速度會稍慢一點,資源佔用也會略有增加,但整體的隔離環境卻會好上不少。

可以通過 docker run 上一個簡單的開關來設定隔離:

只要底層主機能支援所需的隔離模式,任何 Windows 容器映象都能當作一臺 Hyper-V 或伺服器容器來執行,而且一臺容器主機可以一個接著一個地執行這兩者。基於容器的隔離模式,它是不知道容器程式的,而 Docker 控制 API 對於兩種模式而言都是一樣的。

這樣一來,開發者就無需經常為隔離模式操心了,他們只需要用預設的設定就行,或者自己做些方便上手的設定。當 IT 專家需要選擇如何在產品中部署容器化的應用時,隔離模式實實在在地為他們提供了選擇的餘地。

當然了,有一點要注意:儘管 Hyper-V 是支援 Hyper-V隔離的執行時技術,但 Hyper-V 隔離了的容器並不是 Hyper-V 虛擬機器,不能用標準的 Hyper-V 工具來管理。

構建 Windows 容器映象

得益於 Windows 登錄檔和檔案系統的層級改進,docker build 和 Dockerfiles 都能完全支援建立 Windows Docker 映象。下面是一個 Windows Dockerfile 樣例檔案,它是由斯蒂凡·施爾提交給 Node.js 官方 Docker 庫的映象。它能用 docker build 在 Windows 上建立出來:

來看看 PowerShell 是如何用於安裝和啟動 zip 檔案和應用程式的吧:Windows 容器執行遵循 Windows API 的可執行程式。要建立和執行 Windows 容器,你需要一個 Windows 系統。雖然 Windows 和 Linux 上的 Docker 工具、控制 API 和映象格式都是一樣的,Docker Windows 容器不能在 Linux 系統上執行,反之亦然。

還請注意,開始層是 microsoft/windowsservercore。在建立 Windows 容器映象時,開啟 FROMScratch 是沒用的。映象要麼是基於 microsoft/windowsserverco,要麼是基於 microsoft/nanoserver。

Windows Server Core 映象還配有一個近乎完整的使用者態,這個使用者態有各種程式,還有建立在標準 Windows Server Core 安裝上的 DLL。除了 GUI 應用,以及那些需要 Windows 遠端桌面的應用,大部分執行在 Windows Server 上的應用都能被 Docker 化,以最少的誤差,在一個基於 microsoft / windowsservercore 的映象上執行。舉幾個例子:MicrosoftSQL Server, Apache, 網路資訊服務(IIS),以及整個 .NET 框架。

這種靈活性,是以容量的暴增為代價的:microsoft/windowsservercore 映象高達 10 個 G。不過幸好有了 Docker 高效率的映象層級,在實際操作中容量過大並不是什麼大麻煩。任何一臺 Docker 主機只需要拖進底層一次便足矣,任何拖進系統或建立在系統上的映象只不過是在重複利用底層。

另一個底層選項是 Nano Server,這是一款全新的小體積 Windows 版本,帶有一個精簡版的 Windows API。包括 IIS、新版 .NET Core framework,Node.js 和 GO 在內,已經有大量的軟體執行在 Nano Server 上了。而且 Nano Server 基本映象的體積遠小於 Windows Server Core,這意味著它的必備元件更少,保持重新整理所需的表面積也更小。Nano Server 是一個令人激動的成果,不僅因為,作為小型容器的底層,它的建立和 boot 非常快,還因為,它作為一種極小主義作業系統,是為了另一款同樣優秀的,專門執行 Docker 映象和容器的容器主機 OS 而生的——這就是它的偉大之處。

有了 Windows Server Core 和 Nano Server 可供選擇,開發者和 IT 大牛們就可以自由玩轉了,要麼把異彩紛呈的 Windows 平臺應用 “lift-and-shift” 到 Server Core 容器裡,要麼採用 Nano Server 搞綠地模式開發,要麼把整個應用分解成數量更多的小部分,整合進微服務的元件裡。

Docker 目前正與微軟及其社群攜手,在 WindowsServer Core 和 Nano Server 上建立容器映象。Golang、Python 和 Mongo 語言作為正式 Docker 映象,都可以用,更多的 Docker 映象也正在開發之中,而且微軟還維護了一系列非常普及的樣本映象。

總結

今天,Docker Engine 能在 Windows 系統上建立、執行和管理容器,是微軟團隊、Docker 團隊,以及 Docker 社群成員經年累月勞動的成果。Docker 與微軟通力合作,把容器化的福音帶給了 Windows 開發者和 IT專家,我們為此感到無比自豪;讓 Windows 和 Linux 技術能用同一套工具和 API 來建立、交付和執行應用,我們也為此感到無比激動。

相關文章