上回书说到k8s1.24版本为什么弃用docker而选择containerd作为容器运行时,这回我就来深入学习一下containerd,先从常用命令开始;
一、containerd常用基础命令
首先是containerd常用的基础命令,包括开启、关闭、查看状态等:
systemctl status containerd #查看containerd状态
systemctl start containerd #开启containerd
systemctl stop containerd #关闭containerd
systemctl restart containerd #重启containerd
systemctl enable containerd #将containerd设置为开机自启动
containerd help #查看containerd帮助
containerd version #查看containerd版本
二、docker常用操作命令:
通过查看containerd命令帮助,可以知道
ctr --help #查看containerd命令帮助
containerd常用的操作命令格式为:
ctr [global options] command [command options] [arguments...]
command命令选项如下:
| 命令 | 说明 |
| plugins, plugin | 提供有关容器插件的信息 |
| version | 打印客户端和服务器的版本 |
| containers, c, container | 容器管理 |
| content | 内容管理 |
| events, event | 显示容器事件 |
| images, image, i | 镜像管理 |
| leases | 租约管理 |
| namespaces, namespace, ns | 命名空间管理 |
| pprof | 为 containerd 提供 golang pprof 输出 |
| run | 运行容器 |
| snapshots, snapshot | 快照管理 |
| tasks, t, task | 任务管理 |
| install | 安装package |
| oci | oci工具 |
| deprecations | |
| shim | 直接与shim交互 |
| help, h | 显示命令列表或一个命令的帮助 |
global options选项如下:
| 选项 | 说明 |
| --debug | 打开日志调试 |
| --address value, -a value |
containerd的GRPC服务地址 默认 "/run/containerd/containerd.sock" |
| --timeout value | ctr命令超时时间 |
| --connect-timeout value | 连接到容器超时 |
| --namespace value, -n value |
命名空间与命令一起使用 默认 "default" |
| --help, -h | 帮助 |
| --version, -v | 版本 |
三、docker常用操作命令实践
1.查看containerd命名空间
ctr namespace ls #查看containerd命名空间

2.查看containerd的镜像
ctr images ls
因为没有指定namespace,所以查看的是默认命名空间下的镜像;

ctr -namespace=moby images ls
查看指定命名空间moby下的镜像

3.拉取containerd的镜像
ctr -n k8s.io images pull registry.aliyuncs.com/google_containers/pause-amd64:3.2
指定k8s.io为命名空间拉取pause-amd64:3.2的镜像

4.删除containerd的镜像
ctr -n k8s.io images rm sha256:80d28bedfe5dec59da9ebf8e6260224ac9008ab5c11dbbe16ee3ba3e4439ac2c
删除k8s.io下的镜像

5.导出containerd的镜像
ctr -n k8s.io images export pause.tar.gz registry.aliyuncs.com/google_containers/pause-amd64:3.2

6.导入containerd的镜像
ctr -n k8s.io image import pause.tar.gz

7.标记containerd的镜像
ctr -n k8s.io images tag registry.aliyuncs.com/google_containers/pause-amd64:3.2 pause:3.2
![]()
我经过测试发现docker save -o 命令导出来的镜像可以用ctr images import 导出;同理ctr images export导出来的镜像也可以有docker load 还原;


所以两者应该是通用的;
8.运行containerd的容器
ctr -n k8s.io run -d docker.io/library/centos:latest centos_k8s
在后台运行一个centos镜像的容器,名称叫做centos_k8s;

9.查看运行容器的task
ctr -n k8s.io task ls

在docker里面,container的概念被弱化,所以docker里面的容器应该是containers和task整合在一起的;
在containerd中,containers是镜像实例化的一个虚拟环境,提供一个磁盘、模拟空间;而task是一个初始化进程,负载运行这个虚拟环境;
10.启动指定容器的task
ctr -n k8s.io task start -d centos_k8s

11.进入指定容器的task
ctr -n k8s.io task exec --exec-id 3118 -t centos_k8s /bin/bash

12.删除指定容器的task
ctr -n k8s.io task rm -f centos_k8s

13.停止指定容器的task
ctr -n k8s.io task kill --signal 9 centos_k8s

14.查看容器
ctr -n k8s.io c list

15.删除容器
ctr -n k8s.io c rm centos

删除容器以前需要将task删除,不然会报以下错误:

四、docker与containerd常用命令对比
很明细docker与containerd命令类型,但又有不同,我总结了一下docker与containerd命令的对比:
| 说明 | docker命令 | containerd命令 |
| 查看本地镜像 | docker images | ctr images ls |
| 拉取镜像 | docker pull imagename | ctr images pull imagename |
| 推送镜像 | docker push imagename | ctr images push imagename |
| 给镜像打标签 | docker tag imagename tagname | ctr images tag imagename tagname |
| 导出镜像 | docker save filename imagename | ctr images export filename imagename |
| 导入镜像 | docker load filename | ctr image import filename |
| 运行并创建容器 | docker run [options] imagename commond |
ctr run [options] imagename containername |
| 进入容器 | docker exec [options] names commond | ctr task exec [options] names commond |
| 查看运行的容器 | docker ps | ctr task list |
| 删除容器 | docker rm [options] names |
1.ctr task rm -f names 2. ctr c rm -f names |
ps:docker可以基于dockerfile构建对象,但是ctr命令无法构建对象;
我是chililopp,正在学习k8s,之后如果有新的总结或者体验也会发出来,如果有说的不对的地方,还请指点,十分感谢阅读!
536

被折叠的 条评论
为什么被折叠?



