WinDocks是在Windows系统层面上的具有独立端的Docker开源应用。作为前微软工程师,我们致力于改善软件开发人员的工作,在2016年3月我们开源了第一个基于Windows的Docker端。基于社区免费版我们培养了大量相关技术人员。
目前,微软发布了Windows Server 2016,并且支持Windows容器技术,那么许多人就想要详细探究WinDocks与微软的Windows容器到底在实现形式上有什么异同。以下的内容是基于微软SQL Server专业人士的公开演讲,以及对微软Windows Server 2016的容器测试。
供开发和测试的容器
Windows容器与Linux容器带来同样的好处,因此我们希望Windows容器同样成为支持开发,测试和QA的首选基础设施。在不久的将来,容器可以引导持续集成,持续交付,DevOps的增长。
WinDocks容器提高了开发速度与效率,开发人员在一个共享的虚拟机使用隔离容器环境,每个实例化可以控制在秒级别。假设每个开发团队平均使用20个VM,应用容器技术的话,可以共用一个VM。20:1的比例缩减微软服务器许可证可以为Windocks的用户立即提高收益率(也可能不是 Mircosoft容器用户)。
WinDocks vs. Microsoft
内置:微软的容器支持被包含在Windows Server 2016中,而且作为Windows 10专业版和企业版的附加,这就使得客户针对一个供应商提供服务支持。而对于容器本身支持则没有增加成本,他们实际上不一定是免费的。
WinDocks Windows支持:WinDocks对容器支持包括了所有版本的Windows 8、Windows 10、Windows Server 2012、Windows Server 2016,这样为开发人员提供了方便的接入。行业调查显示,客户计划逐步迁移到Windows Server 2016。这表明Windows Server 2012将继续扩大共享使用率到2020年,与Windows Server 2016同期逐渐增长。
SQL Server的支持:WinDocks的成立旨在解决开发人员所需有效的SQL服务器环境。超过80%的组织每月只测试SQL Server两次。WinDocks通过对SQL Server容器和镜像提供自动工作流的方式,来支持SQL Server 2008及以上所有版本的发布。WinDocks利用了微软成熟的DLL共享架构,使当前SQL Server通过容器发布而不变更工具或进程。
Windows Server 2016已经发布,但并没有有效的SQL Server支持。三个月后发布的SQL服务器镜像支持仍局限于SQL Server 2014 Express和SQL Server 2016 Express。其他悬而未决的问题包括缺乏支持SQL Server Management Studio 的Windows身份验证(目前仅限于SQL sa身份验证),以及缺乏IP回环的支持。简言之,微软对SQL Server的支持只能被形容为并不完善。
更大的问题还没有讨论是微软正在为未来的SQL Server容器镜像秘密计划新的SQL Server许可条款。新许可尚未透露,但考虑到减少VM来获取容器,不太可能是“免费”的。
应用程序容器vs. 微软臃肿软件:WinDocks容器通过“guards”容器和实施资源限制提供了用户和进程隔离。这个设计提供了类似于微软的安全服务器核心容器,为企业内提供了可信的工作负载。这个设计并不是为了不可信的多租户使用,这也解释了为什么微软提供hyper-v容器支持。
WinDocks应用级容器比Windows容器更加轻量级。微软容器背负重大的Windows文件,基本镜像平均> 9 GB,而WinDocks平均100 MB。微软容器需要20多额外的进程,而且比WinDocks容器额外多80 MB RAM。WinDocks .net IIS容器使用5 MB的RAM(16倍差),所以系统分级的影响是显著的。如果平均开发团队运行SQL Server和.NET,则微软容器主机需要比WinDocks服务器耗费更多的CPU和RAM!
微软这样的设计同时会导致镜像维护的增加,Windows更新迫使镜像重建(每个镜像包含大量Windows封装)。WinDocks的设计,相比之下,允许独立更新容器镜像。
镜像支持:除了支持所有SQL Server 2008及以上版本,WinDocks还支持Java及之上的Tomcat和Jetty、Nginx、Node.js。正如我们已经指出的那样,微软缺乏镜像支持SQL Server发布的版本,以及Java的Tomcat服务。
其它应用程序支持:微软容器设计的一个优点是能够支持依赖注册表支持的Windows应用程序。WinDocks对SQL Server镜像的支持如何涉及到对Windows注册表的依赖,那么将是一个很大的工程量。微软的设计更好地支持范围广泛的依赖Windows注册表的应用程序。
容器发布:WinDocks利用本地安装.NET和SQL服务器实例来支持创建容器和镜像。这种方法实现起来比较简单高效,而且利用微软成熟的DLL共享架构。这种方法同时使用了现有的主机或基于SQL Server许可的核。当前SQL Server许可允许一个主机上的多个实例,而WinDocks使得这种多实例的使用更加快速和实用。对于开源的镜像,如Nginx,node.js或Java,WinDocks同时包含了可再发行的运行时支持。
微软的容器服务是基于新的设计模式,每个容器等于一个新安装的应用程序,容器镜像则是一个新的安装包。这就解释了微软引入新的许可条款的理由。
其他问题:微软对Windows容器的支持在不断的进步,但在发表这篇文章的时候仍然存在着缺乏支持IP回环,不支持mount,以及不支持SQL Server Management Studio的Windows身份验证。
结论
WinDocks针对现有的系统和发行版本,可以简单的采用、使用和支持。开发人员可以在Windows 8,Windows10,Windows Server 2012,或Windows Server 2016上支持.NET、SQL Server和Java。WinDocks软件目前已经被广泛应用,开发人员平均减少VM使用比例为10:1,大大缩减了在微软许可证上的投入成本。
而相对来说,微软的容器之路并不完善,提供的可伸缩性很有限,这正是运维的痛点,并且其中还存在大量悬而未决的问题。客户如果使用微软的Windows容器应考虑等待新的SQL Server许可镜像,并且需要更多和更强大的系统来支持镜像维护。
本文为翻译文章,点击阅读原文链接即可查看原文。