本文来自Mobingi官方技术专栏,欢迎关注
本文翻译自Finally, Linux Containers Could Run on Windows with Docker’s LinuxKit
自从两年前推出第一个测试版,有一件事Windows容器一直没有做,就是基于Windows环境,在Linux容器中,运行Linux程序集。这个所谓的“Linux子系统”,是一件必须要做的事。一年前微软确实发布了一个东西,但是奇怪的是,他并没有解决这个容器移植问题。
四月看起来是Docker和微软一起取得进展的一个月,周二上午在奥斯汀召开的 DockerCon 2017大会上,Docker公司的首席技术官 Solomon Hykes宣布,将开源一部分由Docker公司主持参与开发的用于构建“Linux子系统”的工具集,叫LinuxKit,它将会提供一个刚刚好的基于Linux的平台,在应用程序的下层,用于支持容器运行Linux应用程序。它可以运行在任何操作系统上,包括Mac OS和Windows;也可以运行在任何的主要云平台上,包括AWS,或者更不可思议地运行在一台裸机上(没有安装任何操作系统)。
“Linux明显是一个安全的操作系统”,Hykes宣称,“它不需要我们在安全方面的帮助,但是,还有一些问题。当你假设任何东西都是一个容器的话,你可以把安全带到一个新的水平。你可以做很多假设,比如,你可以定制一些专门的补丁和配置,从而进一步强化系统。”
Hykes花了一些时间来证实他的观点,不过他实际上已经抓到了一些人的眼球。当容器化运行在一个本身也被包裹在其他宿主环境(比如另外一个Linux系统,或者一个第一代虚拟机)的空间中,所有的最严重的潜在安全风险都与宿主机和客户机的边界间通信有关。
在一个所有系统都被虚拟化的环境中,没有上面所说的边界存在。所以,任何专门解决容器的安全性和认证问题的组件(比如 Docker Notary)也可能被用作底层系统安全网关。想象一下,基于角色访问一个具有“linux子系统”的容器,你会从中得到更多启发。
“我不认为Docker需要对你的Linux子系统的安全性负责,”Hykes承认,“实际上,我们不认为任何一个公司需要为此全权负责。Linux太大了,也太重要了。所以,你依赖的使Linux本身安全的进程是开放的且社区驱动的,这一点非常非常重要。并且,在过去几年里,Linux社区也确实产出了许多好的成果。比起多躲在角落里做所有事,不如从第一天开始就加入到这些开放的进程中。
这不仅”开放“的回归,同时也是Docker公司在2015年采取与外部合作的政策。但是去年当Docker群服务融入企业级平台时,它似乎被放弃过。事实上,Hykes再次详述了作为组件社区的容器生态,而Docker公司对此生态做的贡献有限,没有哪个单一组件能成为其他所有组件必不可缺的核心。
该公司的明确政策是,限制Kubernetes(或者其他任何人)对容器生态提的要求。这使得Docker公司不会失去任何一个和他们站在同一舞台上的合作伙伴,比如微软。
代表微软Azure核心开发团队的 John Gossman表示:”正如你所知,Docker开始于一个以Linux为目标系统的项目,Docker将一些复杂的内核特性集成,使我们得到了我们非常喜欢的简单易用的开发体验。并且Windows团队也想让Windows开发者们有同样的开发体验。”
Gossman讲述了我们都知道的,为什么微软开发Windows容器(现称为Windows Server Containers)和Hyper-V容器的两个独立格式的故事。 前者以基于Linux的Docker容器共享Linux内核的方式共享Windows内核,而Hyper-V容器允许客户机操作系统通过虚拟机在不同的主机平台上运行客户机操作系统的应用程序。 因此,对于Windows Server 2016,Microsoft为基于Windows的Hyper-V容器创建了一种隔离空间,可以最大限度地减少该虚拟机的占用资源。Gossman说,借助于LinuxKit,这种隔离方案正在扩展到基于Linux的容器中。
Gossman的演示已经充分证明理论上开发者可以在Windows上,用Windows的工具进行开发、编译、集成,然后在一个装载Hyper-V的隔离空间里的Linux容器镜像中运行Linux程序。他的演示程序包括一个嵌入在linux容器中的BusyBox镜像,并且Gossman证明了他可以在他的笔记本上运行并激活这个Linux内核。这也同样证明了任何Linux,大到企业级的Linux,小到最小化的CoreOS都可以作为程序运行的宿主机。当然,在听众中一定有不少人可能计划过用SELinux作为隔离空间的内核。
“你的平台安全性取决于它安全性最弱的组件,”Docker公司的Hykes说,这样使得Docker将所有关于安全性责任的争论转移到Linux头上。“你必须单独考虑每一层,”他继续说,“Docker有许多组件,我们一直很担心它们存在的所有安全问题,以及组件与安全性之间如何相互配合。”
Hykes在他的主题演讲中表示,Docker的整个演进过程都是“投诉驱动的”。开发人员抱怨,工程师组装和修正,平台得到改进。开发人员两年前确实有过大声抱怨。如果历史证明Hykes是正确的,我们需要铭记Docker公司是如何回应这个抱怨的。