文档首页> 云容器引擎 CCE> 最佳实践> 容器> 如何选择Containerd和Docker
更新时间:2022-05-10 GMT+08:00
分享

如何选择Containerd和Docker

如何选择运行时组件?

容器运行时(Container Runtime)是Kubernetes(k8s)最重要的组件之一,负责管理镜像和容器的生命周期。Kubelet通过Container Runtime Interface (CRI) 与容器运行时交互,以管理镜像和容器。

CCE支持用户选择containerd和docker作为运行时组件:

  • Containerd调用链更短,组件更少,更稳定,占用节点资源更少。 建议选择containerd。
  • 当您遇到以下情况时,请选择docker作为运行时组件:
    • 如需使用docker in docker。
    • 如需在CCE节点使用docker build/push/save/load等命令。
    • 如需调用docker API。
    • 如需docker compose或docker swarm。

Containerd和Docker组件常用命令

Containerd不支持dockerAPI和dockerCLI,但是可以通过cri-tool命令实现类似的功能。

表1 镜像相关功能

序号

Docker命令

Containerd命令

备注

1

docker images [选项] [镜像名[:标签]]

crictl images [选项] [镜像名[:标签]]

列出本地镜像列表

2

docker pull [选项] 镜像名[:标签|@DIGEST]

crictl pull [选项] 镜像名[:标签|@DIGEST]

拉取镜像

3

docker push

上传镜像

4

docker rmi [选项] 镜像...

crictl rmi [选项] 镜像ID…

删除本地镜像

5

docker inspect 镜像ID

crictl inspect 镜像ID

检查容器

表2 容器相关功能

序号

Docker命令

Containerd命令

备注

1

docker ps [选项]

crictl ps [选项]

列出容器列表

2

docker create [选项]

crictl create [选项]

创建容器

3

docker start [选项] 容器ID...

crictl start [选项] 容器ID...

启动容器

4

docker stop [选项] 容器ID...

crictl stop [选项] 容器ID...

停止容器

5

docker rm [选项] 容器ID...

crictl rm [选项] 容器ID...

删除容器

6

docker attach [选项] 容器ID

crictl attach [选项] 容器ID

连接容器

7

docker exec [选项] 容器ID 启动命令 [参数...]

crictl exec [选项] 容器ID 启动命令[参数...]

进入容器

8

docker inspect [选项] 容器NAME|ID...

crictl inspect [选项] 容器ID...

查看容器详情

9

docker logs [选项] 容器ID

crictl logs [选项] 容器ID

查看容器日志

10

docker stats [选项] [容器ID...]

crictl stats [选项] [容器ID]

查看容器的资源使用情况

11

docker update [选项] 容器ID...

crictl update [选项] 容器ID...

更新容器资源限制

表3 POD相关功能

序号

Docker命令

Containerd命令

备注

1

crictl pods [选项]

列出Pod列表

2

crictl inspectp [选项] POD-ID...

查看Pod详情

3

crictl start [选项] POD-ID...

启动Pod

4

crictl runp [选项] POD-ID...

运行Pod

5

crictl stopp [选项] POD-ID...

停止Pod

6

crictl rmp [选项] POD-ID...

删除Pod

Containerd创建并启动的容器会被kubelet立即删除,不支持暂停、恢复、重启、重命名、等待容器,Containerd不具备docker构建、导入、导出、比较、推送、查找、打标签镜像的能力,Containerd不支持拷贝文件,可通过修改containerd的配置文件实现登录镜像仓库。

调用链区别

  • Docker作为k8s容器运行时,调用关系如下:

    kubelet --> docker shim (在 kubelet 进程中) --> dockerd --> containerd

  • Containerd作为k8s容器运行时,调用关系如下:

    kubelet --> cri plugin(在 containerd 进程中) --> containerd

其中dockerd虽增加了swarm cluster、docker build、docker API等功能,但也会引入一些bug,而与containerd相比,多了一层调用。

分享:

    相关文档

    相关产品

close