替代容器运行时
Docker Engine 使用 containerd 管理容器生命周期,包括创建、启动和停止容器。默认情况下,containerd 使用 runc 作为其容器运行时。
我可以使用哪些运行时?
您可以使用任何实现 containerd shim API 的运行时。此类运行时与 containerd shim 捆绑在一起,您可以无需任何额外配置即可使用它们。请参阅 使用 containerd shim。
实现自身 containerd shim 的运行时示例包括
您还可以使用设计为 runc 的直接替代品的运行时。此类运行时依赖于 runc containerd shim 来调用运行时二进制文件。您必须在守护程序配置中手动注册此类运行时。
youki 是可以作为 runc 直接替代品的运行时的一个示例。请参阅 youki 示例,了解设置说明。
使用 containerd shim
containerd shim 允许您使用备用运行时,而无需更改 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
配置 shim
如果您需要为 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
使用
--runtime
标志针对docker run
使用自定义运行时。$ docker run --runtime gvisor hello-world
有关 containerd shim 配置选项的更多信息,请参阅 配置 containerd shim。
示例
以下示例展示了如何在 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 是 Bytecode Alliance 项目,以及允许您运行 Wasm 容器的 Wasm 运行时。使用 Docker 运行 Wasm 容器提供了两层安全保障。您将获得容器隔离的所有优势,以及 Wasm 运行时环境提供的额外沙箱。
若要将 Wasmtime 添加为容器运行时,请执行以下步骤
在守护程序配置文件中启用 containerd 镜像存储 功能。
注意
这是一个实验性功能。
{ "features": { "containerd-snapshotter": true } }
重新启动 Docker 守护程序。
# 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