一、containerd 常用工具说明
- ctr
containerd 官方 CLI,功能强但偏底层,不太适合生产脚本
- crictl
遵循 CRI 接口,Kubernetes 场景推荐
- nerdctl
Docker 风格 CLI(如果已安装)
二、ctr 常用命令
1️⃣ 镜像管理
1 2 3 4 5 6 7 8 9 10 11
| ctr images ls
ctr images pull docker.io/library/nginx:latest
ctr images rm docker.io/library/nginx:latest
ctr images info docker.io/library/nginx:latest
|
⚠️ containerd 默认 namespace 是 default
2️⃣ 容器与任务管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| ctr run --rm -t docker.io/library/busybox:latest test sh
ctr container create docker.io/library/nginx:latest nginx-test
ctr task start nginx-test
ctr tasks ls
ctr containers ls
ctr task kill nginx-test
ctr container rm nginx-test
|
3️⃣ 查看日志 / 进程
1 2 3 4 5
| ctr task info nginx-test
ctr task ps nginx-test
|
ctr 没有像 docker logs 一样的命令,日志需通过运行时或 kubelet 查看
4️⃣ Namespace 操作
1 2 3 4 5 6 7 8
| ctr namespaces ls
ctr namespaces create test
ctr -n test containers ls
|
三、crictl(Kubernetes 强烈推荐)
1️⃣ 基本信息
1 2
| crictl info crictl version
|
2️⃣ Pod & 容器
1 2 3 4 5 6 7 8 9
| crictl pods
crictl ps crictl ps -a
crictl inspect <container_id>
|
3️⃣ 日志与执行命令(最常用)
1 2 3 4 5
| crictl logs <container_id>
crictl exec -it <container_id> sh
|
4️⃣ 镜像
1 2 3
| crictl images crictl pull nginx:latest crictl rmi nginx:latest
|
四、nerdctl(如果已安装)
几乎等同 Docker CLI
1 2 3 4
| nerdctl ps nerdctl images nerdctl run -it nginx nerdctl logs <container_id>
|
五、常见排错命令组合
1 2 3 4 5 6 7 8 9 10 11
| systemctl status containerd
ps aux | grep containerd
ls /run/containerd/containerd.sock
crictl --runtime-endpoint unix:///run/containerd/containerd.sock ps
|
六、使用建议
| 场景 |
推荐工具 |
| Kubernetes 排错 |
crictl |
| containerd 底层调试 |
ctr |
| 类 Docker 体验 |
nerdctl |
常用的containerd的命令怎么拉取推送镜像
一、用 ctr 拉取 / 推送镜像(原生方式)
⚠️ 注意:ctr 默认没有 Docker 登录信息,私有仓库要单独指定用户名密码
1️⃣ 拉取镜像(pull)
1 2
| ctr images pull docker.io/library/nginx:latest
|
指定平台(常见问题)
1 2 3
| ctr images pull \ --platform linux/amd64 \ docker.io/library/nginx:latest
|
2️⃣ 给镜像打 tag
1 2 3
| ctr images tag \ docker.io/library/nginx:latest \ harbor.example.com/test/nginx:v1
|
3️⃣ 推送镜像(push)
1
| ctr images push harbor.example.com/test/nginx:v1
|
4️⃣ 私有仓库(用户名密码)
1 2 3 4 5 6
| ctr images pull \ --user admin:password \ harbor.example.com/test/nginx:v1 ctr images push \ --user admin:password \ harbor.example.com/test/nginx:v1
|
5️⃣ Kubernetes 场景(重要 ⚠️)
K8s 使用的是 k8s.io namespace:
拉取镜像到 K8s namespace:
1 2 3
| ctr -n k8s.io images pull \ --user admin:password \ harbor.example.com/test/nginx:v1
|
否则 kubelet 看不到镜像
二、用 nerdctl(强烈推荐 ⭐)
类似 Docker,用起来最舒服
1️⃣ 登录仓库
1
| nerdctl login harbor.example.com
|
2️⃣ 拉取镜像
1
| nerdctl pull nginx:latest
|
3️⃣ 打 tag
1
| nerdctl tag nginx:latest harbor.example.com/test/nginx:v1
|
4️⃣ 推送镜像
1
| nerdctl push harbor.example.com/test/nginx:v1
|
✔ 自动使用登录凭证
✔ 支持 build / compose / logs
三、crictl 能不能推送镜像?
👉 不能
1 2 3
| crictl 只能 pull / rmi / images 不能 push crictl pull nginx:latest
|
crictl 主要是给 kubelet / CRI 调试 用的
四、配置 containerd 私有仓库(免输密码)
1️⃣ 编辑配置文件
1
| vim /etc/containerd/config.toml
|
2️⃣ 添加 registry 配置
1 2 3 4 5 6
| [plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.example.com"] endpoint = ["https://harbor.example.com"]
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.example.com".auth] username = "admin" password = "password"
|
3️⃣ 重启
1
| systemctl restart containerd
|
之后:
1
| ctr images pull harbor.example.com/test/nginx:v1
|