博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows上的原生Linux容器(盆盆的Kubecon课程分享)
阅读量:7121 次
发布时间:2019-06-28

本文共 1932 字,大约阅读时间需要 6 分钟。

Copy (2) of IMG_1562.jpg

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

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

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

欢迎关注我的公众号:

华来四.jpg

答案有以下三点:

  • 节省资源 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的容器镜像。

0.png

甚至可以测试最新的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容器。

1.png

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

2.png

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

2018-11-18_9-05-46.png

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

3.jpg

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

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

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

5.png

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

hcsdiag console -uvm ec1682e834415788943cd79fa56da656f5ffb689ea16a126c166eaba8812e54b

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

6.jpg

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

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

7.jpg

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

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

8.jpg

Copy of IMG_1567.jpg

Copy of IMG_1568.jpg

转载地址:http://cixel.baihongyu.com/

你可能感兴趣的文章
Outlook配置
查看>>
RocketMQ-安装
查看>>
RadixSort(基数排序)
查看>>
Java编程风格与命名规范整理
查看>>
获取cpu使用率
查看>>
XCode最佳实践之最佳数据类型
查看>>
Linux-关机命令
查看>>
父与子
查看>>
统计网络连接及统计网站日志top20的IP
查看>>
我的友情链接
查看>>
SFB 项目经验-78-Exchange 2010与2016共存,不能收发
查看>>
DiskGenius(磁盘分区软件)64/32位简体中文绿色免费版
查看>>
Android 学习笔记--android——Activity加载模式
查看>>
修改Oracle,mysql最大连接数
查看>>
用Java实现生产者和消费者的多线程例子
查看>>
alter database datafile offline drop 与 alter tablespace drop datafile 区别 .
查看>>
Java学习课程体系
查看>>
字符串类型转Timestamp类型
查看>>
Webloigc cluster环境中Jax-ws问题
查看>>
我的友情链接
查看>>