首页 > 解决方案 > 对容器和 Docker 层表示感到困惑

问题描述

这是显示容器在 Docker 层之上运行并依次在主机操作系统(内核)上运行的一种流行表示容器图

但是我在这篇文章中读到了容器本质上是在内核上而不是在 docker 上运行的。

http://crunchtools.com/containers-dont-run-on-docker/

容器实际上是如何在主机上运行的

我现在很困惑哪种表示是正确的表示。要启动停止容器,我们当然需要 Docker 或容器引擎,但是一旦启动,它就会在 Linux Kernel 上运行。我倾向于同意第二种表示。请对这方面有所了解。

标签: dockercontainers

解决方案


我认为这两个图表在某种程度上都是正确的。然而,他们对同一个问题给出了不同的鸟瞰视角

有了这么高层次的图表,确实很难判断究竟是什么在运行一个容器。更接近真正的分解实际上如下所示:

在此处输入图像描述

请注意,在上图中,每个框都代表主机上的常规 Linux 进程。因此,dockerdcontainerd和容器本身在这方面没有什么不同。容器实际上是常规的 Linux 进程。他们只是比其他人更孤立和受限制。

容器与其他进程的不同之处在于 Docker(通过其子组件)将这些进程放入虚拟沙箱中。从内部看,这些盒子看起来像是这些进程的操作系统的专用实例。这就是内核发挥关键作用的地方——它提供了所有操作系统级别的虚拟化功能(例如命名空间、虚拟网络设备等)来创建这样的盒子。或者监狱,如果你愿意的话。

您可以在本系列文章中找到有关容器管理器、运行时和 shim 的更多技术细节:


推荐阅读