1、容器運行時,傳統意義上來說就是代表容器從拉取鏡像到啟動運行再到中止的整個生命周期
2、OCI標准:
Docker 公司與 CoreOS 和 Google 共同創建了 OCI (Open Container Initial),並提供了兩種規范:
- 運行時規范(https://github.com/opencontainers/runtime-spec)
描述如何運行filesystem bundle
- 鏡像規范(https://github.com/opencontainers/image-spec)
制定鏡像格式、操作等
3、docker和runC的關系
runC是一個根據OCI標准創建並運行容器的命令行工具(CLI tool)。
Docker就是基於runC創建的,簡單地說,runC就是docker中最為核心的部分,容器的創建,運行,銷毀等等操作最終都將通過調用runc完成。而runC也有自己的客戶端,后來被提取出來作為一個單獨的工具和庫。其實現了 OCI 規范,包含config.json文件和容器的根文件系統。
如何用runC,以最精簡的方式創建並運行一個容器:
(https://blog.csdn.net/weixin_30883271/article/details/97419299)。
Docker、Google等公司開源了用於運行容器的工具和庫 runc,在此之后,各種運行時工具和庫也慢慢出現,例如 rkt、containerd、cri-o 等,然而這些工具所擁有的功能卻不盡相同,有的只有運行容器(runc、lxc),而有的除此之外也可以對鏡像進行管理(containerd、cri-o)。
4、容器運行時分類: low-level 和 high-level 兩類
low-level runtime
low-level runtime :關注如何與操作系統交互,創建並運行容器,使用 namespace 和 cgroup 實現資源隔離和限制。
目前常見的 low-level runtime有:
- lmctfy -- 是Google的一個項目,它是Borg使用的容器運行時
- runc -- 目前使用最廣泛的容器運行時。
- rkt -- CoreOS開發的Docker/runc的一個流行替代方案,提供了其他 low-level runtimes (如runc)所提供的所有特性。
high-level runtime
high-level: 指包含了更多上層功能,例如 grpc調用,鏡像存儲管理等。
High-level runtimes相較於low-level runtimes位於堆棧的上層。low-level runtimes負責實際運行容器,而High-level runtimes負責傳輸和管理容器鏡像,解壓鏡像,並傳遞給low-level runtimes來運行容器。目前主流的 high-level runtime 有:
- docker
- containerd
- rkt