当前位置: 首页 > 知识库问答 >
问题:

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

华子航
2023-03-14

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

我知道操作系统的基本知识(关于PCB、ram、CPU、内核、系统调用等的概念)。

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

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

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

事先非常感谢

共有1个答案

汪胤
2023-03-14

前言:这是在ArchLinux上测试

>

  • 容器是过程。我们有dockerdcontainerd——每一个都只有一次。然后我们为每个正在运行的容器设置了dockercontainerd shim进程。请注意,containerd shim是容器的父级。其目的是:

    >

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

    第二,在集装箱和/或装卸工同时死亡的情况下,它保持STDIO和其他FD为集装箱打开。如果垫片未运行,则管道的母侧或TTY主机将关闭,容器将退出。

    最后,它允许将容器的退出状态报告给更高级别的工具,如docker,而不必成为容器进程的实际父进程并进行等待4。

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

    编辑:快速回答:C应用程序调用forkmalloc=

    • 用户名称空间https://elixir.bootlin.com/linux/v5.0.7/source/kernel/user_namespace.c

    为什么维基百科说这个概念对于容器是必不可少的

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

    基本上,名称空间是Docker引擎控制容器资源的工具

  •  类似资料:
    • 我有一篇docker文章。yml,我有一个Postgres数据库,Grafana在上面运行以查询数据。 我用命令docker compose up启动这个compose,但是如果我不想丢失任何数据,我必须运行docker compose stop,而不是docker compose down。 我还阅读了,但“提交操作将不包括安装在容器内的卷中包含的任何数据”,所以我想它对我的需求没有用。 存储创

    • 我们有一个工具需要克隆几个Git存储库来聚合文档数据。我们希望将该工具放在Docker容器中,以便在本地和使用Jenkins轻松地运行它,并实现可复制性。 Git存储库托管在专用服务器上,需要使用SSH密钥进行身份验证。因此,Docker容器必须以某种方式获得对运行容器的用户的SSH键的访问权。 我们有一个约束列表: null 在docker容器中使用SSH密钥(SSH密钥在构建时传递-我们需要运

    • 我无法用redis数据库中的数据创建docker redis容器的图像。目前,我正在这样做: 很明显,我对一些基本的东西不太了解。docker commit不是从现有容器创建新映像吗? 好吧,我一直在挖掘。hub上的默认redis图像。docker使用一个数据卷,然后将其装入容器中的/data。为了在容器之间共享此卷,必须使用以下参数启动一个新容器: 请注意,参数的顺序很重要,否则docker r

    • 作为Docker的菜鸟,考虑使用大小为几百千兆字节或更多的SQL服务器进行存储,在我看来,在容器中存储这么多是不可行的。加载一个大文件需要时间,太字节范围内的文件的合理位置是将它与容器分开装载。 在谷歌搜索这些信息几天后,询问社区似乎更符合逻辑。希望一幅画能抵得上千言万语。 SQL Server容器如何装载外部SQL Server源(mdf、ldf、ndf),因为这些源位于Fortress(请参见

    • 问题内容: 我试图了解Docker的来龙去脉,但我对保存映像的前景感到困惑。 我运行了基本的Ubuntu映像,安装了Anaconda Python和其他一些东西…那么,保存进度的最佳方法是什么?保存,提交,导出? 这些似乎都无法与VirtualBox一样工作,后者为您的虚拟机提供了一个明显的保存状态文件。 问题答案: 通常的方法至少是通过:将容器的状态冻结为新映像。 注:由于评论由anchovyl