今天看新闻,突然有爆料说docker已经支持Mac和Windows了,这不禁让我感慨发展之迅速。作为跟MFC,,Visual Studio, WinDBG,.Net打交道多年的我,甚是兴奋。不过,当我仔细阅读原文后,发现跟我们想的还相差甚远。
“Faster and more reliable: no more VirtualBox! The Docker engine is running in an Alpine Linux distribution on top of an xhyve Virtual Machine on Mac OS X or on a Hyper-V VM on Windows, and that VM is managed by the Docker application. You don’t need docker-machine to run Docker for Mac and Windows.”
仅凭这一句,我就顿感失望。Docker和VM的最大区别就是,一个是操作系级虚拟化,一个是硬件级虚拟化。因此, Docker本身就是可以运行在VM之上的。你不能说在windows上装个虚拟机,然后再运行一个Docker,就说docker支持windows吧。为了让docker能在VM上运行,docker专门开发了Docker Toolbox和docker-machine,其核心都是通过虚拟机来运行docker,只不过是帮用户简化了中间的部署和配置流程。针对本次的Beta发布,更多的是优化的工作。笔者也提交了试用申请,然后进入了长长的waiting-list,不过我猜测,这次的版本改进主要体现在以下几个方面:
- 通过使用轻量级的linux发行版本,使VM更小,部署和安装更快。Alpine linux是一个非常轻量级的发型版,而且docker也有计划让alpine作为默认的基础镜像。
- 原生工具集支持。以前我们在非linux下运行时,都需要借助于类似MINGW的工具,模拟一下Shell。而这次Beta的退出,在这方面肯定是加强了,支持了原生态的命令。
- 更好的网络支持。可能会将Docker的网络系统集成到Mac和Windows的原生网络系统中,方便用户配置。
- 更好的对系统沙盒的适配。OS X和Windows本身都是支持沙盒的,可能在这方面会有所加强。
这一系列的改进,不可谓不大。看得出docker得到了Microsoft和Mac的很大帮助,同时也归功于docker在Unikernal 领域的收购。那么为什么原生态的windows和mac那么难支持呢?这必须从docker的基本原理说起:
- CGroup技术,这是用来控制CPU、内存、网络等资源限制的,这需要内核的支持,而目前只有linux的支持比较好。
- lNamespace技术,这是用来做用户资源隔离的,注意这里是隔离,是让一个进程成为一个沙盒,拥有完全独立的PID,网络栈,主机名等,而这一技术目前也是只有linux支持比较好。
不过话说回来,Microsoft也不是吃素的,其实Windows Server 2016已经支持了原生态的docker,不过它基本上是完全重写了,连基础镜像都是windows server,这一点就很难融入docker的生态圈,毕竟Registry里面的基本都是运行在linux下的镜像。
作者介绍:晏东,精灵云联合创始人,20年编程经验,全栈工程师,曾任索贝数码及赛门铁克架构师架构师,一直从事SAN、NAS及对象存储等分布式系统研发工作。2013年开始研究LXC和Docker相关技术,目前主要从事容器云平台镜像及仓库方面研发工作。