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彷佛並無獲得積極發展,但它是一個有趣的工具,而且是容器技術歷史上的重要組成部分。

相關文章
相關標籤/搜索