【问题标题】:How are docker containers stored in the ram and executed?docker 容器如何存储在 ram 中并执行?
【发布时间】:2019-09-08 14:24:17
【问题描述】:

我想知道操作系统如何管理 Docker 容器。我可以在这里找到一些解释:https://stackoverflow.com/a/47784145/11377751,但我不太理解。

我了解操作系统的基础知识(关于 PCB、内存、CPU、内核、系统调用等的概念)。

但我不明白操作系统如何管理容器:

  • 容器是进程还是它们被 Docker 引擎“模拟”(这将是唯一的进程,有它的线程)?如何在 ram 中表示容器?
  • 如果在我的容器中启动一个包含“fork();”的 C 应用程序,谁调用内核:容器还是 Docker 引擎?谁复制了pcb?还是“malloc (..);”?
  • 内核中命名空间的概念是什么?在公羊?这些表是定义访问权限还是什么?为什么 wikipedia 说这个概念对于容器来说是必不可少的,因为知道 Docker Engine 在模式中表示在容器和内核之间?

图片:

这是我在这里找到的图片:https://stackoverflow.com/a/42111368/11377751


非常感谢您

【问题讨论】:

    标签: docker process linux-kernel ram


    【解决方案1】:

    前言:这是在 Arch Linux 上测试的

    1. 容器是进程。我们有dockerdcontainerd - 他们每个人只有一次。然后我们为每个正在运行的容器提供dockercontainerd-shim 进程。请注意,containerd-shim 是容器的父级。其目的是:

      • 首先它允许运行时(即 runc)在启动容器后退出。这样我们就不必为容器提供长时间运行的运行时进程。当您启动 mysql 时,您应该只看到 mysql 进程和 shim。

      • 其次,它保持 STDIO 和其他 fd 为容器打开,以防 containerd 和/或 docker 都死了。如果 shim 没有运行,那么管道的父端或 TTY 主机将关闭,容器将退出。

      • 最后,它允许将容器的退出状态报告回更高级别的工具(如 docker),而无需成为容器进程的实际父级并执行等待 4。

    (取自https://groups.google.com/forum/#!topic/docker-dev/zaZFlvIx1_k

    1. 请阅读 2 个关于系统调用 (https://stackoverflow.com/a/32842491/5247040) 和 docker 部分角色 (https://stackoverflow.com/a/46650343/5247040) 的好答案。另一本好书https://medium.com/devopslinks/docker-containerd-standalone-runtimes-heres-what-you-should-know-b834ef155426

    编辑: 快速回答:C 应用程序调用 forkmalloc => Linux 内核。 我错了,Docker Engine 不参与系统调用,所有控制都通过命名空间/seccomp (https://stackoverflow.com/a/34871045/5247040)

    1. ram 中命名空间的表示有很大不同,您可以查看源代码

    为什么维基百科说这个概念对容器至关重要

    因为“各种容器软件使用 Linux 命名空间结合 cgroup 来隔离它们的进程,包括 Docker[8] 和 LXC”(https://en.wikipedia.org/wiki/Linux_namespaces

    命名空间基本上是一种工具,Docker Engine 用它来控制容器的资源

    【讨论】:

    • C application calls fork and malloc => Docker Engine => Linux kernel - 你能更彻底地阐述这一点来证明这个说法吗?它在普通设置中如何工作以及在 Docker 引擎停止时如何工作(实时恢复模式)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多