Amazon 的容器管理服务增加了对 Windows Docker 的支持

  • Elton Stoneman
  • Alina

2017 年 2 月 6 日

话题:AWSAzureDevOpsKubernetes

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 HubEC2 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 版本的一个主要功能是支持 WindowsDC / OS 也声称即将支持 Windows。随着Docker 和 Microsoft 之间的商业合作,很可能还将推出一个 Windows 版本的Docker Datacenter。届时用户将有一整套全面的,用于管理内部容器或云服务中的容器的产品可供选择。

查看英文原文Amazon's Managed Container Service Adds Support for Docker on Windows


感谢刘志勇对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

AWSAzureDevOpsKubernetes