docker中runc是什麼

2021-12-30 16:00:09

在docker中,RunC是一個根據OCI標準建立並執行容器的CLI tool,一個遵循OCI標準的用來執行容器的命令列工具。runC是docker中最為核心的部分,容器的建立、執行、銷燬等等操作最終都將通過呼叫runc完成。

本教學操作環境:linux5.9.8系統、docker-1.13.1版、Dell G3電腦。

OCI 定義了容器執行時標準,runC 是 Docker 按照開放容器格式標準 Open Container Format, OCF 制定的一種具體實現。

該專案從 Docker 的 libcontainer 中遷移來,實現了容器啟停、資源隔離等功能,所以,可以直接通過該工具執行容器。

簡介

所謂容器執行時 (Container Runtime) 包括了容器管理和容器映象,Open Container Initiative, OCI 是容器執行時的工業標準,包括了:

A) 執行時標準 runtime-spec

B) 容器映象標準 image-spec

簡單來說,容器映象標準定義了容器映象的打包形式,而執行時標準定義瞭如何去執行一個容器。

RunC 是一個根據OCI標準建立並執行容器的CLI tool,是一個遵循 OCI 標準的用來執行容器的命令列工具,它也是一個 Runtime 的實現。

Docker

老版本里,使用需要呼叫 docker-runc ,而最新的 CE 版本里,直接修改為了 runc 命令。

1.png

RunC 作為容器的最底層執行環境,其上層通過 Docker 進行管理。

runC就是docker中最為核心的部分,容器的建立,執行,銷燬等等操作最終都將通過呼叫runc完成。

獨立執行

RunC 作為容器的執行態,不包含映象的管理,如果直接使用,需要先準備好映象,這裡直接使用已經構建好的 BusyBox 模板。

OCI Bundle

OCI Bundle 是指滿足 OCI 標準的一系列檔案,這些檔案包含了執行容器所需要的所有資料,它們存放在一個共同的目錄,該目錄包含以下兩項:

  • config.json 包含容器執行的設定資料;
  • 容器的 root filesystem 。

如果主機上安裝了 Docker,那麼可以使用 docker export 命令將已有映象匯出為 OCI Bundle 的格式。

生成 rootfs

直接使用 Docker 中的 BusyBox 模板。

----- 下載最新的版本
$ docker pull busybox

----- 建立rootfs
$ mkdir rootfs
$ docker export $(docker create busybox) | tar -C rootfs -xvf -

組態檔

rootfs 目錄下,包含了常見的二進位制檔案,除了根目錄之外,還需要一個 config.json 組態檔,可以通過 runc spec 命令生成設定模板。

詳細的設定可以參考 https://github.com/opencontainers/runtime-spec/blob/master/spec.md

將組態檔中的 "terminal": true 修改為 false ,否則會在建立的時候會寶 cannot allocate tty if runc will detach without setting console socket 報錯。

另外,因為關閉了終端,所以將命令修改為 "args": [ "sleep", "10000" ], 引數。

啟動

----- 建立容器並檢視狀態
# runc create mybusybox
# runc list

----- 啟動容器,並檢視狀態
# runc start mybusybox

----- 刪除容器
# runc delete mybusybox

在啟動了之後,可以通過 ps aux | grep sleep 看到具體的命令。

常用命令

----- 檢視容器狀態
# runc state mybusybox

----- 容器內執行程序
# runc ps mybusybox

----- 在容器中執行命令
# runc exec mybusybox ls

----- 停止容器內的任務
# runc kill mybusybox

----- 暫停容器內的所有程序
# runc pause mybusybox

----- 恢復容器內程序的執行
# runc resume mybusybox

----- 獲取容器的資源使用情況
# runc events mybusybox

熱遷移

就是將一個容器進行 CheckPoint 操作,並獲得一系列檔案,然後再在其它機器上啟動。

推薦學習:《》

以上就是docker中runc是什麼的詳細內容,更多請關注TW511.COM其它相關文章!