Docker 容器有没有自己的内核?

ste*_*t99 87 docker

我看到 docker 存储库中的很多 docker 镜像都是使用 Ubuntu 基础制作的。

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

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

编辑:澄清一下问题。是的,我知道 docker 是一个进程容器,而不是一个完整的 VM。但是既然官方的 docker hub 注册表和 CentOS 等其他操作系统中都有“Ubuntu”容器,那么在容器中运行 Ubuntu 意味着什么?

回答:啊,我才恍然大悟。它是 Ubuntu 用户进程,包含 apt-get 和其他特定 Ubuntu 构建的配置过程。CentOS 也是如此。Docker 不是单一进程,只是单一入口。因此,对于这些发行版,入口点是某种 init 进程,它会产生其他进程。

osg*_*sgx 46

Docker 使用主机操作系统内核,容器内部没有自定义或附加内核。在一台机器上运行的所有容器都共享这个“主机”内核。

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

Docker 使用 Linux 内核的资源隔离特性,例如 cgroups 和内核命名空间,允许独立的“容器”在单个 Linux 实例中运行,避免启动虚拟机的开销。

cgroups、namespaces 和 LXC 是 Linux 内核用来隔离进程组的特性;仍然有单个内核、单个调度程序和一个内核内存管理器实例。

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

http://boot2docker.io/

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

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

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

  • EML,哪个问题?默认情况下,所有 Docker 容器都没有自己的内核。所有 Docker 容器只有一个主机内核。 (3认同)
  • EML,在我的答案发布后,问题被“澄清”(https://superuser.com/posts/889472/revisions)编辑,所以它是对原始问题的回答,没有澄清。如果您有一些关于 docker 中基本映像和内核的信息要分享,请添加另一个答案。 (3认同)
  • 这并不能回答问题。 (2认同)

Jer*_*rar 23

在几乎所有情况下,主机操作系统内核都是共享的。要运行不同的内核,您需要使用虚拟化。这很少见,仅在由于性能下降而需要时使用。

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

这可能有助于解释它是如何工作的: 在此处输入图片说明

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

  • “包可能使用不同的内核”的任何来源???Docker 本身不能使用多个内核,始终只有单个主机内核。只有当与管理程序(虚拟化)结合时,我们才能启动多台主机,每个主机都有自己的内核版本,并在每个虚拟主机上运行一个 Docker;但对于任何主机,主机及其停靠的容器将只有一个内核) (4认同)
  • 第一句话是误导。在容器内使用虚拟机有点违背使用 Docker 的意义。 (3认同)
  • 什么是包?Docker 容器内部没有内核;它刚刚在主机上使用的内核上安装并启动。所以:一个 Docker = 一个服务器 = 一个内核,如图所示。无法通过单个 Docker 引擎使用两个内核;该引擎内的所有容器都将使用相同的内核。我认为正确的答案是“不,Docker 容器不能在 Docker Engine 的单个实例中使用不同的内核” (2认同)
  • 这是一个误导性的答案。 (2认同)

pet*_*erh 6

所有 docker 容器都使用主机内核。

这也意味着主机内核和容器发行版之间的某些不兼容可能会导致问题。理论上。例如,如果容器化软件想要使用某些未编译到主机内核中的内核功能,那么它就无法工作。

实践证明这种情况不会发生。Docker 容器的主要问题来源是 Docker 本身的(通常无法解释的)限制,而不是某些主机-来宾内核不兼容。

(附注:这是因为几乎所有 Linux 发行版都可以与任何 Linux 内核配合使用。)