• docker,是一个客户端工具,用来把用户的请求发送给 docker daemon(dockerd)。
  • dockerd, docker daemon,一般也会被称为 docker engine。dockerd 启动时会启动 containerd 子进程。
  • Containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性,几乎囊括了单机运行一个容器运行时所需要的一切:执行,分发,监控,网络,构建,日志等。主要作用是:
    • 管理容器的生命周期
    • 拉取/推送容器镜像
    • 存储管理(管理镜像及容器数据的存储)
    • 调用 runC 运行容器(与 runC 等容器运行时交互)
    • 管理容器网络接口及网络
  • ctr 是 containerd 的 cli。
  • 为了能够支持多种 OCI Runtime,containerd 内部使用 containerd-shim,每启动一个容器都会创建一个新的 containerd-shim 进程,指定容器 ID,Bundle 目录,运行时的二进制(比如 runc)。
  • RunC 是一个轻量级的工具,用来运行容器的,我们可以不用通过 docker 引擎,直接运行容器。事实上,runC 是标准化的产物,它根据 OCI 标准来创建和运行容器。

docker 启动一个标准化容器需要经历这样的流程:

在容器标准的大战中,docker公司围绕docker swarm推出了CNM,Google 等xxxx k8s 推出了CNI,目前来看,k8s已经奠定了在 PaaS 事实的地位。

CRI 是一套通过 protocol buffers 定义的 API,如下图:

kubelet 实现了 client 端,CRI shim 实现 server 端。只要实现CRI对应的接口,就能接入 k8s 作为 Container Runtime。

  1. k8s 1.5 中自己实现了 docker CRI shim,此时启动容器的流程如下:

1.从 containerd 1.0 开始,为了能够减少一层调用的开销(废掉docker,也就是把上边的docker cri shim和docker踢掉),containerd 开发了一个新的 daemon,叫做 CRI-Containerd,直接与 containerd 通信,从而取代了 dockershim:

2.但是这仍然多了一个独立的 daemon,从 containerd 1.1 开始,社区选择在 containerd 中直接内建 CRI plugin,通过方法调用来进行交互,从而减少一层 gRPC 的开销,最终的容器启动流程如下:

3.最终的结果是 k8s 的 Pod 启动延迟得到了降低,CPU 和内存占用率都有不同程度的降低。

但是这还不是终点,为了能够直接对接 OCI 的 runtime 而不是 containerd,社区孵化了 CRI-O 并加入了 CNCF。CRI-O 的目标是让 kubelet 与运行时直接对接,减少任何不必要的中间层开销。CRI-O 运行时可以替换为任意 OCI 兼容的 Runtime,镜像管理,存储管理和网络均使用标准化的实现。

某位大神的图,抄过来学习一下

参考资料

  • 开放容器标准(OCI) 内部分享

docker,containerd,runc,docker-shim相关推荐

  1. 一文搞懂 Docker、Containerd、RunC 间的联系和区别

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 什么是RunC Docker.Google.CoreOS 和其他供应商创建了开放容器计划 (OCI),目前主要有两 ...

  2. Docker 的替代者?,Podman 即将崛起

    转自:java知音 来源:blog.csdn.net/qq_48289488/article/ details/121905018 什么是Podman? Podman 是一个开源的容器运行时项目,可在 ...

  3. 如何优雅升级 Kubernetes 集群的 Docker 和 Containerd 版本

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 前言 公司用的k8s集群是"多环境合一"的方式,集群流量入口也摒弃了常见的traefik和in ...

  4. 原地升级k8s集群docker和containerd版本

    微信公众号:运维开发故事,作者:小姜 前言 公司用的k8s集群是"多环境合一"的方式,集群流量入口也摒弃了常见的traefik和ingress-nginx,直接用了一个国内不常见的 ...

  5. docker,containerd,runc,docker-shim之间的关系

    关于containerd 关于containerd的一些详解介绍,请参考containerd的官网:(https://containerd.io/) 关于docker docker本身而言包括了,do ...

  6. Docker 终失 C 位,开源少年缘何黑化

    作者 | 马超 出品 | CSDN(ID:CSDNnews) 开源真是火了,近些年成功的IT项目像TensorFlow.RocketMQ.TDEngine都是开源项目,而且这种火爆还出了圈,连带着RI ...

  7. Docker终失C位,开源少年缘何黑化

    作者 | 马超 出品 | CSDN(ID:CSDNnews) 开源真是火了,近些年成功的IT项目像TensorFlow.RocketMQ.TDEngine都是开源项目,而且这种火爆还出了圈,连带着RI ...

  8. 重磅,Kubernetes 决定弃用 Docker!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 作者 | ...

  9. wsl2设置挂载_Windows下的Linux子系统安装,WSL 2下配置docker

    Windows下的Linux子系统安装,WSL 2下配置docker 前提条件: 安装WSL 2需要Windows 10版本是Build 18917或更高,首先先确认系统版本已升级. 在"启 ...

最新文章

  1. pythonlist特性_python 高级特性:List Comprehensions(列表生成式)
  2. 【收藏】哪些比较好的在线编程网站?
  3. 服务器会自动创建cookie,网站的cookie机制是什么
  4. sql 赋值 null_巩固SQL - 窗口函数amp;变量amp;数据透视图
  5. cmd运行php文件以及环境配置出现的问题、 php.exe不是内部或外部命令,也不是可运行的程序 或批处理文件、PHP startup: Unable to load dynamic library
  6. 微信小程序把玩(三十三)Record API
  7. uat测试用例和sit测试用例_测试理论——SIT测试 和 UAT测试概念
  8. 熊猫聚财独家揭秘-你不知道的避坑赚钱宝典
  9. 基于机智云平台的微电网光伏模块数据采集装置的设计
  10. cad插入块_CAD中块插入点定义错了,插入位置不对怎么办?
  11. 修改WMB执行组监听端口
  12. 读《明朝那些事》有感
  13. HDU-3237 Help Bubu(状压dp)
  14. [HAOI2007]理想的正方形(单调队列)
  15. 【Matlab】Matlab将mat文件保存为txt文件
  16. android显示通知图标大全,Android推送通知:图标未显示在通知中,而是显示白色方块...
  17. Cortex-M MMU内存管理单元和 Linux
  18. SpringBoot 整合 EasyExcel 数据写入Excel 合并单元格
  19. jsp网站服务器配置
  20. BZOJ 1208 [HNOI2004]宠物收养所 treap

热门文章

  1. javascript监听esc按键事件
  2. 298day(点触验证)
  3. Android kotlin使用id直接做view的引用
  4. 【积水成渊-逐步定制自己的Emacs神器】6:首次变身IDE,Emacs C++ IDE
  5. 背景图片如何自适应屏幕
  6. maven打包报错 Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:3.0.2:jar
  7. sox处理mp3_SoX — 音频处理工具里的瑞士军刀
  8. win10启动文件夹在哪 如何设置随系统自动启动
  9. 【Flyway】pgsql R__开头的sql
  10. word自动消除html标签,如何将Word转换为网页html格式的方法(附代码清理方法)