Container Runtimes (三):高级容器运行时

引言

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

一般,高级运行时提供了守护程序应用程序和API,远程应用程序可使用它们来逻辑运行容器并对其进行监视,但 它们位于底层运行时或委托给底层运行时或其余高层运行时进行实际工做。docker

高级运行时还能够提供听起来有些低级的功能,但这些功能能够在计算机上的各个容器中使用。 例如,其中一个功能多是网络名称空间的管理,并容许容器加入另外一个容器的网络名称空间。服务器

这里有一个概念图,用于了解各个组件如何组合在一块儿:
image.png网络

高级运行时示例

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

Docker

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

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

它是第一个流行的运行时,它整合了在构建和运行容器的生命周期中所需的所有功能。spa

Docker最初同时实现了高级和低级运行时功能,但后来这些部分被分解为runc和容器化的单独项目。 Docker如今包括dockerd守护程序,docker-containerd守护程序以及docker-runc。 docker-containerd和docker-runc只是Docker打包的“香草”容器和runc的版本。
image.png
dockerd提供诸如构建镜像之类的功能,而dockerd使用docker-containerd提供诸如镜像管理和运行中的容器之类的功能。 例如,Docker的构建步骤实际上只是一些逻辑,该逻辑解释Dockerfile,使用containerd在容器中运行必要的命令,并将生成的容器文件系统保存为镜像。命令行

containerd

containerd是从Docker分离出来的高级运行时。 就像runc同样被分解为低级运行时组件,containered也被分解为Docker的高级运行时组件。 3d

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彷佛并无获得积极发展,但它是一个有趣的工具,而且是容器技术历史上的重要组成部分。

相关文章
相关标签/搜索