微軟在2016年的Ignite技術大會上正式發佈了Windows Server 2016,其中的容器服務已經能夠做爲生產環境使用。這意味着Windows 內置的容器服務正式進入了你們的視野,雖然以前咱們已經有了Docker for Windows,可是在這篇文章中咱們要聊的並非運行在Windows上面的Linux虛擬機裏面的容器,而是原生的Windows容器。linux
Windows 提供2種類型的容器運行時模型。其中,Windows Server Container 與你們所熟悉的Linux Contianer容器模型一致,容器與底層操做系統共享內核,因此它們會很輕量並且運行迅速。當你在容器中啓動一個進程的時候,這個進程實際上運行在宿主機上,你可使用任務管理器或者Powershell 命令 Get-Process 獲取到這個進程的信息。nginx
Hyper-V Contianer則是一種全新的容器運行時模型,它將在宿主機上啓動一個很小的虛擬機,因此容器將具有本身獨立的操做系統內核。當你在Hyper-V Container中啓動進程的時候,宿主機對這個進程是無感知的。Hyper-V Container提供了更好的隔離性,並且這個虛擬機被裁減得很是小,因此性能仍然會不錯。在Windows Server 2016上,你能夠在2種不一樣的運行時之間選擇;而Windows 10上雖然也提供了容器服務,可是隻能運行Hyper-V Contianer。docker
不管是哪一種運行時,你均可以使用標準的Docker命令行進行操做,同時容器鏡像的格式也和Linux容器鏡像保持一致。這意味着Windows Container 能夠經過 docker hub 分發,你以前在Linux容器上的經驗積累也能夠被繼承到Windows容器上。shell
不少朋友都問過這個問題:我是否是能夠在Windows容器服務中運行Linux應用,或者反過來。Docker很厲害,但還木有辣麼厲害。你沒法在Windows上直接運行Linux進程,一樣你也沒法在Windows Container中運行Linux進程。這個狀況對於以上提到的2中運行時都適用,不管哪一種運行時模型,底層操做系統都是Windows,因此你沒法運行Linux進程。windows
這一樣意味着,當前Docker Hub上面的大量鏡像沒法在Windows Container 中使用。微軟已經開始在Docker Hub上提供Windows容器鏡像,你可使用一樣的docker pull命令或者去這些鏡像。好比:microsoft/windowservercore 鏡像是一個完整的服務器鏡像(大概3G大小),在這個鏡像中你可使用標準的msi安裝包,經過Dockerfile來構建你本身鏡像,能夠安裝和運行完整的.net framework和其餘的Windows應用程序。microsoft/nanoserver 鏡像則是一個精簡版的操做系統鏡像(大概300M),不提供msi支持,只能運行.net core應用,同時須要使用powershell進行管理。bash
雖然微軟在過去的幾年中變得愈來愈開放,可是Windows和Linux仍然是2個徹底不一樣的操做系統,咱們看到了bash for windows,也看到 powershell on linux,但其中的界限仍然存在。具微軟在Ignite大會上提供的信息,將來也許能夠經過Hyper-V Container提供在Windows上運行Linux Container的支持,可是如今暫時還作不到。服務器
Swarm是Docker提供的容器編排平臺,從1.12版本開始,任何的服務器節點均可以加入Swarm集羣,這一樣適用於Windows服務器。所以,你能夠在一個Swarm集羣中混合部署Windows和Linux節點,雖然不一樣的操做系統節點上只能運行對應的容器,可是它們均可以經過swarm network進行通信,構建一個完整的應用。微信
對於微服務拆分來講,能夠構建跨平臺的分佈式應用很是具備吸引力。若是你的應用如今是一個傳統的asp.net單體應用,你能夠先採用microsoft/windowservercore鏡像對整個單體應用進行容器化部署,而後逐步的將其中的某些組件進行拆分,使用microsoft/nanoserver上的.net core來運行這些微服務組件,你甚至能夠引入nginx做爲你的反向代理服務器,並將其運行在linux服務器節點上。asp.net
混合的Docker Swarm集羣爲你提供了更佳的微服務拆分路徑,並在拆分過程當中提供了更靈活的跨平臺選擇,這對於任何的團隊都很是具備吸引力。運維
若是你到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 提供商業化的容器鏡像分發服務,這些鏡像則都是收費的。
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技術,具備很強的實戰意義。