BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

微软发布Windows Server 2016的最新预览版,Docker首次亮相

| 作者 邵思华 关注 3 他的粉丝 发布于 2015年8月26日. 估计阅读时间: 8 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

Windows Server上首次出现Docker的身影

本周早些时候,负责微软Azure业务的CTO Mark Russinovich在Azure博客上发表了一篇文章“Docker、Windows and Trends”。在文章中,Mark简要地回顾了容器技术的概念以及容器与虚拟机相比的巨大优势、Docker的发展、新版本Windows Server对容器的支持、如何使用编排工具,以及Azure Service Fabric服务对微服务架构的支持等等。

这篇文章刚一发布,就有读者猜测它很可能是为即将发布的Windows Server 2016的第3个技术预览版进行“预热”。果不其然,仅仅两天之后,“红衣教主”Scott Gu就宣布Windows Server 2016最新版本的发布,新版本中不出意料地加入了对Docker技术的支持,即Windows Server Containers的第1个预览版本。

微软近年来与Docker的密切合作可谓有目共睹,坊间还一度流出微软将收购Docker的传闻。在去年六月的首届DockerCon大会上,微软就展示了如何在Azure中创建与维护Docker的体验。但直至目前为止,Azure上的Docker主机仅能够运行在Linux虚拟机上。在Azure上运行Linux,额……听起来总是有点古怪。不过就在去年十一月,微软宣布了在Windows Server上实现容器技术的计划,承诺为Windows开发者带来与Linux平台上相同的Docker应用体验。如今,随着Windows Server 2016新版本的发布,Windows开发者终于也能够体会到Docker这一利器对于开发以及部署所带来的巨大好处了。

作为对微软发布Windows Server Containers的响应,Docker也在其技术博客中表示将在Docker Engine中提供对Windows平台的支持,并推出了一个针对Windows的Docker Engine的预览版。而早在今年四月,Docker就推出了一个Windows版本的Docker客户端工具。对于已经熟悉在Linux平台上使用Docker的开发者与运维人员来说,可以将他们的经验无缝地带到Windows平台上。

三种部署方式

随着新版本Windows Server 2016的发布,微软也很快地为Visual Studio推出了一项支持Docker部署的工具,其实在今年的DockerCon大会上,Mark就在第2天的主题演讲中为听众演示了如何使用Visual Studio进行部署的体验。熟悉Visual Studio的开发者应该可以很快地上手,通过它可以自动在Azure平台上创建与配置容器主机,随后创建一个包含应用程序的容器镜像,并发布到容器主机中。所有这一切操作都可以直接在IDE中完成,不过这一工具目前只支持最新的Visual Studio 2015版本。

此外,开发者也可以选择直接在Azure Marketplace中部署一台已预先配置了容器特性,并且安装了Docker Engine的Windows Server 2016虚拟机,可以参考一下这个快速教程与视频。当容器主机启动之后,就可以按照教程中介绍的步骤,通过Docker及PowerShell创建和管理容器。

除了在Azure中部署容器之外,开发者也能够在本机以通过Hyper-V创建虚拟机的方式作为容器的主机,为了简化配置过程,微软在GitHub上提交了一些PowerShell脚本,使配置过程尽量实现自动化。

两种类型的容器

在Windows Server 2016中,微软预计将提供两种类型的容器,即此次发布的Windows Server Containers及即将在不久之后的预览版本中出现的Hyper-V Containers。这两种类型的窗口可以使用相同的Docker API与客户端进行部署,并且Windows容器包可以运行在任何一种容器中,因为它们所使用的Windows内核功能是相同的。而由于Linux容器的实现依赖于主机内核的Linux API功能,因此无法在Windows Server主机上运行Linux容器,反之亦然。但可以通过使用相同的Docker客户端管理这些不同平台的容器。

那么这两种容器的差别何在呢?Windows Server Containers会在主机与多个容器之间共享操作系统,由于它们共享了大量的数据与API,应用程序就有可能在有意或无意之间脱离运行中容器的束缚,或是造成主机与其它容器的拒绝服务。因此这种类型的容器比较适用于运行可信应用程序的场景,这种信任包括操作系统与应用程序,以及多个应用程序之间。也就是说,主机操作系统与应用程序处于同一个可信边界之内。如果所部署的应用属于多容器应用、或是组成一个大型应用的一部分、以及来自同一个组合的应用,那么就可以选择这种容器。

与之相对的是,在某些情况下,你希望在同一台主机中为所运行的应用程序设置不同的可信边界。假设你的应用是一种为多个客户服务的SaaS应用(例如Salesforce),并允许每个客户通过编写自己的代码扩展应用的功能,这种情况下,你肯定不愿意让某个客户的自定义代码影响到其他的用户,或是获取其他用户的数据。这样一来,就需要用到Hyper-V Containers,它的做法与传统的容器化略有不同,每个容器都将获得Windows核心的一份拷贝,并且将直接为其分配内存,对CPU、内存与IO等资源进行隔离。这种容器能够实现高级别的隔离性,其代价是启动时间将稍稍延长,并且占用资源较高。

Docker如何移植至Windows Server

来自Docker的高级工程经理Arnaud Porterie也在一篇文章中提到了Docker对Windows Server的支持。他特别指出,这个版本的Windows Server的Docker还没有完成全部特性,但多数Docker命令都可以在Windows Server上使用了,例如Dockerfiledocker build命令。

Docker在Linux上的实现充分地利用了Linux中的一些内核特性,例如命名空间的隔离与cgroups。微软也以类似的方式为Windows内核加入了一些容器化的基本结构,允许用户代码在一个沙盒环境中运行进程。这一功能只限于最新发布的Windows Server 2016。

在Docker的代码中,用于容器执行部分的功能称为execdriver,它在Linux上的默认实现利用了libcontainer,并且很快将依赖于runC的实现。对于Windows容器来说,微软在其架构中集成了一个特定于Windows系统的execdriver的实现,它将通过microsoft/hccshim这个包对Host Compute Service中的内核代码发起调用。


感谢魏星对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

docker by 黄 育杰

docker确实是一枝独秀,至开发出来到现在还没有相似的产品出来.

没看明白 by zhou stone

windows上面装docker,docker镜像可以是windows吗? 我想在Linux的docker中安装windows而不用虚拟机,可以吗?

Re: 没看明白 by wang yi

你对Docker的原理不太理解。Docker不是虚拟机,不能使用不同内核的系统

Re: 没看明白 by zhou stone

你的意思是,docker在windows下,子系统还是windows?这敢情好,可以随意测试安装软件,不怕windows病毒了。

Re: 没看明白 by Shao Tony

Docker实例需要与主机共享内核资源与API,因此无法跨平台,Windows也只支持最新版的2016

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

5 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT