Docker守护进程依赖于 OCI兼容的运行(通过调用containerd后台程序)作为其接口Linux内核namespaces,cgroups以及SELinux。
默认情况下,Docker守护程序会自动启动containerd。如果要控制containerd启动,请手动启动containerd并containerd使用该--containerd标志将路径传递到socket。例如:
$ sudo dockerd --containerd /var/run/dev/docker-containerd.sock
可以通过配置文件或使用--add-runtime命令行参数在守护程序中注册运行时。
以下是通过配置添加2个运行时的示例:
{
"default-runtime": "runc",
"runtimes": {
"runc": {
"path": "runc"
},
"custom": {
"path": "/usr/local/bin/my-runc-replacement",
"runtimeArgs": [
"--debug"
]
}
}
}
这是通过命令行的相同示例:
$ sudo dockerd --add-runtime runc=runc --add-runtime custom=/usr/local/bin/my-runc-replacement
您可以使用--exec-opt标志指定的选项来配置运行时。所有标志的选项都有native前缀。单个native.cgroupdriver选项可用。
该native.cgroupdriver选项指定了容器cgroup的管理。您只能指定cgroupfs或systemd。如果您指定 systemd它不可用,则系统会出错。如果省略该 native.cgroupdriver选项, cgroupfs则使用。
本示例将设置cgroupdriver为systemd:
$ sudo dockerd --exec-opt native.cgroupdriver=systemd
设置此选项适用于守护程序启动的所有容器。
Windows容器也将其--exec-opt用于特殊目的。Docker用户可以以此指定默认的容器隔离技术,例如:
> dockerd --exec-opt isolation=hyperv
将成为hypervWindows上的默认隔离技术。如果在守护程序启动时未指定隔离值,则在Windows客户端上,默认值为 hyperv,在Windows服务器上,默认值为process。