暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Windows Container 概览篇

深夜IT研究猿 2019-03-07
2556

Docker 是起源于 Linux 上的技术。Docker技术很好的支持了应用分发和集群部署。但是因为业务的需求,需要将.net程序容器化,接入k8s的纳管,但是由于.net程序无法迁移到Linux中的缘故,便对Windows下的Container,Docker进行了一番查阅和实践。


01▶

Windows Container简介


Docker是基于 Linux 内置的 Namespace 和 CGroup 等系统内隔离机制而抽象出来的一种轻虚拟化技术,它不能基于一种内核(Linux)提供另一种内核(Windows)的虚拟化运行环境。所以最开始的时候,基于Linux 的 Docker 是不支持运行 Windows 应用的。随着Docker的火爆,Docker 公司开始推出自己的Docker for Windows工具包,它旨在为开发人员在Windows 上开发面向 Docker 的应用程序提供完整的工具链,其中包括运行环境、客户端,Docker swarm编排工具和其他工具。

Windows Container,就是将容器跑在Windows系统中,它的工作方式与容器在Linux上的工作方式相同,甚至还增添了一些优点(后文会提到)。当然也有一定的缺点,比如说Windows操作系统不同,容器镜像会因版本差异无法兼容,需要重新构建或者拉取镜像,另外就是Windows的容器镜像普遍比较大。

与 Linux 类似,Windows 也抽象出来了 CGroup 和 Namespace 的概念,并提供出一个新的抽象层次 Compute Service,即宿主机运算服务(Host ComputeService,hcs)。相较于底层可能经常重构的实现细节,hcs旨在为外部(比如 Docker 引擎)提供较稳定的操作接口。

Windows 提供2种类型的容器运行时模型,一种是Windows Server Containers,另外一种是Hyper-V Container。

在Windows Server Containers中,容器和宿主机共享内核,这种方式类似于容器在Linux中运行的方式,都是通过命名空间、资源控制等技术实现进程隔离,由于共享内核空间,这些容器需要有与宿主机相同的内核版本和配置。

而Hyper-V Container是利用Hyper-v技术创建了虚拟机,为容器和宿主机提供了内核级别的隔离,提供了更强的隔离性。由于这些容器不与主机上的主机或其他容器共享内核,因此它们可以运行具有不同版本和配置的内核(在支持Docker的版本中)。运行这种容器需要在Docker run的时候指定--isolation=hyperv参数(此参数不适用于win server系统,因为win server本身就是运行在虚拟化环境中,所以目前不支持 HyperV 的容器运行时)。

Hyper-V Container多创建了一层虚拟化,启动速度稍慢,资源消耗也会增加,但是隔离性强。Windows Server Containers没有虚拟化层,启动速度快,资源消耗较少,但是隔离性弱(因为共享主机内核)。

在Windows下使用Docker有两种方式,Docker for Windows和Docker on Windows。


02▶

Docker for Windows


Docker官方说: Dockerfor Windows 是在Windows上使用Docker的最佳方式(划重点“官方”)。使用Docker for Windows,需要win10专业版或者企业版或者是更高的系统版本,并且要启用Hyper-v, 确保这些条件满足之后,需要我们自己做的事情很简单,鼠标点一点,安装DockerDesktop即可。和Windows的大多数应用一样,DockerDesktop提供了对Docker配置的图像化界面,这是相比Linux而言的一个优点,另外,Docker Desktop可以手动切换是运行Linux容器还是Windows容器,这就使得你可以选择任何的语言和开发工具进行开发。

如上图,是在Linux Containers情况下,左侧一栏提供了我们对Docker常用的设置,当切换到Windows Containers情况下时会仅提供General,Proxies,Daemon Reset几个设置。

在Linux命令行中Docker的相关命令,在Windows的powershell中都能使用,本质没有什么区别,对于我们来说只不过就是换了个界面而已。

在k8s 1.5版本中就已经加入了对Windows容器的支持,当时只是一个α特性,只能在测试环境中使用,在k8s 1.9发布版本中测试支持了Windows。本次实践最开始是在k8s 1.11.1版本测试的,虽然会成功纳管Windows节点,但是无法部署pod,查其原因是网络上的问题,后来将k8s版本升级到 1.13.2测试之后,不仅成功纳管了Linux和Windows节点,而且之前创建pod网络上的问题也随之解决。

相信随着技术的越来越成熟,Windows Container的技术会进一步改进和增强,会进一步被大众所接受和认识。


03▶

Docker on Windows


适用于较旧的Mac和Windows系统,提供了一种能够在Windows上使用Docker的方法,需要下载安装Docker Toolbox,Docker Toolbox包括以下Docker工具:

  • Docker CLI客户端:用于运行Docker Engine以创建映像和容器

  • Docker Machine:因此您可以从Windows终端运行Docker Engine命令

  • Docker Compose:用于运行Docker-compose命令

  • Kitematic,Docker GUI

  • 为Docker命令行环境预配置的Docker QuickStart shell

  • Oracle VM VirtualBox:启动服务前会启动一个虚拟机。在这个虚拟机上安装Docker服务。

因为Docker on Windows不是介绍的主角,所以在这里就是简单提一下。以上就是本周的主要内容,欢迎交流,喜欢你就点个好看吧。



文章转载自深夜IT研究猿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论