替代容器執行時
Docker Engine 使用 containerd 來管理容器生命週期,包括建立、啟動和停止容器。預設情況下,containerd 使用 runc 作為其容器執行時。
我可以使用哪些執行時?
您可以使用任何實現了 containerd shim API 的執行時。這類執行時自帶一個 containerd shim,無需任何額外配置即可使用。請參閱使用 containerd shims。
實現了自己的 containerd shims 的執行時示例包括
您還可以使用被設計為 runc 的直接替代品的執行時。這類執行時依賴於 runc containerd shim 來呼叫執行時二進位制檔案。您必須在守護程序配置中手動註冊這類執行時。
youki 是一個可以作為 runc 直接替代品的執行時示例。請參考解釋設定的 youki 示例。
使用 containerd shims
containerd shims 讓您可以使用備用執行時,而無需更改 Docker 守護程序的配置。要使用 containerd shim,請在執行 Docker 守護程序的系統上,將 shim 二進位制檔案安裝到 PATH
中。
要透過 docker run
使用 shim,請將執行時的完全限定名稱指定為 --runtime
標誌的值
$ docker run --runtime io.containerd.kata.v2 hello-world
在不安裝到 PATH 的情況下使用 containerd shim
您可以在不將 shim 安裝到 PATH
的情況下使用它,這種情況下,您需要在守護程序配置中按如下方式註冊該 shim
{
"runtimes": {
"foo": {
"runtimeType": "/path/to/containerd-shim-foobar-v1"
}
}
}
要使用該 shim,請指定您為其分配的名稱
$ docker run --runtime foo hello-world
配置 shims
如果您需要為 containerd shim 傳遞額外配置,可以使用守護程序配置檔案中的 runtimes
選項。
透過為您想要配置的 shim 新增一個
runtimes
條目來編輯守護程序配置檔案。- 在
runtimeType
鍵中指定執行時的完全限定名稱 - 在
options
鍵下新增您的執行時配置
{ "runtimes": { "gvisor": { "runtimeType": "io.containerd.runsc.v1", "options": { "TypeUrl": "io.containerd.runsc.v1.options", "ConfigPath": "/etc/containerd/runsc.toml" } } } }
- 在
重新載入守護程序的配置。
# systemctl reload docker
使用
docker run
的--runtime
標誌來使用自定義的執行時。$ docker run --runtime gvisor hello-world
有關 containerd shims 配置選項的更多資訊,請參閱配置 containerd shims。
示例
以下示例向您展示如何設定和使用備用容器執行時與 Docker Engine。
youki
youki 是一個用 Rust 編寫的容器執行時。youki 聲稱比 runc 更快且佔用更少的記憶體,這使其成為資源受限環境的理想選擇。
youki 可作為 runc 的直接替代品,這意味著它依賴 runc shim 來呼叫執行時二進位制檔案。當您註冊作為 runc 替代品的執行時,您需要配置執行時可執行檔案的路徑,以及可選的一組執行時引數。更多資訊,請參閱配置 runc 直接替代品。
要將 youki 新增為容器執行時
安裝 youki 及其依賴項。
有關說明,請參閱官方設定指南。
透過編輯 Docker 守護程序配置檔案(預設位於
/etc/docker/daemon.json
)將 youki 註冊為 Docker 的執行時。path
鍵應指定您安裝 youki 的路徑。# cat > /etc/docker/daemon.json <<EOF { "runtimes": { "youki": { "path": "/usr/local/bin/youki" } } } EOF
重新載入守護程序的配置。
# systemctl reload docker
現在,您可以執行使用 youki 作為執行時的容器。
$ docker run --rm --runtime youki hello-world
Wasmtime
Wasmtime 是一個 位元組碼聯盟 專案,也是一個讓您能夠執行 Wasm 容器的 Wasm 執行時。使用 Docker 執行 Wasm 容器提供了兩層安全保障。您不僅能獲得容器隔離帶來的所有好處,還能享受到 Wasm 執行時環境提供的額外沙箱保護。
要將 Wasmtime 新增為容器執行時,請遵循以下步驟
在守護程序配置檔案中開啟 containerd 映象儲存 功能。
{ "features": { "containerd-snapshotter": true } }
重啟 Docker 守護程序。
# systemctl restart docker
在
PATH
中安裝 Wasmtime containerd shim。以下命令 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