前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >技术干货|Docker和 Containerd 的区别

技术干货|Docker和 Containerd 的区别

作者头像
用户5921339
发布于 2025-05-20 08:29:44
发布于 2025-05-20 08:29:44
1440
举报

1.概述

在Kubernets的生态中,有很多方便扩展的接口,包括CRI、CSI、CNI等,将这些接口抽象出来是为了提供开放、扩展和规范等能力。

K8S CRI(Container Runtime Interface)是K8S定义的一组与容器进行时交互的接口,用于将K8S平台与特定的容器进行时实现解耦。K8S从1.5版本引入CRI接口规范,充当kubelet和容器运行时之间的桥梁。CRI包括Protocol Buffers、gRPC API、运行库支持及开发中的标准规范和工具

Docker的CRI实现在Kubernets 1.6中被更新为Beta版本,并在kubelet启动时默认启动。目前实现了CRI spec的Runtime由Docker Engine、Containerd、CRI-O、Mirantis Container Runtime(Docker 企业版)等。

Kubernets在2020年宣布将弃用dockershim,标志着容器运行时正式向CRI切换,一方面是为了将kubelet核心主干代码与Runtime相关代码解耦,便于更好维护;另一方面是为了便于生态圈按CRI spec实现自己的运行插件,提供个性化的运行时扩展能力和开放性,以满足对更多Runtime的支持。

图一 容器运行时调用层级

对于容器的调用层级,可以对照图二。kubelet是客户端,CRI代理(shim)是服务端。早期的Kubernets版本默认使用dockershim,而1.6版本之后默认支持CRI,如果不希望使用CRI,则可以设置--enable-cri=false来关闭这个功能。Kubernetes v1.24 版本中dockershim已被正式移除,CRI-dockerd正式登场。

OCI(Open Container Initiative,开放容器计划)定义了创建容器的格式和运行时的开源行业标准,包括镜像规范(Image Specification)和运行时规范(Runtime Specification)。

2.Docker Engine

Docker Engine是用来运行和管理容器的核心软件。通常人们会简单地将其代指为Docker或Docker平台。

Docker Engine主要的组件构成:Docker客户端(Docker Client)、Docker守护进程(Docker daemon)、Docker APIs、containerd以及 runc,它们共同负责容器的创建和运行。

3.containerd

containerd是一个来自 Docker 的高级容器运行时,并实现了CRI 规范。它是从Docker项目中分离出来,之后containerd 被捐赠给云原生计算基金会(CNCF)为容器社区提供创建新容器解决方案的基础。

所以Docker自己在内部使用containerd,当你安装Docker时也会安装 containerd。

containerd通过其CRI插件实现了Kubernetes容器运行时接口(CRI),它可以管理容器的整个生命周期,包括从镜像的传输、存储到容器的执行、监控再到网络。

4.常见命令对比

命令

docker

ctl(containerd)

cricrl(k8s)

查看运行容器

docker ps

ctl task ls/ctl container ls

crictl ps

查看镜像

docker images

ctl image ls

crictl images

查看容器日志

docker logs

crictl logs

查看容器信息

docker inspect

ctr container info

crictl inspect

查看容器资源

docker stats

crictl stats

容器启动

docker start

ctl task start

cticrl start

容器停止

docker stop

ctl task kill

cticrl stop

运行容器

docker run

ctr run

无(最小单元Pod)

镜像打标

docker tag

ctr image tag

创建新容器

docker create

ctr container create

crictl create

导入镜像

docker load

ctr image import

导出镜像

docker save

ctr image export

删除容器

docker rm

ctr container rm

crictl rm

删除镜像

docker rmi

ctr image rm

crictl rmi

拉取镜像

docker pull

ctr image pull

crictl pull

推送镜像

docker push

ctr image push

在容器内执行命令

docker exec

crictl exec

进入容器

docker attach

crictl attach

显示pod列表

crictl pods

查看pod详情

crictl inspectp

运行pod

crictl runp

停止pod

crictl stopp

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT人家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档