当前位置: 首页 > news >正文

docker和containerd的区别

docker和containerd的区别

1、容器运行时

1.1 容器运行时概念

容器运行时(Container Runtime)是一种负责在操作系统层面创建和管理容器的软件工具或组件。它是容器化技术的核心组件之一,用于在容器内部运行应用程序,并提供隔离、资源管理和安全等功能。 在Kubernetes中,容器运行时是负责管理和运行容器的组件。在过去,Docker是最常用的容器运行时,但随着时间的推移,containerd成为Kubernetes的另一个受欢迎的容器运行时选择。注意:自kubernetes1.24 版起,Dockershim 已从Kubernetes项目中移除。

1.2 容器运行时的作用

  • 容器创建和启动:容器运行时负责根据预定义的容器配置信息(如镜像、命令、环境变量等),创建并启动容器实例。
  • 容器文件系统管理:容器运行时处理容器的文件系统,负责将镜像的内容挂载到容器的文件系统,并在容器之间提供隔离。
  • 资源限制和管理:容器运行时可以根据用户或管理员定义的资源限制,管理容器对CPU、内存、磁盘等资源的使用。
  • 容器网络:容器运行时协助配置容器的网络,使得容器可以与其他容器或外部网络进行通信。
  • 安全性:容器运行时实施安全机制,确保容器之间和宿主机之间的隔离,并防止容器中的恶意行为影响其他容器或宿主机。

2、容器运行时的类型

2.1 docker

Docker是一个开源的容器平台,提供了一整套容器解决方案,包括构建、打包、分发和运行容器。它包括Docker Engine、Docker Swarm、Docker Compose等多个组件,提供了镜像构建、容器编排等高级功能,适合需要复杂容器管理功能的用户。

2.2 containerd

Containerd是一个轻量级的容器运行时,专注于底层的容器生命周期管理,如容器的创建、启动、停止和销毁。它比Docker更轻量级,可以快速启动和运行容器,并且具有更好的性能和可扩展性。Containerd的设计更加简单和稳定,提供了API,可以与其他容器编排工具集成使用,使其更加灵活和可扩展。

3、docker和containerd在kubernetes中的区别

3.1 二者工作流程

docker的工作流程
在这里插入图片描述
containerd的工作流程
在这里插入图片描述

3.2区别

1.调用链和组件数量

当使用Docker作为容器运行时,调用关系为:kubelet --> dockershim(在kubelet进程中) --> dockerd --> containerd。这里涉及到多个组件和较长的调用链。
当使用Containerd作为容器运行时,调用关系为:kubelet --> CRI plugin(在containerd进程中) --> containerd。Containerd的调用链更短,组件更少,因此更稳定,且占用节点资源更少。

2.命名空间

Containerd引入了命名空间的概念,每个image和container都会在各自的namespace下可见。这提供了更好的隔离性和管理性。而Docker没有这种命名空间的概念。

3.日志配置和流转发通道

当使用Docker时,Docker API本身提供stream服务,kubelet内部的docker-shim会通过Docker API进行日志配置和流转发。
当使用Containerd时,可能需要额外的配置或工具来实现这些功能,因为Containerd本身不提供与Docker相同的stream服务。

4、containerd的客户端工具—nerdctl

root@master01:~# wget https://github.com/containerd/nerdctl/releases/download/v1.5.0/nerdctl-1.5.0-linux-amd64.tar.gz
root@master01:~# mkdir -p  /usr/local/containerd/bin/
root@master01:~# tar -xvf nerdctl-1.5.0-linux-amd64.tar.gz
root@master01:~# mv nerdctl /usr/local/containerd/bin/
root@master01:~# ln -s /usr/local/containerd/bin/nerdctl /usr/local/bin/nerdctl
root@master01:~# wget https://github.com/moby/buildkit/releases/download/v0.12.5/buildkit-v0.12.5.linux-amd64.tar.gz
root@master01:~# mkdir -p /usr/local/buildctl -p  && tar -zxvf  buildkit-v0.12.5.linux-amd64.tar.gz -C /usr/local/buildctl
root@master01:~# ln -s /usr/local/buildctl/bin/buildkitd /usr/local/bin/buildkitd
root@master01:~# ln -s /usr/local/buildctl/bin/buildctl /usr/local/bin/buildctl
root@master01:~# cat >> /etc/systemd/system/buildkit.service <<EOF
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true[Install]
WantedBy=multi-user.target
EOF
root@master01:~# systemctl daemon-reload
root@master01:~# systemctl enable buildkit --now
root@master01:~# systemctl status buildkit
root@master01:~# nerdctl version
Client:Version:	v1.5.0OS/Arch:	linux/amd64Git commit:	b33a58f288bc42351404a016e694190b897cd252buildctl:Version:	v0.12.5GitCommit:	bac3f2b673f3f9d33e79046008e7a38e856b3dc6Server:containerd:Version:	1.6.31GitCommit:	e377cd56a71523140ca6ae87e30244719194a521runc:Version:	1.1.12GitCommit:	v1.1.12-0-g51d5e94
http://www.lryc.cn/news/355840.html

相关文章:

  • 汇编实现流水灯
  • SQL生成序列浅析
  • 24年gdcpc省赛C题
  • 以梦为马,不负韶华(3)-AGI在企业服务的应用
  • Xshell 使用
  • 【yijiej】mysql报错 之 报错:Duplicate entry 字段 for key ‘表名.idx_字段’
  • 解决npm卡死,无法安装依赖
  • 速卖通测评揭秘:如何选择安全的渠道操作
  • ping不通ip的解决方法
  • Linux x86_64 UEFI 启动
  • 妙解设计模式之适配器模式
  • 【Linux】Linux下centos更换国内yum源
  • HTML静态网页成品作业(HTML+CSS)——动漫熊出没介绍网页(3个页面)
  • 算法训练营day42
  • 【Vue】自动导入组件
  • mfc140u.dll丢失的解决方法有哪些?怎么全面修复mfc140u.dll文件
  • MySQL8报错Public Key Retrieval is not allowedz 怎么解决?
  • 海外动态IP代理如何提高效率?
  • 解析边缘计算网关的优势-天拓四方
  • 计算机原理 知识回顾
  • WPF 如何调试
  • URL跳转
  • Spring Boot集成rss快速入门demo
  • 重学java 49 List接口
  • 【html+css(大作业)】二级菜单导航栏
  • 算法基础之集合-Nim游戏
  • Diffusion Model, Stable Diffusion, Stable Diffusion XL 详解
  • 智能奶柜:重塑牛奶零售新篇章
  • 源代码防泄密--沙盒技术安全风险分析
  • 韭菜收割项目