我想知道操作系统是如何管理Docker容器的。我可以在这里找到一些解释:https://stackoverflow.com/a/47784145/11377751,但我不能很好地理解。
我知道操作系统的基本知识(关于PCB、ram、CPU、内核、系统调用等的概念)。
但我不明白操作系统是如何管理容器的:
这是我在这里找到的一张图片:https://stackoverflow.com/a/42111368/11377751
事先非常感谢
前言:这是在ArchLinux上测试的
>
容器是过程。我们有dockerd
和containerd
——每一个都只有一次。然后我们为每个正在运行的容器设置了docker
和containerd shim
进程。请注意,containerd shim
是容器的父级。其目的是:
>
首先,它允许运行时(即runc)在启动容器后退出。这样,我们就不必为容器设置长时间运行的运行时进程。启动mysql时,应该只看到mysql进程和垫片。
第二,在集装箱和/或装卸工同时死亡的情况下,它保持STDIO和其他FD为集装箱打开。如果垫片未运行,则管道的母侧或TTY主机将关闭,容器将退出。
最后,它允许将容器的退出状态报告给更高级别的工具,如docker,而不必成为容器进程的实际父进程并进行等待4。
(摘自https://groups.google.com/forum/#!topic/docker dev/zaZFlvIx1_k)
编辑:快速回答:C应用程序调用fork
和malloc
=
为什么维基百科说这个概念对于容器是必不可少的
因为“各种容器软件将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