在上周结束的微软技术暨生态大会上,盆盆分享了关于azure stack和容器的相关内容。其中,最引人注目的无疑是微软最新推出的一项技术——可以在windows中直接运行的linux容器!接下来,盆盆将通过这篇文章详细探讨这一技术。
原本由于容器共享操作系统内核,Windows系统上无法运行Linux容器,反之亦然。现在,主流的docker编排工具大多支持Windows和Linux混合部署。例如,Kubernetes,如下图所示,Kubernetes集群中包含Windows节点。
如果在Windows环境中运行Windows容器,可以看到多个运行在同一会话中的进程,这些进程共享同一个容器。下图显示的进程都在会话25中运行。
Windows容器采用联合挂载文件系统,类似于Linux容器的AUFS等,使用分层的镜像层(Image Layer),最顶层的Layer可读可写,称为sandbox layer,存储在一个名为sandbox.vhdx的文件中。多层的Base Image和sandbox.vhdx在容器内部呈现为一个统一的、联合的文件系统。
而在Windows中运行Linux容器,则利用了Hyper-V容器的功能,每个容器都有自己的独立内核(使用docker的LinuxKit)。Hyper-V容器的安全性更高,因为它是在Hypervisor级别隔离的。
要在Windows 10中启用这一功能,最简单的方法是(确保已更新到Build 17205或更高版本)下载并安装最新的docker for Windows(请在网上搜索并选择下载edge分支)。
https://www.php.cn/link/86c26c7eb678214b9749fe1c5364cff2
然后确保选择“启用Windows上的Linux容器”。按照屏幕提示完成必要的步骤即可。
当运行以下命令时,即可在Windows 10中创建Linux容器:
前面提到,这里的Linux容器实际上是Hyper-V容器,它启动了一个最小化的Linux虚拟机,其内核和引导文件位于C:\Program Files\Linux Containers目录下,包含bootx64.efi和initrd两个文件。
然后从本地镜像缓存中尝试获取ubuntu镜像(如果没有,则从docker hub中pull下来),并自动创建Linux容器,类似于Windows容器,其顶层的可读可写镜像层也称为sandbox.vhdx。
在Bash命令行提示符下输入cat /etc/issue,可以看到Linux容器的操作系统版本号为Ubuntu 16.04.3 LTS。
使用Process Explorer查看时,这个Hyper-V容器在宿主机上的进程为vmwp.exe,这是Hyper-V虚拟机的进程。容器内的进程都在这个最小化的Hyper-V虚拟机中运行,宿主机上看不到这些Ubuntu容器内的进程。
查看vmwp进程的打开句柄,可以看到类似以下复杂路径,如下图所示:
\device\STORVSP\GUID\{guid}\C:\programdata\Docker\lcow\lcow\aaa5f623879acf5818bffbeca7d88b62d4f262e957d2c4de99591c3b04144df1\sandbox.vhdx"
其中,sandbox.vhdx(图中底部的红色方框)是Ubuntu容器的顶层可读可写镜像层,所有修改的内容都会保存在这个层中(通过commit可以固化下来),以实现代码的快速迭代。从图中可以看出,该sandbox.vhdx是通过Hyper-V虚拟机的VMBus上的SMB共享来访问的!
绿色方框部分是Ubuntu镜像的多个Base Image层,这些Base Image由不同的layer.vhd文件组成。这些Base Image和顶层的sandbox.vhdx通过联合挂载文件系统,在容器内部表现为一个单一的完整文件系统。
进入sandbox.vhdx的父目录,也就是以下路径:
C:\programdata\Docker\lcow\lcow\aaa5f623879acf5818bffbeca7d88b62d4f262e957d2c4de99591c3b04144df1\
其中的aaa5f623879acf5818bffbeca7d88b62d4f262e957d2c4de99591c3b04144df1就是该Ubuntu容器的容器ID。
该父目录下有一个layerchain.json文件,其内容如下:
该layerchain.json文件显示的是sandbox.vhdx文件所依赖的容器Base Image的路径,总共有5个文件,与前面截图中的绿色方框的5个文件相对应。
这就是Windows的强大之处,未来可以想象,底层的容器集群可以全部采用Windows Server 2016系统,既能运行Windows容器,也能运行Linux容器,并且支持docker的商业版,从操作系统到docker,都有商业化的保障!
以上就是水火交融-Windows上的Linux容器的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号