镜像基本操作
拉取镜像
与docker不同,拉取镜像时要加上 docker.io/liarary
ctr images pull docker.io/library/nginx:alpine
指定平台
–all-platforms:所有平台(amd64 、arm、386 、ppc64le 等),不加的话下载当前平台架构
–platform:指定linux/amd64平台
ctr images pull --all-platforms docker.io/library/nginx:alpine
ctr images pull --platform linux/amd64 docker.io/library/nginx:alpine
查看镜像
查看镜像可以使用 i 简写或者image
-q 只打印镜像名称
ctr image ls
ctr image ls -q
检测镜像
主要查看其中的 STATUS,complete 表示镜像是完整可用的状态
ctr image check
镜像挂载
把已下载的容器镜像挂载至当前文件系统,查看镜像中包含的内容
ctr image mount docker.io/library/nginx:alpine /root/tmp
卸载镜像
ctr image unmount /root/tmp/
镜像导出删除导入
导出
同时导出可以使用–platform导出其它平台的(例如arm)
–all-platforms为导出所有平台
ctr image export mynginx.tar docker.io/library/nginx:alpine
ctr image export --all-platforms mynginx.tar docker.io/library/nginx:alpine
删除镜像
ctr images rm docker.io/library/nginx:alpine
导入
#删除本地镜像
ctr image rm docker.io/library/nginx:alpine
#导入镜像
ctr images import mynginx.tar
ctr images import --all-platforms mynginx.tar
导入可能会出现类似于 ctr: content digest sha256:xxxxxx not found 的错误,要解决这个办法需要 pull 所有平台镜像
ctr image pull --all-platforms docker.io/library/nginx:alpine
ctr image export --all-platforms mynginx.tar docker.io/library/nginx:alpine
ctr image rm docker.io/library/nginx:alpine
ctr image import mynginx.tar
镜像打标签
ctr images tag docker.io/library/nginx:alpine docker.io/bongmu/nginx:alpine
推送镜像
这个有问题
ctr images push docker.io/bongmu/nginx:alpine
#推送镜像到带认证的镜像仓库
ctr images push --user bongmu:xx docker.io/bongmu/nginx:alpine
命名空间操作
containerd相比于docker,多了namespace概念,每个image和containe都会在各自的namespace下可见
查看命名空间
ctr namespaces ls
创建命名空间
ctr namespaces create test
删除命名空间
ctr namespaces rm test
默认containerd会使用default命名空间,Kubernetes 下使用的 containerd 默认命名空间是 k8s.io,Docker 使用的 containerd 下面的命名空间默认是 moby。下载镜像的时候命名空间只如果不指定,默认是看不到,这点和k8s namespace作用相同。有了命名空间后就可以在操作资源的时候指定 namespace
ctr -n test images pull --all-platforms docker.io/library/nginx:alpine
查看命名空间镜像
ctr -n test images ls
创建静态容器
ctr container create docker.io/library/nginx:alpine nginx
nginx 指定容器名称 使用 ctr container create 命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。这个 container 对象只是包含了运行一个容器所需的资源及配置的数据结构,例如:namespaces、rootfs 和容器的配置都已经初始化成功了,只是用户进程(本案例为nginx)还没有启动。需要使用ctr tasks命令才能获取一个动态容器。
查看容器
ctr container ls -q
#查看容器详细配置,类似于 docker inspect 功能
ctr container info nginx
删除容器
ctr container rm nginx
容器任务
container create 命令创建的容器,并没有处于运行状态,只是一个静态的容器。一个 container 对象只是包含了运行一个容器所需的资源及相关配置数据,表示 namespaces、rootfs 和容器的配置都已经初始化成功了,只是用户进程还没有启动。一个容器真正运行起来是由 Task 任务实现的,Task 可以为容器设置网卡,还可以配置工具来对容器进行监控等。操作容器实际上是对容器进程操作
静态容器启动为动态容器
将静态容器启动为动态容器 ,使用 ctr task 命令 Task 相关操作可以通过 ctr task 获取,如下我们通过 Task 来启动容器
ctr task start -d nginx
#-d是一个命令行选项,它的全称是--detach。这个选项告诉ctr task start命令在启动任务后立即返回,让任务在后台运行
查看容器进程
ctr task ls
ctr task ps nginx
exec终端操作
ctr task exec --exec-id 0 -t nginx sh
#注意 --exec-id参数 为 exec 进程设定一个id,可以随意输入,只要保证唯一即可,也可使用$RANDOM变量
运行一个动态容器
ctr run -d --net-host docker.io/library/nginx:alpine nginx2
ctr c ls
ctr task ls
#-d 代表dameon,后台运行
#--net-host 代表容器的IP就是宿主机的IP(相当于docker里的host类型网络)
进入容器
ctr task exec --exec-id 1 -t nginx2 /bin/sh
暂停容器进程
ctr task pause nginx
恢复容器进程
ctr task resume nginx
杀死容器进程
ctr 没有 stop 容器的功能,只能暂停或者杀死容器进程,然后在删除容器杀死容器进程可以使用 task kill 命令
ctr task kill nginx
删除进程
杀掉容器后可以看到容器的状态变成了 STOPPED。同样也可以通过 task rm 命令删除 Task
ctr task rm nginx
删除进程之后才可以删除容器
ctr container rm nginx
查看容器进程资源
使用 task metrics 命令用来获取容器的内存、CPU 和 PID 的限额与使用量
ctr task metrics nginx