替代容器运行时
Docker Engine 使用 containerd 来管理容器生命周期, 这包括创建、启动和停止容器。 默认情况下,containerd 使用 runc 作为其容器运行时。
我可以使用哪些运行时?
您可以使用任何实现了 containerd shim API 的运行时。这些运行时附带 containerd shim,您可以直接使用它们而无需任何额外配置。请参阅 使用 containerd shim。
实现自己的 containerd shims 的运行时示例包括:
您还可以使用设计为 runc 替代品的运行时。此类运行时依赖于 runc containerd shim 来调用运行时Binaries。您必须在守护进程配置中手动注册此类运行时。
youki 是可作为 runc 直接替代品运行时的一个示例。 请参阅 youki 示例 了解设置说明。
使用 containerd shims
containerd shims 让您可以在不更改 Docker 守护进程配置的情况下使用其他运行时。要使用 containerd shim,请在运行 Docker 守护进程的系统上安装 shim Binaries PATH。
要使用带有 docker run 的垫片,请将运行时的完全限定名称指定为 --runtime 标志的值:
$ docker run --runtime io.containerd.kata.v2 hello-world
在不安装到 PATH 的情况下使用 containerd shim
您可以在 PATH 上不安装 shim 的情况下使用它,这种情况下您需要
在守护进程配置中注册 shim,如下所示:
{
"runtimes": {
"foo": {
"runtimeType": "/path/to/containerd-shim-foobar-v1"
}
}
}要使用 shim,请指定您为其分配的名称:
$ docker run --runtime foo hello-world
配置垫片
如果您需要为 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 shims 配置选项的更多信息,请参阅 Configure containerd shims。
示例
以下示例向您展示如何设置和使用 Docker Engine 的替代容器运行时。
youki
youki 是一个用 Rust 编写的容器运行时。 youki 声称比 runc 更快且占用更少的内存, 这使其成为资源受限环境的一个良好选择。
youki 充当 runc 的直接替代品,这意味着它依赖 runc shim 来调用运行时Binaries。当您注册充当 runc 替代品的运行时时,您需要配置运行时可执行文件的路径,并可选择配置一组运行时参数。有关更多信息,请参阅 配置 runc 直接替代品。
要将 youki 添加为容器运行时:
安装 youki 及其依赖项。
如需说明,请参阅 官方设置指南。
通过编辑 Docker 守护进程配置文件将 youki 注册为 Docker 的运行时,该文件默认位于
/etc/docker/daemon.json。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 Binaries 并将其导出到
./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将Binaries放在
PATH上的目录中。$ mv ./containerd-shim-wasmtime-v1 /usr/local/bin
现在您可以运行使用 Wasmtime 作为运行时的容器。
$ docker run --rm \
--runtime io.containerd.wasmtime.v1 \
--platform wasi/wasm32 \
michaelirwin244/wasm-example