Windows Container 和 Docker:你须要知道的5件事

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

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

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

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

windows-container-1

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

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

不少朋友都问过这个问题:我是否是能够在Windows容器服务中运行Linux应用,或者反过来。Docker很厉害,但还木有辣么厉害。你没法在Windows上直接运行Linux进程,一样你也没法在Windows Container中运行Linux进程。这个状况对于以上提到的2中运行时都适用,不管哪一种运行时模型,底层操做系统都是Windows,因此你没法运行Linux进程。windows

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

windows-container-2

虽然微软在过去的几年中变得愈来愈开放,可是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服务器节点上。asp.net

windows-container-3

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

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

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

windows-container-4

上图是我在微软官方的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月份开课,请你们关注咱们的微信公众号。


请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息

qrcode_for_gh_b7c158df1fd1_430

基于Docker的DevOps实战培训】是由徐磊老师主讲的三天封闭式课程,地点北京,时间2017年03月24-26日。课程结合了徐磊老师多年来在DevOps上的实践经验和Docker技术,具备很强的实战意义。

http://devopshub.cn/2017/01/16/docker-devops-training/

相关文章
相关标签/搜索