写点什么

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

  • 2015-08-25
  • 本文字数:2500 字

    阅读完需:约 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 读者交流群)。

2015-08-25 19:043627
用户头像

发布了 428 篇内容, 共 177.4 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

netty系列之:在netty中使用proxy protocol

程序那些事

Java 架构 Netty 程序那些事

MACH架构的质量工程指南

俞凡

架构 微服务 云原生

低代码会使初级码农失业吗

秃头也爱科技

分布式监控平台 WGCLOUD v3.4.2 节流 30%,更轻更快

王逅逅

Linux 信创 zabbix Prometheus #运维 性能监测

Meetup预告:SeaTunnel在天翼云数据集成平台的探索实践

Apache SeaTunnel

大数据 技术分享 数据同步 数据集成 Apache SeaTunnel

华为云弹性负载均衡ELB,如何保障服务器不瘫痪?

清欢科技

jvm(三)类加载机制、javac编译

想要飞的猪

JVM类加载

【Ajax】全面详细了解git的基础操作【万字教学+面试常客】

坚毅的小解同志

git 11月月更

“PKS+生态(智方舟)加速营”圆满结束,九科信息与中电智方舟达成战略合作

九科Ninetech

数据仓库实战教程

kingcall

数据仓库 数据湖 数据安全 数仓 数仓建模

华为云企业交换机ESW,让数据业务无缝迁移上云

爱科技的水月

redis 集群实现方案与原理

想要飞的猪

redis哨兵集群 redid集群cluster

第一章三层交换应用

初学者

网络 11月月更

第二章STP应用配置

初学者

网络 11月月更

Java集合与数据类型

kingcall

Java JAVA集合 Java集合框架 java数据类型

华为云Astro的前世今生:用7年时间革新低代码开发观念

科技怪授

Linux 系统启动过程

梦笔生花

Linux Linux驱动 11月月更

在 Spring 生态中玩转 RocketMQ

Apache RocketMQ

RocketMQ spring could

需求收集方法工具,以及进行需求分析的6大要素

爱吃小舅的鱼

深度解读隐语密态计算设备SPU

隐语SecretFlow

机器学习 开源 隐私计算 开源框架 隐语

高标准企业级安全性,华为云会议为线上沟通保驾护航

秃头也爱科技

唯一获奖容器厂商!灵雀云斩获2022信创“大比武”通信赛道大奖

York

容器 云原生 数字化转型 国产化 信创云

真正的按需计费-函数工作流 FunctionGraph实战,5分钟搭建图片压缩应用

秃头也爱科技

2022-11-21:第N高的薪水。表结构和数据的sql语句如下。请问sql语句如何写? DROP TABLE IF EXISTS employee; CREATE TABLE employee (

福大大架构师每日一题

数据库 sql 福大大

中国银河证券:缺少DevOps,企业数字化转型就是带着脚镣跳舞

嘉为蓝鲸

DevOps 数字化转型 金融 证券

Alluxio 2.9新版发布 | 重塑架构,支持大规模多租户环境

Alluxio

分布式 新闻 Alluxio 大数据 开源 数据编排

部署RDS 服务

我叫于豆豆吖.

11月月更

浅谈中小企业进军新媒体行业为何屡次遭受挫败

石头IT视角

【C语言】register 关键字

謓泽

11月月更

打造用户喜爱的产品,离不开需求助推器|影响地图Impact Mapping

老彦

敏捷开发 软件工程 设计思维 用户故事地图 影响地图

前端食堂技术周刊第 60 期:TypeScript 4.9、Ant Design 5.0、用 vanilla-extract 编写高性能的 CSS、Node.js 安全最佳实践

童欧巴

微软发布Windows Server 2016的最新预览版,Docker首次亮相_微软_邵思华_InfoQ精选文章