引言
这是系列文章的第三篇,在第一篇文章中,我概述了容器运行时,同时介绍了低级容器运行时与高级容器运行时之间的区别;在第二篇文章中我具体介绍了低级容器运行时,并构建了一个简略的低级容器运行时。高级容器运行时的技术栈要高于低级容器运行时,低级容器运行时负责容器的理论运行,而高级容器运行时负责容器镜像额传输和治理。
通常,高级运行时提供了守护程序应用程序和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 listID NAME SIZE IMPORT TIME LAST USEDsha512-07738c36c639 coreos.com/rkt/stage1-fly:1.30.0 44MiB 2 minutes ago 2 minutes agosha512-51ea8f513d06 coreos.com/oem-gce:1855.5.0 591MiB 2 minutes ago 2 minutes agosha512-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仿佛并没有失去踊跃倒退,但它是一个乏味的工具,并且是容器技术历史上的重要组成部分。