docker compose 如何在引擎盖下工作?



docker-compose究竟是如何工作的?文档只提到并行运行多个服务,而没有提到如何运行。我知道映像是构建和运行的,但它们是如何并行运行的?

它是否类似于在不同的操作系统进程中运行其每个服务的主管?是否将所有服务包装在一个容器中?

幕后如何处理?

运行docker-compose up --verbose仅显示以下内容,我不确定这意味着什么:

compose.parallel.feed_queue: Starting producer thread for <Service: web>
docker-compose

为每个服务创建 docker 容器。这类似于使用 docker-compose.yml 文件中提到的每个服务的docker run命令手动创建容器。

它还做一些额外的事情,比如创建一个网络并将所有容器连接到网络,可以选择从dockerfile构建镜像等。

如果它有助于澄清事情,docker compose 与 docker 堆栈非常相似(历史上它们是不同的,stack现在被合并到 docker 引擎本身中,但它们扮演着相似的角色,并且这种相似性随着时间的推移而增加(。从根本上说,它是一个Python程序。它真正做的只是解析 YAML 文件,以确定需要满足的一组依赖项,以便允许构建和启动容器。它满足这些依赖项,然后启动容器。它通过允许将一组容器及其依赖项视为单个单元来为docker添加功能,但在幕后,它只是API调用。

就 docker 本身而言,它与底层内核紧密集成,并使用称为"命名空间"的概念,允许对内核级资源(即进程树、网络、磁盘挂载等(进行分区。可以为每个容器分配自己的一组独立的内核资源来运行。如何在主机级别管理这涉及/proc下的一些诡计。来自维基百科:

内核在/proc/[pid]/ns/中为每个进程分配每个命名空间类型的符号链接。此符号链接指向的索引节点编号对于此命名空间中的每个进程都是相同的。这通过其符号链接之一指向的索引节点编号唯一标识每个命名空间。

通过 readlink 读取符号链接将返回一个字符串,其中包含命名空间的种类名称和命名空间的索引节点号。

相关内容

  • 没有找到相关文章

最新更新