gpt4 book ai didi

docker - docker容器是如何存储在ram中并执行的?

转载 作者:行者123 更新时间:2023-12-02 11:36:47 25 4
gpt4 key购买 nike

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

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

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

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

图像:

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

<小时/>

提前非常感谢

最佳答案

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

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

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

    • 其次,它会保持 STDIO 和其他 fd 对容器保持打开状态,以防 Containerd 和/或 docker 都死掉。如果 shim 没有运行,那么管道的父端或 TTY master 将关闭,容器将退出。

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

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

  • 请阅读关于系统调用 ( https://stackoverflow.com/a/32842491/5247040 ) 和 docker 部件的角色 ( https://stackoverflow.com/a/46650343/5247040 ) 的 2 个很好的答案。又一篇好读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 )

  • ram中命名空间的表示有很大不同,你可以查看源代码
  • Why does wikipedia say that this notion is essential for containers

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

    命名空间基本上是 Docker Engine 控制容器资源的工具

    关于docker - docker容器是如何存储在ram中并执行的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55742794/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com