Windows Container 和 Docker

微软在2016年的Ignite技术大会上正式发布了Windows Server 2016,其中的容器服务已经可以作为生产环境使用。这意味着Windows 内置的容器服务正式进入了大家的视野,虽然之前我们已经有了Docker for Windows,但是在这篇文章中我们要聊的并不是运行在Windows上面的Linux虚拟机里面的容器,而是原生的Windows容器。

1. Windows Container提供2种运行时:Window Server Contianer 或者 Hyper-V Container

Windows 提供2种类型的容器运行时模型。其中,Windows Server Container 与大家所熟悉的Linux Contianer容器模型一致,容器与底层操作系统共享内核,所以它们会很轻量而且运行迅速。当你在容器中启动一个进程的时候,这个进程实际上运行在宿主机上,你可以使用任务管理器或者Powershell 命令 Get-Process 获取到这个进程的信息。

Hyper-V Contianer则是一种全新的容器运行时模型,它将在宿主机上启动一个很小的虚拟机,所以容器将具备自己独立的操作系统内核。当你在Hyper-V Container中启动进程的时候,宿主机对这个进程是无感知的。Hyper-V Container提供了更好的隔离性,而且这个虚拟机被裁减得非常小,所以性能仍然会不错。在Windows Server 2016上,你可以在2种不同的运行时之间选择;而Windows 10上虽然也提供了容器服务,但是只能运行Hyper-V Contianer。

无论是哪种运行时,你都可以使用标准的Docker命令行进行操作,同时容器镜像的格式也和Linux容器镜像保持一致。这意味着Windows Container 可以通过 docker hub 分发,你之前在Linux容器上的经验积累也可以被继承到Windows容器上。

2. Windows Container 只能运行 Windows应用程序(至少现在是这样)

很多朋友都问过这个问题:我是不是可以在Windows容器服务中运行Linux应用,或者反过来。Docker很厉害,但还木有辣么厉害。你无法在Windows上直接运行Linux进程,同样你也无法在Windows Container中运行Linux进程。这个情况对于以上提到的2中运行时都适用,无论哪种运行时模型,底层操作系统都是Windows,所以你无法运行Linux进程。

这同样意味着,当前Docker Hub上面的大量镜像无法在Windows Container 中使用。微软已经开始在Docker Hub上提供Windows容器镜像,你可以使用同样的docker pull命令或者去这些镜像。比如:microsoft/windowservercore 镜像是一个完整的服务器镜像(大概3G大小),在这个镜像中你可以使用标准的msi安装包,通过Dockerfile来构建你自己镜像,可以安装和运行完整的.net framework和其他的Windows应用程序。microsoft/nanoserver 镜像则是一个精简版的操作系统镜像(大概300M),不提供msi支持,只能运行.net core应用,同时需要使用powershell进行管理。

虽然微软在过去的几年中变得越来越开放,但是Windows和Linux仍然是2个完全不同的操作系统,我们看到了bash for windows,也看到 powershell on linux,但其中的界限仍然存在。具微软在Ignite大会上提供的信息,未来也许可以通过Hyper-V Container提供在Windows上运行Linux Container的支持,但是现在暂时还做不到。

3. 容器编排平台已经可以支持混合部署Windows和Linux服务器节点

Swarm是Docker提供的容器编排平台,从1.12版本开始,任何的服务器节点都可以加入Swarm集群,这同样适用于Windows服务器。因此,你可以在一个Swarm集群中混合部署Windows和Linux节点,虽然不同的操作系统节点上只能运行对应的容器,但是它们都可以通过swarm network进行通讯,构建一个完整的应用。

对于微服务拆分来说,可以构建跨平台的分布式应用非常具有吸引力。如果你的应用现在是一个传统的asp.net单体应用,你可以先采用microsoft/windowservercore镜像对整个单体应用进行容器化部署,然后逐步的将其中的某些组件进行拆分,使用microsoft/nanoserver上的.net core来运行这些微服务组件,你甚至可以引入nginx作为你的反向代理服务器,并将其运行在linux服务器节点上。

混合的Docker Swarm集群为你提供了更佳的微服务拆分路径,并在拆分过程中提供了更灵活的跨平台选择,这对于任何的团队都非常具有吸引力。

4. Windows Container的授权方式将跟随所运行的操作系统而定

如果你到Docker Hub上查看微软的windows server core和nano server容器镜像,你会注意到说明中都带有授权说明(EULA)。按照其中的说明,容器将随所运行的操作系统授权,也就是说根据你使用服务器版本而定,如:DataCenter或者Standard版本。

上图是我在微软官方的Windows Server 2016授权白皮书上找到的,根据这个说明,你可以在DataCenter上运行无限个Hyper-V Container,而在Standard版本上运行2个;而对于原生的Windows Server Container 则都是无限。

虽然在Docker Hub上的大多数镜像都是开源软件,但是开源并不意味着免费。同时Docker也已经开始通过 Docker Store 提供商业化的容器镜像分发服务,这些镜像则都是收费的。

5. 是时候开始探索 Windows Container 了

Windows Server 2016已经正式发布了,Windows 10上面的容器服务也已经提供很久了。微软在过去的几年中与Docker的合作非常紧密,当前的Docker工具中对Windows Container的支持API也都已经稳定。所以如果你在考虑何时开始容器化你的Windows应用,那么现在就可以开始了。


LEANSOFT与微软中国合作推出的《UDAD DevOps培训》在2016年受到了社区的极大关注,我们在北京,上海和深圳分别提供了多场培训,参训学员超过上千人。Windows Container一直都是学员们非常关注的内容,在2017年中,我们将推出包括Windows Container在内的多项新培训内容。首期培训将在2月份开课,请大家关注我们的微信公众号。

Windows Container 和 Docker的更多相关文章

  1. Windows Container 和 Docker:你需要知道的5件事

    微软在2016年的Ignite技术大会上正式发布了Windows Server 2016,其中的容器服务已经可以作为生产环境使用.这意味着Windows 内置的容器服务正式进入了大家的视野,虽然之前我 ...

  2. windows container (docker) 容器资料笔记

    背景 业务需求:简化公司私有云,公有云的部署,尝试寻找更好的,更优化的技术方案替换现有的虚拟机部署方案. 技术背景: .net Docker 学习资料 Docker中文社区: http://www.d ...

  3. Visual Studio 2017 调试 windows server 2016 Docker Container

    网上很多文章都是在win10下,用Docker for windows工具进行Docker的安装部署的.用知道windows server 2016已经原生支持Docker了,其windows Con ...

  4. docker windows container的一些注意点

    1.在阿里云esc的ws2016里装docker只能使用windows container,因为官方也说了主机也是虚拟机所以不能开启Hyper-v. 2.默认使用nat模式运行network,该模式在 ...

  5. docker入门、LXC、windows container 和 Hyper知识基础、实用情况

    虚拟机与容器 很明显可以看出两者在操作系统级别上的隔离和进程上的隔离的区别,VM因为隔离级别更高明显更重. linux容器主要技术特点: 文件系统隔离:每个容器都有自己的root文件系统 进程隔离:每 ...

  6. ASP.NET Core 2.0 in Docker on Windows Container

    安装Docker for Windows https://store.docker.com/editions/community/docker-ce-desktop-windows 要想将一个ASP. ...

  7. Redhat/Ubuntu/Windows下安装Docker

    Redhat/Ubuntu/Windows下安装Docker 什么是Docker Docker是Docker.inc公司开源的一个基于LXC技术之上构建的Container容器引擎,基于Go语言并遵从 ...

  8. 第二篇 windows container 微软的原生容器

    先上图,显示windows container的体积: 以下是我使用docker pull 命令下载后,又用命令保存到本地的,相对于linux container体积依然巨大无比:据官方新闻,微软原生 ...

  9. windows环境安装docker,并下载lamp镜像

    1.PC系统:windows10专业版 2.开启Hyper-V 此电脑->右击->属性->控制面板主页->(查看方式为小图标)程序和功能->右上方启动或关闭windows ...

随机推荐

  1. 前端项目课程7 banner设计注意事项

    前端项目课程7 banner设计注意事项 一.总结 一句话总结: 1.每个部分的里面的部分可以用相同的名字么,如何修改样式呢? 可以, 用模块名 + 比如上中下(top middle bottom) ...

  2. 杭电ACM1197——Specialized Four-Digit Numbers

    题目的意思是从2992開始的四位数.每个四位数的10.12,16进制的数的每一位加起来都相等,就输出该数. 非常easy的一道题目. 以下的是AC的代码: #include <iostream& ...

  3. 7、linux之定时器

    (1) 一个timer_list 结构体的实例对应一个定时器,其定义如下: struct timer_list { struct list_head entry, /*定时器列表*/ unsigned ...

  4. 小米笔记本(13.3 I7) ubuntu14.04下网卡驱动安装

    ubuntu 内核升级到4.6.4(更高版本可能造成系统无法启动) kernel debian包下载地址 http://kernel.ubuntu.com/~kernel-ppa/mainline/v ...

  5. [TypeStyle] Style CSS pseudo elements with TypeStyle

    Just like pseudo-classes, pseudo-elements are added to selectors but instead of describing a special ...

  6. swift学习第十二天:类的属性定义

    类的属性介绍 Swift中类的属性有多种 存储属性:存储实例的常量和变量 计算属性:通过某种方式计算出来的属性 类属性:与整个类自身相关的属性 存储属性 存储属性是最简单的属性,它作为类实例的一部分, ...

  7. Android Widget和悬浮窗 原理

    1.简单介绍 Android widget是桌面插件,在android系统应用开发层面有特殊用途. AppWidget是把一个进程的控件嵌入到别外一个进程的窗口里的一种方法.悬浮窗的效果与Widget ...

  8. libevent源码分析-介绍、安装、使用

    Libevent介绍 安装 样例 Libevent介绍 在include\event2\event.h中有关于Libevent的介绍,这里简单翻译介绍一下: Libevent是以事件为驱动的开发可扩展 ...

  9. php实现求字符串第一个只出现一次的字符

    php实现求字符串第一个只出现一次的字符 一.总结 很简单的逻辑 1.两个数组,一个存字母,一个存字母出现的次数 二.php实现求字符串第一个只出现一次的字符 题目描述 在一个字符串(1<=字符 ...

  10. Android中的动画详解系列【4】——Activity之间切换动画

    前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自定义动画,这一篇我们来看看如何将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 如 ...