Docker中的共享内核是什么意思?

时间:2015-09-24 08:41:10

标签: docker virtualization

在Docker中,来宾操作系统与Host OS共享相同的内核。

有人可以详细说明。

让我拥有一些内核版本的centos os,当我们拉ubuntu图像然后它有不同的内核时,那怎么能说它们有相同的内核呢?

2 个答案:

答案 0 :(得分:18)

  

当我们拉ubuntu图像时,它有不同的内核

不,它没有:它没有内核部分:它依赖于所有 system calls 的主机内核(运行docker引擎的内核)。

如“Docker vs Virtualization”中所述:

  

最初,Docker是作为Linux容器(LXC)之上的抽象层构建的。 LXC本身只是Linux收容功能的一个API   从Docker 0.9开始,LXC不再是默认设置,并且已经被用Go编写的自定义库(libcontainer)取代。整体libcontainer的优势是在各种Linux发行版中更加一致的内核接口。唯一的问题是它需要Linux 3.8及更高版本。

点击“Why Understanding User Space vs. Kernel Space Matters”了解更多信息 另外“Operating System Containers vs. Application Containers”:

  

容器是操作系统虚拟化的产物。它们提供了一个轻量级的虚拟环境,可以从主机和任何其他容器中分离和隔离一组进程和资源,如内存,CPU,磁盘等。
  隔离保证容器内的任何进程都无法看到容器外的任何进程或资源。

https://risingstack-blog.s3-eu-west-1.amazonaws.com/2015/05/os-virtualization.jpg

  

OS容器是共享主机操作系统内核但提供用户空间隔离的虚拟环境

https://risingstack-blog.s3-eu-west-1.amazonaws.com/2015/05/os-containers.jpg

如“Do all Linux distros use the same kernel?”中所述,即使每个发行版都有自己的内核配置,也可以在发行版中共享内核。

如果您需要更多隔离,请考虑 gVisor https://github.com/google/gvisor),这是一个容器沙箱运行时,专注于安全性,效率和易用性。 (2018)。
见架构:

https://gvisor.dev/docs/architecture_guide/Layers.png

  

gVisor拦截应用程序系统调用并充当来宾内核,而无需通过虚拟化硬件进行转换。

     

gVisor可以被认为是合并的客户内核和VMM,或者是类固醇的seccomp。   这种架构允许它提供灵活的资源占用空间(即基于线程和内存映射,而不是固定的客户物理资源),同时还降低了虚拟化的固定成本。   但是,这是以降低应用程序兼容性和更高的每系统调用开销为代价的。

答案 1 :(得分:1)

Docker之前使用的是LinuX容器(LXC),但切换到runC(以前称为libcontainer),它运行在与其主机相同的操作系统中。这允许它共享许多主机操作系统资源。它还使用像AuFS这样的分层文件系统。它还为您管理网络。

AuFS是一个分层文件系统,因此您可以拥有只读部分和写入部分,并将它们合并在一起。因此,您可以将操作系统的公共部分设置为只读,这些部分在所有容器之间共享,然后为每个容器提供自己的挂载以供写入。

因此,假设您有一个1GB大小的容器图像。如果要使用完整虚拟机,则需要1GB倍x所需的虚拟机数量。使用LXC和AuFS,您可以共享1GB的大部分内容,如果您有1000个容器,那么容器操作系统的空间可能只有1GB以上,假设它们都运行相同的操作系统映像。