ctr
更换 containerd 后,以往我们常用的 docker 命令也不再使用,取而代之的是 ctr 命令客户端。
ctr 是 containerd 提供的一个客户端工具,ctr -v
输出的是 containerd 的版本。
ctr支持命名空间,ctr ns ls
命令查看命名空间,k8s相关的镜像和容器都在k8s.io命名空间下
补充:如果containerd配置了镜像加速,需要在命令中指定--hosts-dir=/etc/containerd/certs.d
,如果要确定此命令是否真的使用了镜像加速,可以增加--debug=true
参数。对于nerdctl命令来说,会自动使用/etc/containerd/certs.d目录下的配置。
crictl
crictl 是 k8s 提供的一个客户端工具,遵循 CRI 接口规范,通常用它来检査和管理kubelet节点上的容器运行时和镜像,crictl -v
输出的是当前 k8s 的版本。
使用crictl命令之前,需要先配置/etc/crictl.yaml
, (不配置的话,使用命令会一直报warn警告)
1 | cat > /etc/crictl.yam1 << 'EOF' |
也可以通过命令进行设置,自动生成/etc/crictl.yaml
1 | crictl config runtime-endpoint unix:///run/containerd/containerd.sock |
相比ctr来说,crictl不支持名称空间,或者说crictl所有的操作都在k8s.io命名空间下。
nerdctl
在习惯了使用docker-cli的情况下,很多人并不习惯使用 ctr 管理 containerd 镜像容器,于是开源社区提供了一个客户端工具nerdctl,nerdctl 与 docker-cli 风格相似,而且直接兼容 docker compose 的语法。
nerdctl需要额外安装,安装过程:
1 | wget https://github.com/containerd/nerdctl/releases/download/v1.7.6/nerdct1-1.7.6-linux-amd64.tar.gz |
补充:安装完成之后使用 nerdctl version
会有warn警告,提示 buildkit 未安装,可以到这里下载一个工具包 buildkit仓库,解压后得到一个bin目录,把这个bin目录添加到 $PATH 里去。
buildkit的详细用法参考 用buildkit和containerd构建镜像
nerdctl也支持名称空间,k8s相关的镜像和容器都在k8s.io命名空间下。
镜像相关
命令 | docker | nerdctl | ctr(containerd) | crictl(kubernetes) |
---|---|---|---|---|
查看镜像 | docker images | 同docker命令 | ctr image ls | crictl images |
拉取镜像 | docker pull | 同docker命令 | ctr image pull | ctictl pull |
推送镜像 | docker push | 同docker命令 | ctr image push | 无 |
打标签 | docker tag | 同docker命令 | ctr image tag | 无 |
导入镜像 | docker load | 同docker命令 | ctr image import | 无 |
导出镜像 | docker save | 同docker命令 | ctr image export | 无 |
删除镜像 | docker rmi | 同docker命令 | ctr image rm | crictl rmi |
查看镜像详情 | docker inspect | 同docker命令 | 无 | crictl inspecti |
登陆镜像仓库 | docker login | 同docker命令 | 不支持 | 不支持 |
容器相关
命令 | docker | nerdctl | ctr(containerd) | crictl(kubernetes) |
---|---|---|---|---|
查看运行的容器 | docker ps | 同docker命令 | ctr task ls/ctr container ls | crictl ps |
创建一个新的容器 | docker create | 同docker命令 | ctr container create | crictl create |
运行一个新的容器 | docker run | 同docker命令 | ctr run | 无(最小单元为 pod) |
启动已有的容器 | docker start | 同docker命令 | ctr task start | crictl start |
关闭已有的容器 | docker stop | 同docker命令 | ctr task kill | crictl stop |
删除容器 | docker rm | 同docker命令 | ctr container rm | crictl rm |
查看容器详情 | docker inspect | 同docker命令 | ctr container info | crictl inspect |
查看容器日志 | docker logs | 同docker命令 | 无 | crictl logs |
查看容器资源 | docker stats | 同docker命令 | 无 | crictl stats |
登录或在容器内部执行命令 | docker exec | 同docker命令 | 无 | crictl exec |
清空不用的容器 | docker image prune | 同docker命令 | 无 | crictl rmi –prune |
pod相关
命令 | docker | nerdctl | ctr(containerd) | crictl(kubernetes) |
---|---|---|---|---|
显示pod列表 | 不支持 | 不支持 | 不支持 | crictl pods |
查看pod详情 | 不支持 | 不支持 | 不支持 | crictl inspectp pod的id号 |