Docker容器是否有自己的内核?


65

我看到docker存储库中的许多docker映像都是使用Ubuntu平台制作的。

这意味着什么?每个容器都捆绑了精简版的Linux内核吗?

容器是否位于自己的内核之上?但是我认为容器共享主机的内核(在某些情况下为boot2docker,自定义的Tiny Core Linux构建,在其他情况下为CoreOS)。

编辑:澄清一下问题。是的,我知道docker是一个进程容器,而不是完整的VM。但是,由于官方Docker Hub注册表和其他操作系统(例如CentOS)中都有“ Ubuntu”容器,因此在容器中运行Ubuntu意味着什么?

答案:啊,我刚刚意识到。它是Ubuntu用户登陆进程,包含针对特定Ubuntu构建的apt-get和其他配置进程。对于CentOS同样。Docker不是单个进程,而是单个条目。因此,对于这些发行版,入口点是某种会引发其他进程的初始化进程。


2
“这是Ubuntu用户登陆进程”,不仅是进程,还有库。
osgx

Answers:


37

Docker使用主机OS内核,容器内没有自定义或附加内核。在计算机上运行的所有容器都共享此“主机”内核。

维基百科说http://en.wikipedia.org/wiki/Docker_(software)

Docker使用Linux内核的资源隔离功能(例如cgroup和内核名称空间)来允许独立的“容器”在单个Linux实例中运行,从而避免了启动虚拟机的开销。

cgroup,名称空间和LXC是Linux内核的功能,用于隔离进程组。仍然只有一个内核,单个调度程序和一个内核内存管理器实例。

Boot2docker和CoreOS只是带有某些主机内核的轻型Linux发行版。它们可用于加载Docker容器。

http://boot2docker.io/

boot2docker是基于Tiny Core Linux的轻量级Linux发行版,专门用于运行Docker容器。它完全由RAM运行,重约27MB,并在约5s(YMMV)内启动。

http://en.wikipedia.org/wiki/CoreOS

单个控制主机(CoreOS实例)运行多个隔离的Linux系统(容器),使用Docker作为Linux内核的底层操作系统级虚拟化功能的附加抽象层和接口[14]。...该方法依赖于Linux内核的cgroups功能,该功能提供名称空间隔离以及限制,说明和隔离进程集合的资源使用(CPU,内存,磁盘I / O等)的功能。


1
这不能回答问题。
EML

2
EML,哪个问题?默认情况下,所有Docker容器都没有自己的内核。所有Docker容器只有一个主机内核。
osgx

当然,您的回答就目前而言还不错,但是OP想要知道FROM当主机已经在运行Ubuntu 时为什么他必须使用Ubuntu基本映像。要回答这个问题,您必须解释什么是基本映像。
EML 2017年

2
EML,在我的答案发布后,该问题已用“澄清”(superuser.com/posts/889472/revisions)编辑,因此它是对原始问题的答复,没有明确说明。如果您要共享一些有关docker中基本映像和内核的信息,请添加另一个答案。
osgx

17

在几乎所有情况下,主机OS内核都是共享的。要运行其他内核,您需要使用虚拟化。这是罕见的,仅由于性能下降而仅在必要时使用。

“ Docker Engine容器仅包含应用程序及其依赖项。它作为隔离进程在主机操作系统上的用户空间中运行,与其他容器共享内核。因此,它享有VM的资源隔离和分配优势,但具有更多优势便携高效”。

这可能有助于解释其工作原理: 在此处输入图片说明

资料来源:https : //www.docker.com/whatisdocker/


4
“程序包可能使用不同的内核”的任何来源 Docker本身不能使用多个内核,始终只有一个主机内核。只有与虚拟机管理程序(虚拟化)结合使用,我们才能启动几台具有各自内核版本的主机,并为每个虚拟主机运行一个Docker。但对于任何主机,主机及其停靠的容器将只有一个内核)
osgx

2
什么是包裹?Docker容器内部没有内核。它只是在用于主机的内核上安装并启动的。因此:如图所示,一个Docker =一台服务器=一个内核。无法通过单个Docker引擎使用两个内核;该引擎内的所有容器都将使用相同的内核。我认为正确的答案是“不,Docker容器不能在Docker Engine的单个实例中使用不同的内核”
osgx 2015年

1
每个Docker容器都可以运行所需的任何代码,包括能够加载软件可能需要的任何内核的虚拟化软件。您可以根据需要在容器中运行Windows。
JeremiahBarrar 2015年

1
JeremiahBarrar,明白了,谢谢您的解释。是否已从Docker容器内部运行虚拟化软件并得到Docker支持?Docker可以使用哪种虚拟化(软件qemu,qemu + kvm,xen等)?
osgx

2
第一句话有误导性。在容器内使用VM会削弱使用Docker的意义。
user2707671
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.