微信号:infoqchina

介绍:有内容的技术社区媒体

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

2015-08-28 08:09 邵思华 译



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上使用了,例如Dockerfile与docker build命令。


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


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


每日快读


『 Imba:一个新的Web开发语言


Imba是一种新的Web编程语言,用它编写的代码可以编译成高性能和可读的JavaScript。根据其官网中的介绍,它在语言层次上支持对DOM节点的定义、扩展、继承、实例化和渲染。在一些较复杂的应用程序中,例如TodoMVC,通过使用更少的代码和一个更小的库,其速度超过React20倍以上。在Imba的官网上,列举了它的几个突出特点,包括:高的可读性、高兼容性、类与作用域、标签、循环\推导式等。


对于一门新的编程语言,Imba引起了用户广泛的兴趣,在Hacker News上,已经有很多用户展开了广泛讨论,有用户将Imba与其他的语言(如React)进行了简单比较,觉得Imba有一个很棒的编程框架,而且运行很快,总体上是一门非常cool的编程语言。


简讯来源InfoQ网站,关于Imba语言具体解读

可点击“阅读原文”了解



今日文章推荐


干货 | 腾讯游戏如何使用Docker?

Swift:Objective-C未死

移动|移动测试的过去、现在、未来

前端|如何成为一名优秀的WEB前端开发者?

全栈Web开发|Neo4j实战案例解码

投稿请联系:

邮箱:editors@cn.infoq.com QQ:1073600161

版权归属InfoQ,禁止私自抄袭转载。

回复关键词React | 架构师 | 运维 | 云 | 开源 | 物联网 | Kubernetes | 架构 | 人工智能 | Kafka | Docker | Netty | CoreOS | QCon | Github | Swift | 敏捷 | 语言 | 程序员


 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 Android中插件开发篇之—-类加载器 Android 面试要点 网易漫画Swift混编实践 微软发布IE10/11紧急安全公告2963983 漏洞可远程执行代码 跟我一起学Spring 3 (3):使用Spring开发第一个HelloWorld应用