Windows Container 和 Docker:你需要知道的5件事

北京的201個藍天發表於2017-02-10

微軟在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。

windows-container-1

無論是哪種執行時,你都可以使用標準的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-container-2

雖然微軟在過去的幾年中變得越來越開放,但是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伺服器節點上。

windows-container-3

混合的Docker Swarm叢集為你提供了更佳的微服務拆分路徑,並在拆分過程中提供了更靈活的跨平臺選擇,這對於任何的團隊都非常具有吸引力。

4. Windows Container的授權方式將跟隨所執行的作業系統而定

如果你到Docker Hub上檢視微軟的windows server core和nano server容器映象,你會注意到說明中都帶有授權說明(EULA)。按照其中的說明,容器將隨所執行的作業系統授權,也就是說根據你使用伺服器版本而定,如:DataCenter或者Standard版本。

windows-container-4

上圖是我在微軟官方的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研發運維一體化的資訊

qrcode_for_gh_b7c158df1fd1_430

基於Docker的DevOps實戰培訓】是由徐磊老師主講的三天封閉式課程,地點北京,時間2017年03月24-26日。課程結合了徐磊老師多年來在DevOps上的實踐經驗和Docker技術,具有很強的實戰意義。

http://devopshub.cn/2017/01/16/docker-devops-training/

 

相關文章