🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] 根据 [interacting-with-containerd-via-cli](https://github.com/containerd/containerd/blob/main/docs/getting-started.md#interacting-with-containerd-via-cli) 一文,目前主要有三种客户端工具和containerd交互: ![](https://img.kancloud.cn/7e/d8/7ed8121422f813b32cf342df0459c9ee_2048x546.png) 一般推荐使用nerdctl。 ### **ctr** `ctr`是`containerd`的一个客户端工具,在安装containerd时就会安装ctr。`ctr -v`输出的是`containerd`的版本。 由于 Containerd 有 namespaces 的概念,`ctr`客户端 主要区分了 3 个命名空间分别是`k8s.io`、`moby`和`default`。 使用`ctr`看镜像和容器列表就需要加上`-n `参数,如果没有指定`-n`则默认为default命名空间。如: ``` $ ctr -n k8s.io image pull $ ctr -n k8s.io image list $ ctr -n k8s.io run --rm -t docker.io/library/busybox:latest test-kata uname -r $ ctr -n k8s.io container list ``` ### **crictl** crictl会在安装k8s的时候自动安装,`ctr image pull` 拉取的镜像默认放在`default`命名空间,而 `crictl pull` 和 kubelet 默认拉取的镜像都在 k8s.io 命名空间下。 在使用crictl时,需要先配置`/etc/crictl.yaml` ``` runtime-endpoint:unix:///run/containerd/containerd.sock ``` ### **nerdctl** nerdctl也是containerd项目开发的一个客户端工具,它也可以指定containerd的命名空间。nerdctl的命令和docker的很相似。但是它也需要增加 -n 指定命令空间。 ### **常用命令对比** | - | docker | ctr | crictl | nerdctl | | --- | --- | --- | --- | --- | | 下载镜像 | docker pull | ctr image pull | crictl image pull | - | | 查看镜像 | docker images | ctr image list | crictl image list | - | | 删除镜像 | docker images rm | ctr image rm | crictl rmi | - | | 运行容器 | docker run | ctr run | ### **参考** * https://github.com/containerd/containerd/blob/main/docs/getting-started.md#interacting-with-containerd-via-cli * https://www.51cto.com/article/717474.html * https://github.com/projectatomic/containerd/blob/master/docs/cli.md * https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md * https://github.com/containerd/nerdctl