在Windows上使用Docker时,容器在Windows上的hyper-v linux VM中并行运行。 因此,在ubuntu中启动容器时,是否需要任何虚拟化解决方案(例如hyper-v),或者这些容器只是作为ubuntu中的进程运行?
我的第一句话的出处- How docker desktop runs linux containers on Windows machine
答案 0 :(得分:1)
“容器”是一个(主要)结合了Linux内核中实现的两个功能-control groups和namespaces的概念。您需要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主机。
最后,什么是容器?
Docker使用一种称为名称空间的技术来提供称为容器的隔离工作区。当您运行容器时,Docker会为该容器创建一组名称空间,然后容器中的每个进程将在单独的名称空间中运行。参见official docementation。