微軟在2016年的Ignite技術大會上正式發布了Windows Server 2016,其中的容器服務已經可以作為生產環境使用。這意味着Windows 內置的容器服務正式進入了大家的視野,雖然之前我們已經有了Docker for Windows,但是在這篇文章中我們要聊的並不是運行在Windows上面的Linux虛擬機里面的容器,而是原生的Windows容器。
1. Windows Container提供2種運行時:Window Server Contianer 或者 Hyper-V Container
Windows 提供2種類型的容器運行時模型。其中,Windows Server Container 與大家所熟悉的Linux Contianer容器模型一致,容器與底層操作系統共享內核,所以它們會很輕量而且運行迅速。當你在容器中啟動一個進程的時候,這個進程實際上運行在宿主機上,你可以使用任務管理器或者Powershell 命令 Get-Process 獲取到這個進程的信息。
Hyper-V Contianer則是一種全新的容器運行時模型,它將在宿主機上啟動一個很小的虛擬機,所以容器將具備自己獨立的操作系統內核。當你在Hyper-V Container中啟動進程的時候,宿主機對這個進程是無感知的。Hyper-V Container提供了更好的隔離性,而且這個虛擬機被裁減得非常小,所以性能仍然會不錯。在Windows Server 2016上,你可以在2種不同的運行時之間選擇;而Windows 10上雖然也提供了容器服務,但是只能運行Hyper-V Contianer。
無論是哪種運行時,你都可以使用標准的Docker命令行進行操作,同時容器鏡像的格式也和Linux容器鏡像保持一致。這意味着Windows Container 可以通過 docker hub 分發,你之前在Linux容器上的經驗積累也可以被繼承到Windows容器上。
2. Windows Container 只能運行 Windows應用程序(至少現在是這樣)
很多朋友都問過這個問題:我是不是可以在Windows容器服務中運行Linux應用,或者反過來。Docker很厲害,但還木有辣么厲害。你無法在Windows上直接運行Linux進程,同樣你也無法在Windows Container中運行Linux進程。這個情況對於以上提到的2中運行時都適用,無論哪種運行時模型,底層操作系統都是Windows,所以你無法運行Linux進程。
這同樣意味着,當前Docker Hub上面的大量鏡像無法在Windows Container 中使用。微軟已經開始在Docker Hub上提供Windows容器鏡像,你可以使用同樣的docker pull命令或者去這些鏡像。比如:microsoft/windowservercore 鏡像是一個完整的服務器鏡像(大概3G大小),在這個鏡像中你可以使用標准的msi安裝包,通過Dockerfile來構建你自己鏡像,可以安裝和運行完整的.net framework和其他的Windows應用程序。microsoft/nanoserver 鏡像則是一個精簡版的操作系統鏡像(大概300M),不提供msi支持,只能運行.net core應用,同時需要使用powershell進行管理。
雖然微軟在過去的幾年中變得越來越開放,但是Windows和Linux仍然是2個完全不同的操作系統,我們看到了bash for windows,也看到 powershell on linux,但其中的界限仍然存在。具微軟在Ignite大會上提供的信息,未來也許可以通過Hyper-V Container提供在Windows上運行Linux Container的支持,但是現在暫時還做不到。
3. 容器編排平台已經可以支持混合部署Windows和Linux服務器節點
Swarm是Docker提供的容器編排平台,從1.12版本開始,任何的服務器節點都可以加入Swarm集群,這同樣適用於Windows服務器。因此,你可以在一個Swarm集群中混合部署Windows和Linux節點,雖然不同的操作系統節點上只能運行對應的容器,但是它們都可以通過swarm network進行通訊,構建一個完整的應用。
對於微服務拆分來說,可以構建跨平台的分布式應用非常具有吸引力。如果你的應用現在是一個傳統的asp.net單體應用,你可以先采用microsoft/windowservercore鏡像對整個單體應用進行容器化部署,然后逐步的將其中的某些組件進行拆分,使用microsoft/nanoserver上的.net core來運行這些微服務組件,你甚至可以引入nginx作為你的反向代理服務器,並將其運行在linux服務器節點上。
混合的Docker Swarm集群為你提供了更佳的微服務拆分路徑,並在拆分過程中提供了更靈活的跨平台選擇,這對於任何的團隊都非常具有吸引力。
4. Windows Container的授權方式將跟隨所運行的操作系統而定
如果你到Docker Hub上查看微軟的windows server core和nano server容器鏡像,你會注意到說明中都帶有授權說明(EULA)。按照其中的說明,容器將隨所運行的操作系統授權,也就是說根據你使用服務器版本而定,如:DataCenter或者Standard版本。

上圖是我在微軟官方的Windows Server 2016授權白皮書上找到的,根據這個說明,你可以在DataCenter上運行無限個Hyper-V Container,而在Standard版本上運行2個;而對於原生的Windows Server Container 則都是無限。
雖然在Docker Hub上的大多數鏡像都是開源軟件,但是開源並不意味着免費。同時Docker也已經開始通過 Docker Store 提供商業化的容器鏡像分發服務,這些鏡像則都是收費的。
5. 是時候開始探索 Windows Container 了
Windows Server 2016已經正式發布了,Windows 10上面的容器服務也已經提供很久了。微軟在過去的幾年中與Docker的合作非常緊密,當前的Docker工具中對Windows Container的支持API也都已經穩定。所以如果你在考慮何時開始容器化你的Windows應用,那么現在就可以開始了。
LEANSOFT與微軟中國合作推出的《UDAD DevOps培訓》在2016年受到了社區的極大關注,我們在北京,上海和深圳分別提供了多場培訓,參訓學員超過上千人。Windows Container一直都是學員們非常關注的內容,在2017年中,我們將推出包括Windows Container在內的多項新培訓內容。首期培訓將在2月份開課,請大家關注我們的微信公眾號。
請關注微信公眾號 【devopshub】,獲取更多關於DevOps研發運維一體化的信息
【基於Docker的DevOps實戰培訓】是由徐磊老師主講的三天封閉式課程,地點北京,時間2017年03月24-26日。課程結合了徐磊老師多年來在DevOps上的實踐經驗和Docker技術,具有很強的實戰意義。
http://devopshub.cn/2017/01/16/docker-devops-training/




