Linux中國

什麼是容器運行時?

在學習 容器鏡像 時,我們討論了容器的基本原理,但現在是深入研究容器 運行時 runtime 的時候了,從而了解容器環境是如何構建的。本文的部分信息摘自 開放容器計劃 Open Container Initiative (OCI)的 官方文檔,所以無論使用何種容器引擎,這些信息都是一致的。

容器運行機制

那麼,當你運行 podman rundocker run 命令時,在後台到底發生了什麼?一個分步的概述如下:

  1. 如果本地沒有鏡像,則從鏡像 登記倉庫 registry 拉取鏡像
  2. 鏡像被提取到一個寫時複製(COW)的文件系統上,所有的容器層相互堆疊以形成一個合併的文件系統
  3. 為容器準備一個掛載點
  4. 從容器鏡像中設置元數據,包括諸如覆蓋 CMD、來自用戶輸入的 ENTRYPOINT、設置 SECCOMP 規則等設置,以確保容器按預期運行
  5. 提醒內核為該容器分配某種隔離,如進程、網路和文件系統( 命名空間 namespace
  6. 提醒內核為改容器分配一些資源限制,如 CPU 或內存限制( 控制組 cgroup
  7. 傳遞一個 系統調用 syscall 給內核用於啟動容器
  8. 設置 SELinux/AppArmor

容器運行時負責上述所有的工作。當我們提及容器運行時,想到的可能是 runc、lxc、containerd、rkt、cri-o 等等。嗯,你沒有錯。這些都是容器引擎和容器運行時,每一種都是為不同的情況建立的。

容器運行時 Container runtime 更側重於運行容器,為容器設置命名空間和控制組(cgroup),也被稱為底層容器運行時。高層的容器運行時或容器引擎專註于格式、解包、管理和鏡像共享。它們還為開發者提供 API。

開放容器計劃(OCI)

開放容器計劃 Open Container Initiative (OCI)是一個 Linux 基金會的項目。其目的是設計某些開放標準或圍繞如何與容器運行時和容器鏡像格式工作的結構。它是由 Docker、rkt、CoreOS 和其他行業領導者於 2015 年 6 月建立的。

它通過兩個規範來完成如下任務:

1、鏡像規範

該規範的目標是創建可互操作的工具,用於構建、傳輸和準備運行的容器鏡像。

該規範的高層組件包括:

2、運行時規範

該規範用於定義容器的配置、執行環境和生命周期。config.json 文件為所有支持的平台提供了容器配置,並詳細定義了用於創建容器的欄位。在詳細定義執行環境時也描述了為容器的生命周期定義的通用操作,以確保在容器內運行的應用在不同的運行時環境之間有一個一致的環境。

Linux 容器規範使用了各種內核特性,包括 命名空間 namespace 控制組 cgroup 權能 capability 、LSM 和文件系統 隔離 jail 等來實現該規範。

小結

容器運行時是通過 OCI 規範管理的,以提供一致性和互操作性。許多人在使用容器時不需要了解它們是如何工作的,但當你需要排除故障或優化時,了解容器是一個寶貴的優勢。

本文基於 techbeatly 的文章,並經授權改編。

via: https://opensource.com/article/21/9/container-runtimes

作者:Nived V 選題:lujun9972 譯者:geekpi 校對:turbokernel

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
1
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國