Container 命令ctr、crictl 命令使用说明作者:

本文介绍了containerd的ctr命令和crictl命令的使用方法,包括查看和管理镜像、容器,以及日志操作。ctr提供了镜像的拉取、推送、标记、删除等操作,而crictl则用于容器的运行、检查和日志获取。此外,还对比了ctr与docker命令的差异,并展示了crictl的配置和各种管理容器的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Container 命令ctr、crictl 命令使用说明 关注Linux相关技术-系统运维-网络运维-脚本编程-容器-微服务-K8S-分布式-应用服务等 Akiraka

一、ctr 命令使用
Container命令ctr,crictl的用法
版本:ctr containerd.io 1.4.3
containerd 相比于docker , 多了namespace概念, 每个image和container 都会在各自的namespace下可见, 目前k8s会使用k8s.io 作为命名空间~~

1.1、查看ctr image可用操作
ctr image list, ctr i list , ctr i ls
COPY
1.2、镜像标记tag
ctr -n k8s.io i tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
注意: 若新镜像reference 已存在, 需要先删除新reference, 或者如下方式强制替换
ctr -n k8s.io i tag --force registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
COPY
1.3、删除镜像
ctr -n k8s.io i rm k8s.gcr.io/pause:3.2
COPY
1.4、拉取镜像
ctr -n k8s.io i pull -k k8s.gcr.io/pause:3.2
COPY
1.5、推送镜像
ctr -n k8s.io i push -k k8s.gcr.io/pause:3.2
COPY
1.6、导出镜像
ctr -n k8s.io i export pause.tar k8s.gcr.io/pause:3.2
COPY
1.7、导入镜像
# 不支持 build,commit 镜像
ctr -n k8s.io i import pause.tar
COPY
1.8、查看容器相关操作
ctr c
COPY
1.9、运行容器
–null-io: 将容器内标准输出重定向到/dev/null
–net-host: 主机网络
-d: 当task执行后就进行下一步shell命令,如没有选项,则会等待用户输入,并定向到容器内
–mount 挂载本地目录或文件到容器
–env 环境变量
ctr -n k8s.io run --null-io --net-host -d \
–env PASSWORD="123456"
–mount type=bind,src=/etc,dst=/host-etc,options=rbind:rw
COPY
1.10、容器日志
注意: 容器默认使用fifo创建日志文件, 如果不读取日志文件,会因为fifo容量导致业务运行阻塞

如要创建日志文件,建议如下方式创建:
ctr -n k8s.io run --log-uri file:///var/log/xx.log
COPY
二、ctr和docker命令比较
Containerd命令    Docker命令    描述
ctr task ls    docker ps    查看运行容器
ctr image ls    docker images    获取image信息
ctr image pull pause    docker pull pause    pull 应该pause镜像
ctr image push pause-test    docker push pause-test    改名
ctr image import pause.tar    docker load 镜像    导入本地镜像
ctr run -d pause-test pause    docker run -d --name=pause pause-test    运行容器
ctr image tag pause pause-test    docker tag pause pause-test    tag应该pause镜像
三、crictl 命令
3.1、crictl 配置
# 通过在配置文件中设置端点 --config=/etc/crictl.yaml
root@k8s-node-0001:~$ cat /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
COPY
3.2、列出业务容器状态
crictl inspect ee20ec2346fc5
COPY
3.3、查看运行中容器
root@k8s-node-0001:~$ crictl pods
POD ID              CREATED             STATE               NAME                                                     NAMESPACE           ATTEMPT             RUNTIME
b39a7883a433d       10 minutes ago      Ready               canal-server-quark-b477b5d79-ql5l5                       mbz-alpha           0                   (default)
COPY
3.4、打印某个固定pod
root@k8s-node-0001:~$ crictl pods --name canal-server-quark-b477b5d79-ql5l5
POD ID              CREATED             STATE               NAME                                 NAMESPACE           ATTEMPT             RUNTIME
b39a7883a433d       12 minutes ago      Ready               canal-server-quark-b477b5d79-ql5l5   mbz-alpha           0                   (default)
COPY
3.5、打印镜像
root@k8s-node-0001:~$ crictl images
IMAGE                                                          TAG                             IMAGE ID            SIZE
ccr.ccs.tencentyun.com/koderover-public/library-docker         stable-dind                     a6e51fd179fb8       74.6MB
ccr.ccs.tencentyun.com/koderover-public/library-nginx          stable                          588bb5d559c28       51MB
ccr.ccs.tencentyun.com/koderover-public/nsqio-nsq              v1.0.0-compat                   2714222e1b39d       22MB
COPY
3.6、只打印镜像 ID
root@k8s-node-0001:~$ crictl images -q
sha256:a6e51fd179fb849f4ec6faee318101d32830103f5615215716bd686c56afaea1
sha256:588bb5d559c2813834104ecfca000c9192e795ff3af473431497176b9cb5f2c3
sha256:2714222e1b39d8bd6300da72b0805061cabeca3b24def12ffddf47abd47e2263
sha256:be0f9cfd2d7266fdd710744ffd40e4ba6259359fc3bc855341a8c2adad5f5015
COPY
3.7、打印容器清单
root@k8s-node-0001:~$ crictl ps -a
CONTAINER           IMAGE               CREATED             STATE               NAME                     ATTEMPT             POD ID
ee20ec2346fc5       c769a1937d035       13 minutes ago      Running             canal-server             0                   b39a7883a433d
76226ddb736be       cc0c524d64c18       34 minutes ago      Running             mbz-rescue-manager       0                   2f9d48c49e891
e2a19ff0591b4       eb40a52eb437d       About an hour ago   Running             export                   0                   9844b5ea5fdbc
COPY
3.8、打印正在运行的容器清单
root@k8s-node-0001:~$ crictl ps
CONTAINER           IMAGE               CREATED             STATE               NAME                   ATTEMPT             POD ID
ee20ec2346fc5       c769a1937d035       13 minutes ago      Running             canal-server           0                   b39a7883a433d
COPY
3.9、容器上执行命令
root@k8s-node-0001:~$ crictl exec -i -t ee20ec2346fc5 ls
app.sh  bin  canal-server  health.sh  node_exporter  node_exporter-0.18.1.linux-arm64
COPY
3.10、获取容器的所有日志
root@k8s-node-0001:~$ crictl logs ee20ec2346fc5
DOCKER_DEPLOY_TYPE=VM
==> INIT /alidata/init/02init-sshd.sh
==> EXIT CODE: 0
==> INIT /alidata/init/fix-hosts.py
COPY
3.11、获取最近的 N 行日志
root@k8s-node-0001:~$ crictl logs --tail=2 ee20ec2346fc5
start canal successful
==> START SUCCESSFUL ...
COPY
3.12、拉取镜像
crictl pull busybox

作者:Akiraka
链接:https://www.akiraka.net/kubernetes/1139.html
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

<think>好的,我现在需要帮用户详细解释containerd、crictlctr命令的用法以及生产环境的最佳实践。首先,我得回顾一下用户提供的引用内容,确保准确引用相关信息。 用户提到了三个引用,分别涉及ctrcrictl的区别、使用场景以及配置方法。根据引用[1],ctrcontainerd的客户端工具,而crictl是CRI兼容的命令行工具,专门用于Kubernetes环境,对应k8s.io命名空间。引用[2]补充了两者的适用场景,ctr适合开发和低级控制,crictl适合Kubernetes运维。引用[3]则提到了crictl的配置方法,比如修改YAML文件来连接containerd的socket。 接下来,我需要组织内容的结构。可能需要分部分讲解每个工具,包括基本用法、常用命令、生产实践中的注意事项。同时要比较两者的区别,帮助用户理解何时使用哪个工具。 需要注意用户提到的“生产环境中的最佳实践”,所以需要强调安全性、权限管理、调试技巧等。例如,在生产环境中,可能更推荐使用crictl来管理Kubernetes容器,避免直接使用ctr可能带来的命名空间混淆问题。 另外,用户可能需要具体命令示例,比如如何查看容器、镜像,如何排查问题。例如,crictl pods和ctr container list的区别,以及如何配置crictl的运行时端点。 还要考虑用户可能的误区,比如直接使用ctr操作Kubernetes容器时可能遇到的命名空间问题,这时候需要提醒使用-n=k8s.io参数,或者直接使用crictl来简化操作。 最后,生成相关问题时要围绕用户可能感兴趣的后续步骤,比如如何调试容器、如何备份配置,或者如何与Kubernetes集成等。</think>### Containerd/crictl/ctr命令详解及生产实践指南 --- #### 一、工具定位与核心区别 1. **containerd** 容器运行时核心引擎,负责镜像管理、容器生命周期、存储/网络等基础功能,通过`ctr`和`crictl`提供操作接口。 2. **ctr命令** - Containerd原生客户端工具,提供**低级控制能力** - 直接操作所有containerd命名空间(包括非Kubernetes容器) - 示例:查看所有容器 ```bash ctr -n=k8s.io containers list ``` 3. **crictl命令** - CRI(Container Runtime Interface)标准实现工具,**专为Kubernetes设计** - 自动关联`k8s.io`命名空间,命令与kubectl行为对齐[^1] - 示例:查看Pod列表 ```bash crictl pods ``` --- #### 二、生产环境核心操作手册 ##### (一)镜像管理 | 操作 | ctr命令 | crictl命令 | |---------------------|----------------------------------|-----------------------------| | 拉取镜像 | `ctr image pull docker.io/nginx` | `crictl pull nginx` | | 查看镜像列表 | `ctr image list` | `crictl images` | | 删除镜像 | `ctr image rm nginx` | `crictl rmi nginx` | **最佳实践** - 生产环境推荐使用`crictl`操作镜像,确保与Kubernetes视图一致 - 镜像清理时优先使用`crictl rmi --prune`自动清理未使用镜像[^2] ##### (二)容器管理 | 场景 | ctr命令 | crictl命令 | |---------------------|----------------------------------------------|-----------------------------------| | 查看运行中容器 | `ctr -n=k8s.io containers list` | `crictl ps` | | 查看容器日志 | `ctr -n=k8s.io containers logs <CONTAINER>` | `crictl logs <CONTAINER>` | | 执行容器内命令 | `ctr -n=k8s.io tasks exec -t --exec-id=test <CONTAINER> sh` | `crictl exec -it <CONTAINER> sh` | **排障技巧** - 容器卡死时通过`crictl inspect`获取详细状态 - 使用`crictl stats`监控实时资源占用 ##### (三)Pod操作 ```bash # 查看Pod列表(仅crictl支持) crictl pods --verbose # 检查Pod沙箱配置 crictl inspectp <POD_ID> ``` --- #### 三、生产环境最佳实践 1. **权限隔离** - 通过`containerd`配置文件`/etc/containerd/config.toml`限制`ctr`命令使用权限 - 运维人员日常操作应使用`crictl`,避免误操作非Kubernetes容器[^3] 2. **调试规范** ```bash # 查看容器运行时状态 crictl inspect <CONTAINER_ID> | jq '.info.runtimeSpec' # 获取容器性能指标 crictl stats --no-stream ``` 3. **配置优化** - 修改`/etc/crictl.yaml`提升操作效率: ```yaml runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 5 ``` 4. **版本管理** - crictl版本需与Kubernetes版本匹配,通过`crictl -v`验证兼容性 --- #### 四、工具选择决策树 ``` 是否需要操作Kubernetes对象? ├── 是 → 使用crictl └── 否 → 需要底层调试? ├── 是 → 使用ctr(谨慎操作) └── 否 → 使用docker/cli(如已安装) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值