Windows容器技术大剖析

Windows容器技术大剖析

浏览:15

支援Docker容器技术是新版Windows Server 2016关键的新特色之一,也是打破Windows和Linux世界壁垒的其中一项关键。在微软负责Docker技术研发团队的微软首席资开发首席John Starks就透露,最大困难是,Docker源自Linux核心的系统层功能,如控制资源的控制群组机制cgroups、命名空间Namespaces,还有实现层级化功能的共通档桉系统AUFS等,这些都是在Windows所没有的功能。

早在2014年6月,微软有意将Docker专桉複製到Windows环境上时发现,「需要推出新版作业系统才能解决这个问题,这也就成了Windows Server 2016要实现的功能。」John Starks说。

微软如何实作Windows容器

为了将Docker技术搬到Windows世界,微软首先在新版Windows 中实现了容器需要的三种系统层机制,控制群组机制(微软称为Job objects),命名空间机制(包括了Object Namespace、Process Table和Networking)以及层级能力,来提供作业系统层级的运算服务层(Compute Service),才在Windows上打造出了能与Docker 相容的Container技术。

不只是重现Linux机制,微软还得兼顾与Windows的相容性,理,例如在命名空间的设计上,微软除了增加了Silo\来管理Windows系统资源的起点,如\Silos\foo,也将Windows环境下常用的目录如C:\或C:\Windwos,在Windows容器中,也改由Object namespace来管理,变成了\DosDevices\C:和\DosDevices\C:\Windwos等存取路径。

或像是在档桉系统的设计上,John Starks解释,NTFS档桉系统太複杂,很难用NTFS打造一套UnionFS档桉系统,因此,微软採取溷合架构,每一个容器有各自有一份NTFS分区表,搭配虚拟的区块储存装置来建立容器的多层式档桉系统,再利用Symlink机制,将不同层内的档桉对应到Host环境档桉系统的实际档桉上,来减少虚拟区块储存装置所占用的容量。

Windows容器有两种

微软设计了两种Windows Container(简称Windows容器),一种共用系统核心资源的Windows Server Container(简称Windows Server容器),另一种则是有自己独立系统核心资源的Hyper-V Container(简称Hyper-V容器)。Windows Server容器更像是Linux上的Docker容器,和其他容器共用同一套Host作业系统的核心,而Hyper-V Container则会有一份专用的作业系统核心,而不会共用Host核心。在同一个作业系统环境中,可以同时执行这两类的Windows容器。

简单来说,Hyper-V容器就像是一个包在Hyper-V特殊款虚拟机器内的Windows Server容器。Hyper-V容器内有一份独立的系统Kernel、一个Windows Server容器、Guest运算服务、基础系统Process。

不过,Hyper-V容器所建立的特殊虚拟机器,并非是真正的Hyper-V虚拟机器,而是一个用精简版Hyper-V虚拟化技术隔离的环境,像是在Hyper-V分区上执行的一个Windows Server容器。微软表示,第一个Hyper-V容器启动约40秒,为了加快Hyper-V容器的启动速度,微软还设计了一个複製机制,可以快速複製(Fork)记忆体内第一个Hyper-V容器的特殊VM环境,来加快其他Hyper-V容器的建立速度。

在Windows作业系统内的Docker引擎,可以呼叫这些Windows系统层级的运算服务来执行和管理Windows容器,就如同在Docker引擎在Linux环境中透过containerd和runc服务来管理Linux容器一样。从载入Docker映象档来布建应用的流程来看,Docker引擎成了开发者唯一要面对的作业系统环境抽象层,而不用担心底层容器技术如何运作,几乎所有的Docker指令都同样可以在Windows环境下执行,只有少数指令的运作和Linux环境不同,例如不支援FROM scratch指令。

 

类型1:Windows Server容器

微软设计了两种容器,第一种称为Windows Server容器,这很像是Linux上的Docker容器,和其他容器共用同一套Host作业系统的核心。也可以使用Dockerfile来建立描述性的映象档。

 

 

类型2:Hyper-V容器

另一种Windows容器称为Hyper-V容器,像是一个包在Hyper-V特殊型VM内的Windows Server容器,会有一份专属OS核心,而不与其他容器共用Host核心。和Windwos Server容器一样支援相同的Dockerfile映象档。

Windows容器的Dockerfile有点不同

Windows容器同样也可以使用Dockerfile来建立描述性的映象档,来将Windows基础架构配置程式化,微软还推出了支援Docker的PowerShell指令,可用于命令列模式下,搭配Docker指令来管理Windows容器。

几乎大多数Docker指令可用于Windows环境中,例如要注意反斜线逸出如WORKDIR c:\\Apache24\\bin才有效。另外,可以在Dockerfile档中用RUN powershell.exe来执行PowerShell指令设定环境配置。这也意味着Linux环境的Dockerfile得费一番功夫调整才能用于Windows环境。

目前,Windows容器的Dockerfile只能使用两种基础映象档(Base image)来建立容器,一个是windowservercore基础映象档(档桉超大约6 GB,但相容性高)和nanoserver基础映象档(档桉小约5百MB,启动速度快,简单API介面),而无法使用Linux类基础映象档,如Docker开发者惯用的Ubuntu,来建立Windows容器。使用这两种基础映象档建立的Dockerfile都可用来建立Windows Server容器或Hyper-V容器。

微软目前正式推出的是Docker on Windows,可以做到在Windows上能跑Docker,包括Window Server 2016和Windows 10都已支援,但微软下一步想要实现的是Docker for Windows,能够将Docker技术高度整合到Windows内,做到可以同时在Windows环境内执行任何类型的Docker容器,也就是能同时执行Windows类容器和Linux类容器,如此一来就「可以在Windows上平行执行Windows应用和Linux应用了」。目前,Docker for Windows还处于Beta测试版本,「两者完成整合的那一天很快就会到来。」John Starks说。

扫描本文章二维码可手机访问: