nerdctl

nerdctl 是 Containerd 的上层封装工具。实现了 container、volume, network 的创建和管理。与它同层次的替代方案还有 dockerpodmanK8S(K8S 的使用场景更复杂)。

nerdctl 的组成

data_root

data_root 是存储 nerdctl 数据的根目录。根据 nerdctl 的全局选项 (Global Flags) --data-root 指定。

其默认值是根据当前系统(linux,freebsd,windows)有区分,具体见源码。linux 系统下

data_root 是根据 nerdctl run –data-root 指定的路径。 linux 系统下,如果是 rootful 模式,默认值 /var/lib/nerdctl。如果是 rootless 模式,默认值是 <XDGDataHome>/nerdctl

dataStore

dataStore 存储 nerdctl 的数据的目录。它的路径是 dataStore=<data_root>/<addr_hash>

addr_hash 是计算 containerd.sock 文件路径的 sha256 值的前 8 个字符。具体计算方法如下:

addr_hash=$(echo -n "/run/containerd/containerd.sock" | sha256sum | cut -c1-8)

假设 addr_hash 值是 1935db59(通常都是这个,因为 containerd.sock 路径都是用默认的),data_root 值是 /var/lib/nerdctl,那么 dataStore 值就是 /var/lib/nerdctl/1935db59

containerd.sock 文件路径可以在 config.toml(默认是 /etc/containerd/config.toml)里的 grpc.address 配置。

再来看 dataStore 下放了什么文件。

$ ls /var/lib/nerdctl/1935db59/
containers  etchosts  names  volumes

这四个目录分别是 nerdctl 所管理的容器、网络、容器名称、存储卷。