docker 在 linux 机器上 运行 时是否使用虚拟化解决方案?

Does docker use virtualization solution when running in linux machines?

当 Docker 用于 Windows 时,容器 运行 在 Windows 上的 hyper-v linux VM 中并排放置。 因此,当在 ubuntu 中启动容器时,是否需要像 hyper-v 这样的任何虚拟化解决方案,或者容器是否只是 运行 宁作为 ubuntu 中的进程?

我的第一个声明的来源 -

"Containers" 是一个概念,它(主要)结合了 Linux 内核中实现的两个功能 - control groups and namespaces。您需要在 Windows 之上安装 VM,因为 Windows 未实现这两个功能。

因此,当您 运行 容器 在 Linux 上本地 时,每个容器将简单地 运行 作为受控制组约束的独立进程,并且命名空间。

首先,为什么是 hyper-v?

docker 在 windows 上使用 hyper-v VM 的原因是:对于 linux 容器,它必须共享主机的 linux 内核。但是在windows,我们没有linux内核,所以docker给你设置一个hyper-v VM,然后让你的容器共享内核。

其次,为什么不在 linux 上安装虚拟机?

但是在linux上,主机已经有一个linux内核,所以容器可以共享这个内核而不使用任何VM。

事实上,从下图中你可以看到当你启动一个新的容器时,它会自动新建一个进程containerd-shim,它将运行作为一个你可以使用的进程[=11] =] 在 linux 主机上看到它。

最后,什么是容器?

Docker 使用一种称为命名空间的技术来提供称为容器的隔离工作区。当您 运行 一个容器时, Docker 为该容器创建一组名称空间,然后容器中的每个进程都将 运行 在一个单独的名称空间中。参见 official docementation