替代容器執行環境

Docker 引擎使用 containerd 來管理容器生命週期,包括建立、啟動和停止容器。預設情況下,containerd 使用 runc 作為其容器執行階段。

我可以使用哪些執行階段?

您可以使用任何實作 containerd shim API使用 containerd shim

實作自身 containerd shim 的執行階段範例包括

您也可以使用設計為 runc 直接替代品的執行階段。此類執行階段依賴 runc containerd shim 來叫用執行階段二進位檔。您必須在守護行程設定中手動註冊此類執行階段。

youki 是一個可以作為 runc 直接替代方案的執行環境範例。參考說明設定的 youki 範例

使用 containerd shim

containerd shim 讓您無需更改 Docker daemon 的設定即可使用替代執行環境。若要使用 containerd shim,請在執行 Docker daemon 的系統上將 shim 二進制檔案安裝到 PATH 中。

若要搭配 docker run 使用 shim,請將執行環境的完整名稱指定為 --runtime 旗標的值。

$ docker run --runtime io.containerd.kata.v2 hello-world

使用未安裝在 PATH 上的 containerd shim

您可以在未將 shim 安裝到 PATH 的情況下使用它,此時您需要在 daemon 設定中註冊 shim,如下所示:

{
  "runtimes": {
    "foo": {
      "runtimeType": "/path/to/containerd-shim-foobar-v1"
    }
  }
}

若要使用 shim,請指定您分配給它的名稱。

$ docker run --runtime foo hello-world

設定 shim

如果您需要為 containerd shim 傳遞額外的設定,可以使用 daemon 設定檔中的 runtimes 選項。

  1. 透過為您要設定的 shim 新增 runtimes 項目來編輯 daemon 設定檔。

    • runtimeType 鍵中指定執行環境的完整名稱。
    • options 鍵下新增您的執行環境設定。
    {
      "runtimes": {
        "gvisor": {
          "runtimeType": "io.containerd.runsc.v1",
          "options": {
            "TypeUrl": "io.containerd.runsc.v1.options",
            "ConfigPath": "/etc/containerd/runsc.toml"
          }
        }
      }
    }
  2. 重新載入 daemon 的設定。

    # systemctl reload docker
    
  3. 使用 docker run--runtime 旗標來使用自訂的執行環境。

    $ docker run --runtime gvisor hello-world
    

有關 containerd shim 的設定選項的更多資訊,請參閱 設定 containerd shims

範例

以下範例示範如何使用 Docker Engine 設定和使用替代容器執行環境。

youki

youki 是一個以 Rust 編寫的容器執行環境。youki 聲稱比 runc 更快且使用更少的記憶體,使其成為資源受限環境的良好選擇。

youki 可作為 runc 的直接替代方案,這表示它依賴 runc shim 來呼叫執行環境二進制檔案。當您註冊作為 runc 替代方案的執行環境時,您需要設定執行環境可執行檔的路徑,以及選擇性的一組執行環境引數。更多資訊,請參閱 設定 runc 直接替代方案

若要新增 youki 作為容器執行環境:

  1. 安裝 youki 及其相依性。

    有關說明,請參閱 官方設定指南

  • 重新載入 daemon 的設定。

  • 現在您可以執行使用 youki 作為執行環境的容器。

    Wasmtime

    Wasmtime 是一個 Bytecode Alliancecontainerd 映像存放區 功能。

    注意

    這是一項實驗性功能。

    {
      "features": {
        "containerd-snapshotter": true
      }
    }
  • 重新啟動 Docker daemon。

    # systemctl restart docker
    
  • 將 Wasmtime containerd shim 安裝到 PATH 中。

    以下 Dockerfile 命令會從原始碼建構 Wasmtime 二進制檔案,並將其匯出到 ./containerd-shim-wasmtime-v1

    $ docker build --output . - <<EOF
    FROM rust:latest as build
    RUN cargo install \
        --git https://github.com/containerd/runwasi.git \
        --bin containerd-shim-wasmtime-v1 \
        --root /out \
        containerd-shim-wasmtime
    FROM scratch
    COPY --from=build /out/bin /
    EOF
    

    將二進制檔案放在 PATH 中的目錄中。

    $ mv ./containerd-shim-wasmtime-v1 /usr/local/bin
    
  • 現在您可以執行使用 Wasmtime 作為執行環境的容器。

    $ docker run --rm \
     --runtime io.containerd.wasmtime.v1 \
     --platform wasi/wasm32 \
     michaelirwin244/wasm-example