自從微軟和Docker宣布合作以來,微軟Redmond一直在容器上面的戰(zhàn)略可謂穩(wěn)扎穩(wěn)打。最近,微軟加入Open Container Initiative (OCI),并作為創(chuàng)始成員承諾支持常見容器的格式和運行。在最新的Windows Server 2016技術(shù)預(yù)覽版中,微軟終于將本地的Windows Container技術(shù)提供給開發(fā)人員和系統(tǒng)管理員。
由于媒體的關(guān)注和用戶的積極反響,對于許多消費者來說,容器就等于是Docker的代名詞。而且它只在Linux上運行。鑒于這些事實,在開發(fā)者社區(qū)里,對于微軟支持容器技術(shù)也一直比較混亂。在不同的博客文章中,微軟強調(diào)其投資容器。微軟高管并不羞于告訴我們他們有多么愛Docker和其背后的團隊。這種定位導(dǎo)致大家對于微軟容器戰(zhàn)略的認識模糊。我不止一次聽到開發(fā)商詢問他們是否可以在Windows上運行Linux容器,反之亦然。在Docker、Windows Containers,以及Hyper-V Containers領(lǐng)域同樣非常混亂,下面我就試圖詳細闡明微軟的容器戰(zhàn)略。
1.微軟的容器策略并不是可移植性
說的直白一點。你不能從Linux中push Docker Image并且pull它到Windows machine來啟動容器。這兩個操作系統(tǒng)之間底層內(nèi)核的差異使它很難讓容器可移植。過去,微軟試圖將一個POSIX兼容UNIX子系統(tǒng)Services for Unix。但是,這不同。回到容器中,你無法使用微軟容器模仿Package once deploy everywhere”。
2.微軟有兩種類型的容器
Microsoft Windows Server 2016能夠運行兩種不同類型的容器Windows Containers 和 Hyper-V Containers.。為什么我們需要兩種類型的容器?因為他們是專為單獨的用例和場景。Windows Server 2016技術(shù)預(yù)覽版3僅僅支持Windows Containers。最終版本將包括兩種。
3. Windows Containers是輕量級和極速的
這種優(yōu)勢保留了容器的優(yōu)勢——速度、敏捷性和性能。這是一個已知的事實,容器比虛擬機啟動快得多。這是因為它們共享底層操作系統(tǒng)的內(nèi)核。微軟為容器設(shè)計Windows Server 2016來支持共享內(nèi)核模型。Windows Containers依賴操作系統(tǒng)共享服務(wù)。這個設(shè)計自然導(dǎo)致更輕、更快的容器。他們非常類似于Linux容器。Windows Containers提供低級隔離,這在一定程度上降低運行異構(gòu)工作負載的安全性。
4. Hyper-V Containers使用虛擬化
如果你認為因為隔離級別,Windows容器不太安全,那么您應(yīng)該考慮Hyper-V Containers。他們不共享操作系統(tǒng)相同的內(nèi)核,因而帶來強壯的隔離級別,類似于虛擬化。在幕后,Hyper-V Containers使用VM在他們自己的namespace運行專用容器。這種架構(gòu)導(dǎo)致更重的容器大小和更長的啟動時間。所以,你還需要使用它們嗎?如果你有敏感的工作負載需要更健壯的隔離和安全,Hyper-V Containers是最好的。在多租戶環(huán)境中像公共云,他們提供最好的安全性和遵從性。
5. Docker Engine暴露兩容器實現(xiàn)
如果微軟有自己的本地容器實現(xiàn),Docker的作用是什么?
讓我們仔細分析Docker的架構(gòu)。
Docker作為一個平臺有三個組件:
1. Docker Engine
2. Docker Tools
3. Docker Registry
Docker Engine在expose API過程中擔當大任。DockerCLI是管理容器生命周期的工具鏈。Docker Registry是存儲圖像的中央位置。
微軟和Docker密切合作從Windows Containers和Hyper-V Containers中提供相同的API。這就使得微軟的容器和Docker的巨大生態(tài)系統(tǒng)彼此協(xié)作,命令行接口也移植到Windows。
6.DockerCLI可用于控制Microsoft Containers和Linux Containers
命令行接口可以在Windows10和Windows Server 2016操作系統(tǒng)上獲取。開發(fā)人員和管理員可以將客戶端指向到一個運行的Docker Engine并且控制它。這意味著它可以從Windows10上管理運行在Red Hat服務(wù)器上的Linux容器。自微軟決定讓它的容器引擎兼容Docker Engine,相同的客戶端被用來管理Windows Containers 以及Hyper-V Containers。從技術(shù)上講,只要CLI能和遠程引擎對接,它也可以從Ubuntu 或者 OS X上管理微軟容器。
7. PowerShell Cmdlets能夠和Microsoft Containers一起使用
除了使用DockerCLI和工具,用戶可以使用自己喜歡的PowerShell環(huán)境來自動化容器管理。微軟已經(jīng)帶來一套Cmdlets處理方Windows 和Hyper-V Containers。這對本地工具和容器的集成有著重要作用。
8.Azure Service Fabric將編排Windows Containers
Azure Service Fabric是微軟對于Kubernetes的對標。這是一個設(shè)計和部署微服務(wù)的平臺。當多個同質(zhì)容器管理和編排在一起,形成一個微服務(wù)應(yīng)用程序。微軟聲稱Service Fabric是Azure核心基礎(chǔ)設(shè)施的基本技術(shù)。目前支持的服務(wù)包括Skype、InTune、Azure Data Factory、Azure DocumentDB。它在Azure SQL Database 和Bing Cortana上被用來管理超過140萬客戶數(shù)據(jù)庫。開發(fā)者能夠?qū)⑺麄兊拇a作為容器打包,將由Service Fabric編排。這種技術(shù)現(xiàn)在就可以在Windows和 Azure上獲取但是將移植到Linux和其他云平臺。
9. Kubernetes 和 Mesosphere可以在Azure上管理容器
Service Fabric服務(wù)可能還處在早期,但這并不能阻止微軟用戶在Azure上使用編排工具Kubernetes和Mesosphere。因為自從Windows Containers, Hyper-V Containers提供相同的DockerAPI,這些工具就可以與微軟容器協(xié)同工作。它可以混合、匹配Linux容器和Windows容器構(gòu)建一個復(fù)合的微服務(wù)應(yīng)用。Docker Swarm, Kubernetes, Mesosphere以及 CoreOS Fleet可能不區(qū)分容器。這對微軟用戶和Docker用戶來說是雙贏。
10.Azure不提供CaaS(至少到目前沒有)
微軟落后于亞馬遜和谷歌的一個主要領(lǐng)域就是容器托管服務(wù)或容器作為服務(wù)(CaaS)。亞馬遜在上一屆re:Invent上宣布EC2 Container Service (ECS),最近已經(jīng)提供這種服務(wù)。谷歌將它專業(yè)的Kubernetes與Google Compute Engine結(jié)合提供Google Container Engine (GKE)。其他平臺如Tutum 和Joyent 也提供CaaS等。微軟也許是等待它的容器技術(shù)穩(wěn)定之后才發(fā)布,當它準備好了,Azure云平臺將成為第一個管理Linux和Windows容器的云平臺。