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

在Docker中,客户操作系统与主机操作系统共享相同的内核。

有人能详细说明吗?

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

当我们把Ubuntu的图像,然后它有不同的内核

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

正如“ Docker vs Virtualization ”中所提到的:

最初,Docker是作为Linux容器(LXC)之上的抽象层构build的。 LXC本身就是一个Linux遏制function的API。
从Docker 0.9开始,LXC不再是默认的,而是被用Go编写的自定义库(libcontainer)替代。 总的来说,libcontainer的优势是在各种Linux发行版上与内核的接口更加一致。 唯一的问题是需要Linux 3.8及更高版本。

请参阅“ 为什么了解用户空间与内核空间有关 ”。
另外“ 操作系统容器与应用程序容器 ”:

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

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

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

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

正如“ 所有Linux发行版使用相同的内核? ”中所述,即使每个发行版都有自己的内核configuration,也可以跨发行版共享一个内核。

Docker早些时候使用了LinuX Containers(LXC),但是切换到runC(以前称为libcontainer),它运行在与主机相同的操作系统上。 这使得它可以共享大量的主机操作系统资源。 它也使用像AuFS这样的分层文件系统。 它也为您pipe理networking。

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

假设你有一个容量为1GB的图像。 如果你想使用一个完整的虚拟机,你需要有1GB的x数量的虚拟机,你想要的。 使用LXC和AuFS,您可以共享1GB的大部分内容,如果您拥有1000个容器,则容器操作系统的容量可能只有1GB多一点,假设它们都运行相同的操作系统映像。