Containerd容器运行时将会替换Docker?


公众号: MCNU云原生,欢迎微信搜索关注,更多干货,及时掌握。

我一直听到网络上在说Containerd会替换掉Docker,对于Containerd和Docker的关系似乎很多人没搞清楚,本文主要厘清两者的关系,尝试使用Containerd。

一、什么是Containerd?

Containerd是一个开源的容器运行时,由Docker公司于2017年捐赠给了Cloud Native Computing Foundation (CNCF),成为CNCF的顶级项目之一。它提供了一个稳定、可移植的基础架构来管理容器的生命周期,包括镜像管理、容器执行和存储管理等功能。

Containerd以一个守护进程的形式存在,使用runc或者其他符合OCI标注标准的运行时进行容器管理。

在这里插入图片描述

二、Containerd有哪些功能?

  1. 镜像管理:Containerd支持各种容器镜像格式,包括OCI(Open Container Initiative)规范中的镜像格式。它提供了镜像拉取、推送、删除等功能,支持私有和公共镜像仓库,并且可以与Docker Registry进行兼容。
  2. 容器执行:Containerd提供了高效、稳定的容器执行环境,支持OCI规范中的容器配置、生命周期管理、文件系统隔离、网络隔离等功能。
  3. 存储管理:Containerd提供了多种存储后端,包括本地磁盘、网络存储、分布式存储等,支持快照、复制、迁移等功能,可以满足不同场景下的存储需求。
  4. 扩展性:Containerd支持插件式架构,可以方便地扩展功能。例如,Containerd可以通过插件支持CRI(Container Runtime Interface)规范,使得Kubernetes可以使用Containerd作为容器运行时。
  5. 安全性:Containerd遵循最小特权原则,使得容器运行在最小的权限环境下,减少了攻击面。同时,Containerd支持seccomp和AppArmor等安全机制,可以增强容器的安全性。

三、Containerd与Docker的区别

Containerd与Docker都是容器技术的重要组成部分,来看看他们有哪些差异:

  1. 架构:Docker是一个完整的容器平台,包括镜像仓库、构建工具、管理工具等,而Containerd是一个轻量级的容器运行时,只负责容器的生命周期管理。

  2. 社区:Docker是一个独立的开源项目,拥有庞大的社区和生态系统,而Containerd是一个CNCF项目,社区相对较小,但是与CNCF的其他项目有良好的协作。

  3. 功能:Docker提供了更多的高级功能,如Swarm集群管理、Docker Compose应用编排等,而Containerd专注于容器的生命周期管理,不包括这些高级功能。

  4. 兼容性:Docker和Containerd都支持OCI规范的容器和镜像格式,但是Docker在镜像格式方面有自己的扩展,导致Docker和Containerd在某些细节上不兼容。另外,Docker提供了更多的CLI命令和API接口,而Containerd则更注重与其他组件的整合。

  5. 性能:Containerd的架构更加简单,因此比Docker更轻量级,启动和运行速度更快。

四、Containerd是否会替换Docker?

虽然Containerd与Docker之间存在差异,但是它们并不是互相排斥的关系。事实上,Docker可以使用Containerd作为后端来管理容器生命周期,而Containerd也可以使用Docker镜像格式和API进行兼容。下图很好地说明了Containerd和Docker之间的关系:

在这里插入图片描述

Containerd只是docker的一个容器运行时。网络上之所以一直都有"docker不行了"的言论,是因为kuberntes弃用了dockershim,采用了CRI(Container Runtime Interface)即容器运行时接口,而Kubernetes目前已经成为云原生领域容器编排事实上的标准。随着容器技术的不断发展,Containerd在轻量化、安全性、可移植性等方面的优势越来越明显,未来有可能成为最广泛的容器运行时选择。

所以说Containerd不适合和Docker进行比较,因为不是完全同个层面的东西。Containerd应该与CRI-O进行比较(下一期专门讲一下这两个容器进行时的比较。)

五、Containerd安装、部署和使用

  1. 安装依赖软件包
    Containerd需要依赖cgroup、systemd和iptables等软件包,可以使用以下命令进行安装:

    sudo apt-get update
    sudo apt-get install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates lsb-release
    
  2. 添加Docker官方GPG密钥

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
  3. 添加Docker官方APT源
    根据操作系统版本添加以下APT源:

    # Ubuntu 20.04 (Focal)
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    # Ubuntu 18.04 (Bionic)
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu bionic stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    # Ubuntu 16.04 (Xenial)
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu xenial stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
  4. 安装Containerd
    使用以下命令安装Containerd:

    sudo apt-get update
    sudo apt-get install -y containerd.io
    
  5. 配置Containerd
    在配置文件/etc/containerd/config.toml中添加以下内容:

    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
      ...
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
        SystemdCgroup = true
    
  6. 重新加载Containerd配置并启动服务
    使用以下命令重新加载配置文件并启动Containerd服务:

    sudo systemctl daemon-reload
    sudo systemctl restart containerd
    
  7. 验证Containerd安装是否成功
    运行以下命令验证Containerd是否已成功安装:

    sudo ctr version
    

    输出应为:

    codeClient:
      Version:  1.5.5
      Revision: 09a19cb71a40ac5ab8686245e5a5fb5e5d25c144
      ...
    
    Server:
      Version:  1.5.5
      Revision: 09a19cb71a40ac5ab8686245e5a5fb5e5d25c144
      ...
    

以上就是在Linux系统中安装和部署Containerd的步骤,在安装和部署完成后,可以使用CLI命令或者API接口来管理容器和镜像,例如:

# 拉取一个镜像
containerd ctr image pull docker.io/library/nginx:latest

# 创建并启动一个容器
containerd ctr run --rm docker.io/library/nginx:latest mynginx

# 停止并删除一个容器
containerd ctr stop mynginx
containerd ctr container rm mynginx

Containerd还提供了CRI插件,可以用于Kubernetes集群中的容器运行时。在Kubernetes中使用Containerd作为容器运行时的安装和配置可以参考:https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd

### Containerd 替换 Docker 部署服务的详细教程 随着容器技术的发展,越来越多的企业和服务开始选择更轻量级、高效的容器运行解决方案。Containerd 是一种非常流行的替代方案,它不仅性能优越而且架构简洁。 #### 一、准备工作 1. **系统环境检查** - 确保服务器的操作系统支持安装containerd,并满足最低硬件配置需求。 2. **卸载现有Docker组件** 如果您的机器上已经安装了旧版Docker,则需要先将其完全移除以避免冲突。 ```bash sudo apt-get remove docker docker-engine docker.io containerd runc ``` #### 二、安装 Containerd 您可以直接从官方源下载最新版本: 1. 添加 GPG 密钥并设置 APT 源: ```bash curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/containerd-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/containerd-archive-keyring.gpg] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/containerd.list > /dev/null ``` > 注意:这里使用的是阿里云镜像源,如果在中国大陆以外地区可以根据网络情况更换其他稳定可靠的镜像站地址。 2. 更新软件包列表然后安装`containerd.io`: ```bash apt-get update && apt-get install -y containerd.io ``` 3. 启动和启用 service 单元文件: ```bash systemctl enable --now containerd.service ``` 4. 编辑默认配置 `/etc/containerd/config.toml`, 参考[文档](https://github.com/containerd/containerd/blob/main/docs/operations.md#configuring-containerd),修改必要的选项如沙箱路径等;对于新用户来说,默认配置通常就足够用了。 5. 测试是否成功启动: ```bash ctr version # 应该显示当前使用的 containerd 版本信息 ``` #### 三、迁移已有应用至 Containerd 运行 为了将原本基于 Docker 构建的应用迁移到 Containerd运行,我们需要做几件事情: - 将原有的 Dockerfile 转换成适合 CRI (Container Runtime Interface) 的形式; - 使用 `crictl pull <image>` 下载所需的镜像到本地 registry 中; - 根据实际情况调整 kubernetes 或者其他的 orchestration 工具配置使其指向新的 runtime endpoint (`unix:///run/containerd/containerd.sock`)。 另外,在某些场景下可能还需要手动创建或指定 volumes 和 network settings 来保持数据持久性和联网能力不变。 #### 四、优化与维护 完成以上步骤之后,您应该能够顺利地把原来跑在 Docker 内的服务切换到了更为高效稳定的 containerd 平台上继续工作啦! 当然,这并不意味着结束——接下来还涉及到监控日志收集、安全策略制定等多个方面的工作内容等待着我们去完善呢。 希望这份指南能帮助大家顺利完成过渡过程!如果有更多疑问欢迎随提问~
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MCNU云原生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值