docker - 对容器和 Docker 层表示感到困惑
问题描述
这是显示容器在 Docker 层之上运行并依次在主机操作系统(内核)上运行的一种流行表示
但是我在这篇文章中读到了容器本质上是在内核上而不是在 docker 上运行的。
http://crunchtools.com/containers-dont-run-on-docker/
我现在很困惑哪种表示是正确的表示。要启动停止容器,我们当然需要 Docker 或容器引擎,但是一旦启动,它就会在 Linux Kernel 上运行。我倾向于同意第二种表示。请对这方面有所了解。
解决方案
我认为这两个图表在某种程度上都是正确的。然而,他们对同一个问题给出了不同的鸟瞰视角。
有了这么高层次的图表,确实很难判断究竟是什么在运行一个容器。更接近真正的分解实际上如下所示:
请注意,在上图中,每个框都代表主机上的常规 Linux 进程。因此,dockerd
、containerd
和容器本身在这方面没有什么不同。容器实际上是常规的 Linux 进程。他们只是比其他人更孤立和受限制。
容器与其他进程的不同之处在于 Docker(通过其子组件)将这些进程放入虚拟沙箱中。从内部看,这些盒子看起来像是这些进程的操作系统的专用实例。这就是内核发挥关键作用的地方——它提供了所有操作系统级别的虚拟化功能(例如命名空间、虚拟网络设备等)来创建这样的盒子。或者监狱,如果你愿意的话。
您可以在本系列文章中找到有关容器管理器、运行时和 shim 的更多技术细节:
推荐阅读
- angular - brotli 压缩后部署 Angular 8 项目
- complex-event-processing - Esper / NEsper EPL 声明
- node.js - 用 nodejs 编写 .conf 文件
- google-calendar-api - Google Calendars API - 插入事件 - 通过电子邮件通知组织者
- apache-spark - Pyspark:向过滤器函数添加参数
- python - csv写双引号
- python - 有没有办法将 8 通道图像传递给 CNN 的 keras?
- javascript - 以角度发射两个组件之间的属性值
- html - 为什么即使在导入依赖项后 mat-form-field 也不起作用?
- r - 通过模式匹配过滤 data.table