关于container:Container-Runtimes-三高级容器运行时

5次阅读

共计 2223 个字符,预计需要花费 6 分钟才能阅读完成。

引言

这是系列文章的第三篇,在第一篇文章中,我概述了容器运行时,同时介绍了低级容器运行时与高级容器运行时之间的区别;在第二篇文章中我具体介绍了低级容器运行时,并构建了一个简略的低级容器运行时。高级容器运行时的技术栈要高于低级容器运行时,低级容器运行时负责容器的理论运行,而高级容器运行时负责容器镜像额传输和治理。

通常,高级运行时提供了守护程序应用程序和 API,近程应用程序能够应用它们来逻辑运行容器并对其进行监督,但 它们位于底层运行时或委托给底层运行时或其余高层运行时进行理论工作。

高级运行时还能够提供听起来有些低级的性能,但这些性能能够在计算机上的各个容器中应用。例如,其中一个性能可能是网络名称空间的治理,并容许容器退出另一个容器的网络名称空间。

这里有一个概念图,用于理解各个组件如何组合在一起:

高级运行时示例

为了更好地了解高级运行时,请看一些示例。像低级运行时一样,每个运行时都实现了不同的性能。

Docker

Docker 是最早的开源容器运行时之一。它是由提供 PaSS 服务的公司 dotCloud 开发的,用于在容器中运行其用户的 Web 应用程序。

Docker 是一个容器运行时,其中蕴含构建,打包,共享和运行容器。Docker 具备 C / S 架构,最后是作为整体守护程序,dockerd 和 docker client 程序构建的。该守护程序提供了构建容器,治理镜像和运行容器的大多数逻辑,以及一个 API,能够从客户端命令行运行命令从守护程序获取信息。

它是第一个风行的运行时,它整合了在构建和运行容器的生命周期中所需的全副性能。

Docker 最后同时实现了高级和低级运行时性能,但起初这些局部被合成为 runc 和容器化的独自我的项目。Docker 当初包含 dockerd 守护程序,docker-containerd 守护程序以及 docker-runc。docker-containerd 和 docker-runc 只是 Docker 打包的“香草”容器和 runc 的版本。

dockerd 提供诸如构建镜像之类的性能,而 dockerd 应用 docker-containerd 提供诸如镜像治理和运行中的容器之类的性能。例如,Docker 的构建步骤实际上只是一些逻辑,该逻辑解释 Dockerfile,应用 containerd 在容器中运行必要的命令,并将生成的容器文件系统保留为镜像。

containerd

containerd 是从 Docker 分离出来的高级运行时。就像 runc 一样被合成为低级运行时组件,containered 也被合成为 Docker 的高级运行时组件。

containerd 实现下载镜像,治理镜像以及从镜像运行容器。当须要运行容器时,它将镜像解压缩到 OCI runtime bundle 中,而后将其打包到 runc 来运行它。

容器化还提供了可用于与其交互的 API 和客户端应用程序,容器命令行客户端是 ctr。

ctr 相干命令
提取容器镜像:

$ sudo ctr images pull docker.io/library/redis:latest

列出以后所有镜像:

$ sudo ctr images list

从镜像运行一个容器:

$ sudo ctr container create docker.io/library/redis:latest redis

列出运行的容器:

$ sudo ctr container list

进行容器:

$ sudo ctr container delete redis

这些命令相似于用户与 Docker 交互的形式,然而,与 Docker 相比,containerd 只专一于运行中的容器,因而它不提供构建容器的机制。Docker 专一于最终用户和开发人员用例,而 containerd 则专一于操作具体的容器实例,例如在服务器上运行容器,而诸如构建容器镜像之类的工作留给其余工具解决。

rkt

在上一篇文章中,我提到 rkt 同时具备低级和高级性能的运行时,与 Docker 一样,rkt 容许您构建容器镜像,在本地存储库中获取和治理容器镜像,并通过单个命令运行它们。rkt 不足 Docker 的性能,因为它不提供长期运行的守护程序和近程 API。

你能够应用如下命令获取近程镜像:

$ sudo rkt fetch coreos.com/etcd:v3.3.10

列出本地镜像:

$ sudo rkt image list
ID                      NAME                                    SIZE    IMPORT TIME     LAST USED
sha512-07738c36c639     coreos.com/rkt/stage1-fly:1.30.0        44MiB   2 minutes ago   2 minutes ago
sha512-51ea8f513d06     coreos.com/oem-gce:1855.5.0             591MiB  2 minutes ago   2 minutes ago
sha512-2ba519594e47     coreos.com/etcd:v3.3.10                 69MiB   25 seconds ago  24 seconds ago

删除镜像:

$ sudo rkt image rm coreos.com/etcd:v3.3.10                       
successfully removed aci for image: "sha512-2ba519594e4783330ae14e7691caabfb839b5f57c0384310a7ad5fa2966d85e3"
rm: 1 image(s) successfully removed

只管 rkt 仿佛并没有失去踊跃倒退,但它是一个乏味的工具,并且是容器技术历史上的重要组成部分。

正文完
 0