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

时间:2019-05-05 06:00:23

标签: docker virtualization

在Windows上使用Docker时,容器在Windows上的hyper-v linux VM中并行运行。 因此,在ubuntu中启动容器时,是否需要任何虚拟化解决方案(例如hyper-v),或者这些容器只是作为ubuntu中的进程运行?

我的第一句话的出处- How docker desktop runs linux containers on Windows machine

2 个答案:

答案 0 :(得分:1)

“容器”是一个(主要)结合了Linux内核中实现的两个功能-control groupsnamespaces的概念。您需要Windows之上的VM,因为Windows不能实现这两个功能。

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

答案 1 :(得分:1)

首先,为什么选择hyper-v?

在Windows上使用hyper-v VM的docker的原因仅在于:对于linux容器,它必须共享主机的linux内核。但是在Windows上,我们没有Linux内核,因此docker为您设置了hyper-v VM,然后让您的容器共享内核。

第二,为什么不在Linux上使用VM?

但是在linux上,主机已经有一个linux内核,因此容器可以共享该内核而无需使用任何VM。

实际上,从下图可以看到启动新容器时,它将自动新建一个进程containerd-shim,它将作为一个进程运行,您可以使用ps aux | grep docker在其上看到它linux主机。

enter image description here

最后,什么是容器?

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