如何在云计算基础架构平台中创建云主机
120
2023-10-25
【摘要】 本书摘自《基于Kubernetes的容器云平台实战》一书中第2章,第1节,由陆平、左奇、付光和张晗等编著。
第2章 容器引擎
容器引擎是容器的核心内容,主要是通过容器提供的命令进行容器相关的操作及容器 状态的转换。通过Docker 的 API 或 Docker 的 Event可以获取容器生命周期中各个状态的 变化。具体的容器状态变化及执行的命令如图2-1所示。
本章首先大致描述容器引擎的实现原理,然后对这些命令及状态转换进行简单说明, 帮助读者了解如何创建容器、显示容器状态、访问运行状态容器以及暂停、终止和删除容 器等操作。这里是基于Docker-ce 18.04版本来介绍具体命令的,这些命令通过Restful 形式的接口访问 Docker 引擎来实现。
2.1 容器引擎实现原理
如果读者希望不仅了解Docker 所提供的命令以及API 的功能和各种选项,而且能够 了解这些功能和选项的含义,那么就首先需要了解其实现机制。前面已经对当前 Docker 在 Linux系统下的实现架构和利用的部分操作系统特性进行了介绍,而且提到了在此架构中由 Dockerd、Containerd和 RunC 等多个组件配合完成整个容器生命周期的管理功能。那么, 这些组件又是如何配合来完成各项功能的呢?由于每个组件都为其调用者提供了外部接口, 那么从这些接口入手来介绍,无疑可以方便地构建出整个容器引擎的功能图景。
直接为Docker 命令行工具服务的是Dockerd 守护进程,它调用Containerd 提供的接 口,并进一步通过Containerd-shim 调用RunC 工具实现各种容器引擎功能。这几个功能组 件之间形成了从上到下三层的相互调用关系, 一共有四个功能接口需要加以介绍。很显然, 要么从最上层的Dockerd API接口开始介绍,要么从最底层的工具接口开始。考虑到如果从 最顶层开始介绍,难免使得读者对底层的实现产生疑惑,因此这里采用自底向上的方式来 介绍它们,首先介绍的是 RunC 工具的功能接口。
其实, RunC 工具并不是以后台守护进程的方式运行,它只是一个二进制可执行程序。 外部程序是通过不同的命令行选项来触发它以执行不同的容器管理功能的。那么,对其外 部接口介绍实际上就是对各个命令行子命令的功能介绍。如表2-1所示。
在对容器架构进行介绍的时候已经提到,实现Containerd-shim的目的主要是避免容 器中出现僵尸进程并减轻容器处理系统信号的负担。该组件其实是可选的,但是在目前 Dockerd自动生成的Containerd的启动配置文件中,已经将该组件设为启用,因此这里要 介绍其接口功能,以便读者了解 Containerd是如何调用RunC 的。这里说该组件是可选的, 并不是说不启用该接口时下面介绍的那些功能就消失了,而是说这些功能不再以gRPC 接 口的形式提供,而是通过内部函数调用的方式完成,同时shim 的专门职责就需要其他程序 来负责了。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~