替代容器运行时
Docker Engine 使用containerd 来管理容器生命周期,包括创建、启动和停止容器。默认情况下,containerd 使用 runc 作为其容器运行时。
我可以使用哪些运行时?
您可以使用任何实现 containerd shim API的运行时。此类运行时附带了一个containerd shim,您无需任何额外配置即可使用它们。请参阅 使用 containerd 垫片。
实现自己的容器垫片的运行时示例包括:
您还可以使用设计为 runc 的直接替代品的运行时。此类运行时依赖于 runc containerd shim 来调用运行时二进制文件。您必须在守护程序配置中手动注册此类运行时。
youki 是一个可以作为 runc 直接替代品的运行时示例。请参阅 解释设置的youki 示例。
使用containerd垫片
containerd shims 允许您使用替代运行时,而无需更改 Docker 守护程序的配置。要使用 containerd shim,请在PATH
运行 Docker 守护程序的系统上安装 shim 二进制文件。
要将填充程序与 一起使用docker run
,请将运行时的完全限定名称指定为标志的值--runtime
:
$ docker run --runtime io.containerd.kata.v2 hello-world
使用 containerd shim 而不安装在 PATH 上
您可以使用垫片而不将其安装在 上PATH
,在这种情况下,您需要在守护程序配置中注册垫片,如下所示:
{
"runtimes": {
"foo": {
"runtimeType": "/path/to/containerd-shim-foobar-v1"
}
}
}
要使用该填充程序,请指定您分配给它的名称:
$ docker run --runtime foo hello-world
配置垫片
如果您需要传递 Containerd shim 的其他配置,可以使用runtimes
守护程序配置文件中的选项。
runtimes
通过添加要配置的填充程序的条目来编辑守护程序配置文件。runtimeType
在key中指定运行时的完全限定名称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 的配置选项的更多信息,请参阅 配置containerd shims。
例子
以下示例向您展示如何通过 Docker Engine 设置和使用替代容器运行时。
妖姬
youki 是一个用 Rust 编写的容器运行时。 youki 声称比 runc 更快并且使用更少的内存,这使其成为资源受限环境的不错选择。
youki 可以作为 runc 的直接替代品,这意味着它依赖于 runc shim 来调用运行时二进制文件。当您注册充当 runc 替换的运行时时,您可以配置运行时可执行文件的路径,以及一组运行时参数(可选)。有关详细信息,请参阅 配置 runc 直接替换。
要将 youki 添加为容器运行时:
安装 youki 及其依赖项。
有关说明,请参阅 官方设置指南。
/etc/docker/daemon.json
通过编辑 Docker 守护程序配置文件(默认位于),将 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 是一个 字节码联盟 项目,也是一个可让您运行 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