我想知道Docker容器是如何由操作系统管理的。我可以在这里找到一些解释:https://stackoverflow.com/a/47784145/11377751,但我不太了解。
我了解操作系统的基础知识(有关PCB,ram,CPU,内核,系统调用等的概念)。
但是我不明白操作系统如何管理容器:
图片:
这是我在这里找到的图片:https://stackoverflow.com/a/42111368/11377751
非常感谢
答案 0 :(得分:3)
前言:这已在Arch Linux上进行了测试
容器是进程。我们有dockerd
和containerd
-每个都只有一次。然后,每个正在运行的容器都有docker
和containerd-shim
进程。注意,containerd-shim
是容器的父级。目的是:
首先,它允许运行时(即runc)在启动容器后退出。这样,我们不必为容器设置长时间运行的运行时进程。启动mysql时,您应该只会看到mysql进程和填充程序。
第二,在容器和/或docker都死了的情况下,它会为容器保持STDIO和其他fds打开。如果垫片未运行,则管道的父侧或TTY主设备将关闭,容器将退出。
最后,它允许将容器的退出状态报告回给更高级别的工具(如docker),而不必成为容器进程的实际父级并执行wait4。
(摘自https://groups.google.com/forum/#!topic/docker-dev/zaZFlvIx1_k)
编辑:快速解答:C应用程序调用{{1}}和fork
=> Linux内核。
我错了,Docker Engine不参与系统调用,所有控制都是通过名称空间/ malloc
(https://stackoverflow.com/a/34871045/5247040)
为什么维基百科说这个概念对于容器是必不可少的
因为“各种容器软件将Linux命名空间与cgroup结合使用来隔离其进程,包括Docker [8]和LXC”(https://en.wikipedia.org/wiki/Linux_namespaces)
基本上,名称空间是工具,Docker Engine通过该工具控制容器的资源