您测试过Windows上的Linux容器吗?

这是本周末刚闭幕的Kubecon大会,笔者在课堂上提出的问题。

关于这个问题,大家常有的困惑就是,我们为什么要在Windows上运行Linux容器?您可以到以下地址下载PPT:

PPT下载地址

欢迎关注我的公众号:

答案有以下三点:

  • 节省资源 Windows服务器上能同时运行Windows容器和Linux容器,而不是Windows容器只能在Windows主机上运行,Linux容器只能在Linux主机上运行,造成资源浪费。

  • 隔离能力 Windows上的Linux容器采用了Hyper-V容器技术,底层是小型的看不见的虚拟机,所以借用了hypervisor的隔离能力

  • 商业引擎 Windows服务器的docker引擎,会是企业版的引擎,由微软和docker提供支持

接下来让我们看一下Windows是如何让Windows容器和Linux容器水火共融的。这里以一台Windows 10机器为例进行介绍,您也可以在Windows Server 2019上测试。

运行docker images,即可看到Windows 10上当前有Windows和Linux的容器镜像。

甚至可以测试最新的Windows Server 2019 Docker镜像。其镜像的pull地址分别为:

mcr.microsoft.com/windows/nanoserver:1809

mcr.microsoft.com/windows/servercore:1809

mcr.microsoft.com/windows:1809

随便运行一下docker run -it microsoft/nanoserver,即可启动一个Windows容器。

再运行docker run -it supertest2014/nyan,即可同时启动一个Linux容器。

我们可以通过docker ps命令查看这两个容器的信息。

前面说过,Linux容器采用了Hyper-V容器的技术,底层是被优化过的小型Linux虚拟机,采用的是docker的LinuxKit(内核和引导文件位于C:\Program Files\Linux Containers)。可见非常精简。

以下是原理图。其中绿色的部分就是传统的Linux容器架构原理图。

看看Windows上的Linux容器增加了哪些组件?首先是运行在Hypervisor之上,这样隔离能力就和虚拟机一样高,而不是采用共享内核的机制。其次由于dockerd、containerd等服务运行在主分区(Host Partition,就是宿主机),通过HCS(宿主计算服务)和LinuxKit虚拟机上的GCS(来宾计算服务)通信,这两个组件是基于Hyper-V的VMBus高速内存总线!

怎么查看Linux容器的详细信息,通过Hyper-V管理器(GUI、PowerShell或者API)是看不到这台微型虚拟机的任何信息的。

我们需要借助hcsdiag这个命令,首先运行hcsdiag list命令,查看服务器上的Hyper-V容器信息。

可以看到其上运行了两个容器,记住其中Linux容器的ID信息。再运行以下命令:

hcsdiag console -uvm ec1682e834415788943cd79fa56da656f5ffb689ea16a126c166eaba8812e54b

即可进入该微型虚拟机的命令行,运行ps aux,即可查看该虚拟机的进程信息,其中有/bin/sh -c nyancat,这就是Linux容器进程(加以命名空间保护),还有/bin/gcs,这就是GCS组件,还有hv_vmbus_con,这是虚拟机的硬件驱动。

这台微型虚拟机不但内核精简,本身的硬件配置也精简,删除了所有不支持Hyper-V enlightened的设备。

再运行mount,查看该虚拟机挂载的设备。可以看到底部有若干/dev/pmem的存储设备,只读模式(ro),这就是Linux容器的基础镜像(包含多个layer的base image),加载到内存里。

还有一个/dev/sda这样的块设备,是可读写设备(rw),这是容器顶部的layer。当容器被杀死时,该layer自动删除,也可以commit到镜像仓库,以实现快速代码迭代。

用Process Explorer,可以查看微型虚拟机的vmwp进程,可以看到该进程的访问句柄,下图中红色框里的sandbox.vhdx,就是Linux容器的顶层可读写layer,而绿色框里的多个layer.vhd文件,则是Linux容器的base image。这和上图的命令行显示是一一对应的。

Windows上的原生Linux容器(盆盆的Kubecon课程分享)相关推荐

  1. BML CodeLab重磅更新:在Windows上可原生Linux AI开发

    自从微软发布 WSL2(Windows Subsystem for Linux 2)之后,机器学习开发者.数据科学家就可以在 Windows 上做原生 Linux 开发了. 但想正常的使用,其实并不简 ...

  2. Go Windows上生成适用于 Linux 的可执行文件

    阅读目录 Go Windows上生成适用于 Linux 的可执行文件 Go Windows上生成适用于 Linux 的可执行文件 在Windows上生成适用于Linux的可执行文件是一项相对复杂的任务 ...

  3. 在 Windows 上直接运行 Linux,真香!

    在 Windows 上直接运行 Linux,真香! 启用"适用于Linux的Windows子系统"功能 去Microsoft Store搜索"Linux" 下载 ...

  4. 在 Windows 上直接运行 Linux,有命令行就是香!

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者:majianguo cnblogs.com/majianguo/p/8047676.html 之前了解过一些适用于linux的Wind ...

  5. 在M1芯片上跑原生Linux:编译速度比macOS还快40%,真香警告

    Alex 发自 凹非寺 量子位 | 公众号 QbitAI 现在,M1 Mac可以顺利运行原生Linux了. 专为苹果自研芯片打造的Asahi Linux项目,Alpha版本已经释出. 在Mac采用英特 ...

  6. 在 Windows 上直接运行 Linux,有命令行就是贼香

    之前了解过一些适用于linux的Windows子系统,最近又听人提起,于是在自己的Windows 10专业版上安装了一个Ubuntu.运行起来还真方便,以后在windows上开发Linux程序就不需要 ...

  7. 从windows上传到linux服务器的php图片生成不了,windows10上用thinkphp5开发程序上传服务器后出现图片异常的问题...

    1.发现问题.经过测试,发现在windows10上浏览一切正常,上传图片浏览正常,但是上传到linux服务器后出现上传图片浏览失败的情况. 2.图片名称如果全部是英文,不包含中文等特殊字符,则在lin ...

  8. 在linux或者windows上直观查看linux下生成的自签名证书

    linux上查看 windows上查看 需要把pem后缀修改为crt 转载于:https://www.cnblogs.com/lqynkdcwy/p/9664080.html

  9. 教你打入clr内部: 配置windows上的windbg,linux上的lldb

    一:背景 1. 讲故事 前几天公众号里有位兄弟看了几篇文章之后,也准备用windbg试试看,结果这一配就花了好几天,(づ╥﹏╥)づ,我想也有很多跃跃欲试的朋友在配置的时候肯定会遇到这样和那样的问题,所 ...

最新文章

  1. OpenCV黑白图像增强——灰度级切片
  2. C++ Primer 5th笔记(10)chapter10 泛型算法 :谓词
  3. 华科硕士,一个优秀的数据分析师
  4. node服务成长之路
  5. python aes加密 cbc_【转载】python AES CBC模式加密
  6. 手机上怎么打开md格式的文件_怎么压缩pdf文件?文件过大、传阅困难就用这个办法...
  7. body属性文本标记和排版标记
  8. HDU 5015 233 Matrix 矩阵快速幂
  9. MASM6.11安装
  10. 思科模拟器5506防火墙配置_企业办公网络配置不求人之三——端口映射
  11. 数字孪生|数字孪生装备-概念与内涵
  12. Netflix继续开源,更多猴子进入视野
  13. Beaver 论文阅读笔记
  14. performance的使用
  15. SpringBoot整合Gitee图床
  16. spp_solver
  17. 关于墨客的abi decode/encode
  18. [jvm-sandbox] 多个agent并用
  19. 什么都不会的应届生怎么找工作?
  20. 【华大九天Aether芯片EDA模拟电路仿真 Centos7安装】

热门文章

  1. jQuery学习随笔(一)
  2. SpannableString
  3. 威金病毒、维金病毒、Viking、logo1_.exe专杀 vdll.dll、logo1_.exe、rundl132.exe、_desktop.ini、、0Sy.exe、图标变花...
  4. 汇编中的扫描码、ASCII码(也称字符码)、扩展码、虚拟键码 的区别
  5. 32位处理器的寄存器介绍
  6. 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示
  7. HTTP与HTTPS握手的那些事
  8. 【Android】自定义view-拖动小球移动
  9. 关于for中思维卡机的小悲剧
  10. 汉字的奥秘: 获取汉字的笔画数