作为Docker Engine团队的核心工程师,我在Linux上自然花了大部分时间。这种情况最近已经改变:今年4月,我们发布了一个Docker客户端的Windows版本。通过这个过程,我们已经与微软开发人员密切合作。

我被问到的最多的一个问题就是:“Docker什么时候将在Windows上运行?”,对于这个问题现在有了令人兴奋的回答。

因为本周有了标志性的巨大飞跃,我们为Windows Server发布了Docker Engine技术预览版, Windows daemon现在已经可以下载和测试了。Windows Server 2016 Technical Preview 3 (TP3) 和Windows Server上的 Docker Engine一起为更多的开发者带来Docker体验——构建新的软件和为项目做贡献。

Docker daemon简介

这其中也有许多令人困惑的地方,比如在Windows Server上运行Docker意味着什么。这里有一些要点需要澄清:

Windows Server端口之上的DockerEngine并不是一个头文件,也不是一个不同的项目,它同样为Linux和Windows构建的开源代码库。

Windows Server 之上的Docker技术预览版功能尚未完善,大部分的Docker命令你已经知道将在Windows Server正常工作。例如,你可以像在Linux上一样编写一个Dockerfile 和docker build。

Windows Server 之上的Docker daemon没有运行Linux image。不涉及虚拟化。Windows Server Containers重用(reuse)主机内核并为进程创建一个沙箱环境,就像在Linux之上一样。

这意味着Docker正在成为运行进程时一个平台不可知论的接口。例如,有一个一致的API允许跨Linux和Windows Server混合集群主机分发工作负载,这个混合集群是通过Docker Swarm使用单一的DockerCLI和相同的Docker指令编排的。没有任何新命令学习,相同的开发人员构建软件时现在有了更多的选择。

两个世界的碰撞

这项工作始于2014年11月,对于一个开源项目,它让我们保持与微软不可思议的互动。即使我们承认在早期有点怀疑,现在我们不得不承认我们已经被微软的贡献者的进度大为吃惊(真的,有点不知所措),从Ahmet Alp Balkan 和他在客户端的工作,紧随其后的是John Howard, John Starks, and Stefan Wernli 守护进程方面。说真的,谢谢加入Docker的贡献者社区。

server22.png

总的来说,微软团队通过大约180000行代码修改实现了这一点,所有这些全部公开并且正在经过严格的Docker项目评估过程。

server3.png

Introducing Nyancat, our best ANSi Emulator stress test.

Docker移植到Windows

容器运行和内核依赖

人们普遍认为Docker广泛使用Linux内核。同样,微软已经将集装箱化基本体添加到Windows内核,允许任何用户代码执行过程在沙箱环境中。这些功能只有在刚刚发布的Windows Server 2016 Tech Preview 3 (TP3)上获得,这使得它成为目前唯一的Windows能够运行Docker daemon的Windows Server操作系统。

在Docker的代码库中,容器的执行块称为execdriver,作为一个在Linux上的默认实现调用tolibcontainer——在不久的将来将依靠runC。对于Windows容器,微软Windows团队将其融入Windows specific execdriver。就像它的Linux副本,这个实现快速调用内核代码,以及通过 microsoft/hccshim包调用Host Compute Service。

有趣的是,我被告知,这是历史上第一次Microsoft Windows基础团队为开源项目贡献代码,这太酷了,不是吗?

持续集成

持续集成是一个保护项目取得进展的重要环节。事实上,绝大多数的贡献者运行Linux,不一定有环境或时间来验证他们的补丁不破坏构建Windows。

这就是为什么第一步和关键的一步是build green(甚至删除了许多块),为了使Windows Server编译作为持续集成工作。微软的团队发送补丁来push the Windows port forward,CI将确保没有其他贡献增加更多不可移植的代码,或者更糟的是,破坏已经移植的代码。

开始尝试

我们很兴奋你下载并试用Docker在Windows服务器。记住,这是一个技术预览版,所以有一些局限性和命令docker push在这个版本不支持。有问题,记得反馈给我们。

备注:本文由张鹏程编译整理,原文链接: http://blog.tenxcloud.com/?p=383


Mrexamo
231 声望14 粉丝