docker、crictl、ctr及nerdctl命令对比【containerd管理命令】
使用docker作为容器运行时需要经过多层转换(kubelet <-> dockershim <-> docker <-> containerd),这会导致连接不稳定和性能下降。K8s从v1.24版本开始,不再支持docker容器运行时,而是默认使用containerd使用k8s自带的crictl命令。crictl是一个符合CRI接口规范的命令行工具,可以用它来检查和管理kubelet节点上的容器
·
containerd管理命令介绍
使用docker作为容器运行时需要经过多层转换(kubelet <-> dockershim <-> docker <-> containerd),这会导致连接不稳定和性能下降。K8s从v1.24版本开始,不再支持docker容器运行时,而是默认使用containerd
切换到containerd之后,有以下几种替代docker的管理命令:
- 使用k8s自带的crictl命令。crictl是一个符合CRI接口规范的命令行工具,可以用它来检查和管理kubelet节点上的容器运行时和镜像。
- 使用containerd自带的ctr命令。ctr是一个本地CLI工具,可以用它来管理镜像、容器、任务、快照等。因为containerd支持多个命名空间,所以ctr命令需要指定命名空间。要管理k8s创建的容器,需要使用k8s.io名字空间,即ctr -n k8s.io。
- 使用containerd额外提供的nerdctl工具。nerdctl是一个与docker兼容的containerd的命令行工具,需要额外安装。它支持一些docker没有的功能,比如延迟拉取镜像、镜像加密等。
- 使用其他第三方管理容器的开源工具。
docker、crictl和ctr命令对比
命令 | docker | crictl(k8s) | ctr(containerd) | nerdctl(containerd) |
---|---|---|---|---|
查看运行的容器 | docker ps | crictl ps | ctr task ls/ctr container ls | nerdctl ps |
查看镜像 | docker images | crictl images | ctr image ls | nerdctl images |
查看容器日志 | docker logs | crictl logs | 无 | nerdctl logs |
查看容器信息 | docker inspect | crictl inspect | ctr container info | nerdctl inspect |
查看容器资源使用 | docker stats | crictl stats | 无 | nerdctl stats |
启动/关闭已有的容器 | docker start/stop | crictl start/stop | ctr task start/kill | nerdctl start/stop |
运行一个新的容器 | docker run | 比较麻烦,因为它的最小单元为 Pod | ctr run | nerdctl run |
创建一个新的容器 | docker create | 比较麻烦,因为它的最小单元为 Pod | ctr container create | nerdctl create |
在容器内部执行命令 | docker exec | crictl exec | 无 | nerdctl exec |
删除容器 | docker rm | crictl rm | ctr container rm | nerdctl rm |
删除镜像 | docker rmi | crictl rmi | ctr image rm | nerdctl rmi |
导入镜像 | docker load | 无 | ctr image import | nerdctl load |
导出镜像 | docker save | 无 | ctr image export | nerdctl save |
拉取镜像 | docker pull | ctictl pull | ctr image pull | nerdctl pull |
给镜像打标签 | docker tag | 无 | ctr image tag | nerdctl tag |
推送镜像 | docker push | 无 | ctr image push | nerdctl push |
构建镜像 | docker build | 无 | 无 | nerdctl build (需要额外安装buildkit服务) |
注意:ctr和nerdctl命令需要指定名字空间,管理k8s创建的容器,需要使用k8s.io名字空间,即ctr/nerdctl -n k8s.io。
更多推荐
已为社区贡献1条内容
所有评论(0)