Amazon在容器管理服務方面已經完全打敗Microsoft,Azure目前尚不能支持Windows容器管理服務,而AWS的EC2 Container Service已經能夠支持Windows容器——盡管這項測試服務仍然存在一些警告。 Amazon提供了一個CloudFormation模板,用于創建基于Windows的EC2容器集群,用戶只需點擊幾下即可開始使用。Jeff Bar的博客文章聲稱該項服務已準備好“在我們正式投產之前最后完善該項功能的同時容器化和測試Windows應用程序”。
Windows Server 2016在2016年9月發布以來一直支持Docker。在運行容器之前要先激活一項Windows功能,下載Docker runtime,使用基于Microsoft的Windows Server Core的映像或Nano Server映像。 AWS構建了一個自定義的Windows Server機器映像,該映像已配置Docker,并使用CloudFormation模板在EC2中創建虛擬機。 Amazon建議在不同的集群中運行Linux工作負載和容器化的Windows工作負載,但在集群中可以使用Docker Hub或EC2 Container Registry產生的映像。
Windows主機的用戶體驗與現有的基于Linux的平臺相同:容器主機作為EC2虛擬機運行,并使用AWS任務定義來啟動容器。Windows任務定義并不包括所有任務功能,其中某些功能被列為具有未知行為。在網絡堆棧中缺失許多功能,且不支持容器和自定義DNS設置之間的鏈接。
由于這些缺失的功能,以及Windows不支持覆蓋網絡的事實,很大程度上限制了目前AWS中的Windows容器的可用性。如果缺乏覆蓋網絡,在不同主機上運行的容器之間將無法進行通信,因此Web應用程序容器無法把消息發布到消息隊列容器或將數據保存到數據庫容器,除非它們都托管在同一個EC2上。這個局限性將在Windows更新中進行解決,但發布時間尚未公開。在這個問題解決之前,這項服務只能適用于無狀態架構,即其應用程序組件在容器中運行,而使用平臺的其他部分:如 Simple Queue Service進行通信和Relational Database Service進行存儲。
實現覆蓋網絡之后,用戶就能夠在同一個Docker Swarm里在不同的操作系統上運行主機,因此ECS保持集群分離的建議可能會改變。在同一個集群中運行Linux和Windows Docker引擎便于用戶采用混合解決方案,即使用任何堆棧中的最佳技術,并讓平臺在它們之間進行連接。采用分布式解決方案則可以在Linux上使用Nginx容器,代理在Windows容器上運行的完整ASP.NET應用程序,但對所有組件使用相同的ECS基礎架構和管理接口。
Azure容器服務和Google容器引擎目前尚不支持Windows管理容器服務,盡管在它們的云服務中有IaaS選項。 Microsoft提供ARM模板來運行Windows Server 2016 VM。該VM預配置了Docker以及下載到VM上的Windows Server Docker映像。 Google Compute Engine支持在VM上運行的Windows容器,但沒有自定義機器映像,因此用戶需要自行在Windows上配置Docker。
其他公司也開始對Windows Docker進行容器管理服務的研究。 Kubernetes 1.5版本的一個主要功能是支持Windows,DC / OS也聲稱即將支持Windows。隨著Docker和Microsoft之間的商業合作,很可能還將推出一個Windows版本的Docker Datacenter。屆時用戶將有一整套全面的,用于管理內部容器或云服務中的容器的產品可供選擇。
查看英文原文:Amazon's Managed Container Service Adds Support for Docker on Windows