容器界大事件:深度解析 containerd

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 美国时间12月14日,Docker公司宣布将containerd从Docker Engine中分离,并捐赠到一个新的开源社区独立发展和运营,阿里云,AWS, Google,IBM和Microsoft作为初始成员,会为项目提供贡献和维护人员。

美国时间12月14日,Docker公司宣布将containerd从Docker Engine中分离,并捐赠到一个新的开源社区独立发展和运营,"一个工业标准的容器运行时,注重简单、 健壮性、可移植性"。containerd可以作为daemon程序运行在Linux和Windows上,管理机器上所有容器的生命周期。阿里云,AWS, Google,IBM和Microsoft作为初始成员,会为项目提供贡献和维护人员。

containerd对于很多人来还是很陌生,为什么Docker公司会大张旗鼓地宣布这个开源项目,并得到了业界巨大的反响。

实际上早在16年3月,Docker 1.11的Docker Engine里就包含了containerd,而现在则是把containerd从Docker Engine里彻底剥离出来,作为一个独立的开源项目独立发展,目标是提供一个更加开放、稳定的容器运行基础设施。和原先包含在Docker Engine里containerd相比,独立的containerd将具有更多的功能,可以涵盖整个容器运行时管理的所有需求。

containerd并不是直接面向最终用户的,而是主要用于集成到更上层的系统里,比如Swarm, Kubernetes, Mesos等容器编排系统。containerd以Daemon的形式运行在系统上,通过unix domain docket暴露很低层的gRPC API,上层系统可以通过这些API管理机器上的容器。每个containerd只负责一台机器,Pull镜像,对容器的操作(启动、停止等),网络,存储都是由containerd完成。具体运行容器由runC负责,实际上只要是符合OCI规范的容器都可以支持。

containerd

这对于社区和整个Docker生态来说是一件好事。对于Docker社区的开发者来说,独立的containerd更简单清晰,基于containerd增加新特性也会比以前容易。

对于容器编排服务来说,运行时只需要使用containerd+runC,更加轻量,容易管理。而独立之后containerd的特性演进可以和Docker Engine分开,专注容器运行时管理,可以更稳定。在向后兼容上也可以做的更好,containerd第一个正式版本1.0 Release之后将提供一年的支持,包括安全更新和Bugfix,而每次升级也会向后兼容一个小版本。

Docker为了表示对于社区和生态的诚意,特意强调了containerd中立的地位,符合各方利益。可以预见containerd将成为Docker平台的一块重要组件。阿里云, AWS, Google,IBM和Microsoft将参与到containerd的开发中。

为了让大家更好的理解containerd的功能和架构,下面我们从更细节的角度看看containerd。

架构


containerd architecture

这里是containerd的架构图。中间这一层里包含了三个子系统,从这里可以看出containerd支持哪些能力

  • Distribution: 和Docker Registry打交道,拉取镜像
  • Bundle: 管理本地磁盘上面镜像的子系统。
  • Runtime:创建容器、管理容器的子系统。

可以看出containerd非常的干净,提供的都是运行时真正需要的功能。

特性和路线图


  • 支持OCI镜像
  • 支持OCI运行时(runC)
  • 支持镜像的pull/push操作
  • 容器运行时和生命周期管理
  • 网络原语:创建/修改/删除接口
  • 让容器加入已有的Network Namespace
  • 使用“内容可寻址”存储支持全局镜像多租户共享

containerd当前版本是0.2.4,是从Docker Engine剥离的一个功能子集。当功能覆盖前面的特性列表时,containerd版本更新到1.0,之后会保证API的稳定性,并提供1年的LTS.

containerd和Docker Engine之间的关系


Docker Engine包含containerd,containerd专注于运行时的容器管理,而Docker除了容器管理之外还可以完成镜像构建之类的功能。

containerd提供的API偏底层,不是给普通用户直接用的。对于普通用户来说,可以继续使用Docker。容器编排系统的开发者才需要containerd,比如阿里云容器服务团队。

containerd,OCI和runC之间的关系


OCI是一个标准化的容器规范,包括运行时规范和镜像规范。runC是基于这个规范的一个参考实现,Docker贡献了runC的主要的代码。

从技术栈上,containerd比runC的层次更高,containerd可以使用runC启动容器,还可以下载镜像,管理网络。

containerd和容器编排系统的关系


从下图可以看出containerd在容器技术生态中的位置。对开源编排系统,Kubernetes现在直接使用Docker,将来的版本可以转而使用containerd。Mesos和其他的编排引擎也可以使用containerd而不是直接用Docker。

对云计算开发商,也可以非常方便地基于containerd提供定制化的容器网络、容器存储和编排方案。

containerd_001

总结


containerd目标是提供一个更加开放、稳定的容器运行基础设施。一方面最终客户将受益于一个稳定和良好支持的容器基础设施。另一方面,各家厂商可以利用containerd作为一个标准化、灵活的容器操作层,可以非常方便地提供定制化的网络、存储和容器编排。这对构建一个开放和健康的容器生态具有重要意义。

阿里云作为成员之一会积极参与新的开源项目,把在容器方面的探索和积淀回馈到社区中,帮助国内客户利用容器技术提升IT能力实现业务创新。

想了解更多阿里云容器服务内容,请访问 https://www.aliyun.com/product/containerservicearchitecture.png
附Docker官方新闻稿https://www.docker.com/docker-news-and-press/docker-extracts-and-donates-containerd-its-core-container-runtime-accelerate

目录
相关文章
|
25天前
|
缓存 前端开发 JavaScript
前端的全栈之路Meteor篇(二):容器化开发环境下的meteor工程架构解析
本文详细介绍了使用Docker创建Meteor项目的准备工作与步骤,解析了容器化Meteor项目的目录结构,包括工程准备、环境配置、容器启动及项目架构分析。提供了最佳实践建议,适合初学者参考学习。项目代码已托管至GitCode,方便读者实践与交流。
|
30天前
|
存储 应用服务中间件 云计算
深入解析:云计算中的容器化技术——Docker实战指南
【10月更文挑战第14天】深入解析:云计算中的容器化技术——Docker实战指南
53 1
|
1月前
|
Kubernetes Docker 容器
容器运行时Containerd k8s
容器运行时Containerd k8s
38 2
|
1月前
|
XML Java 数据格式
Spring IOC容器的深度解析及实战应用
【10月更文挑战第14天】在软件工程中,随着系统规模的扩大,对象间的依赖关系变得越来越复杂,这导致了系统的高耦合度,增加了开发和维护的难度。为解决这一问题,Michael Mattson在1996年提出了IOC(Inversion of Control,控制反转)理论,旨在降低对象间的耦合度,提高系统的灵活性和可维护性。Spring框架正是基于这一理论,通过IOC容器实现了对象间的依赖注入和生命周期管理。
65 0
|
1月前
|
JavaScript API
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
93 0
|
1月前
|
云计算 开发者 Docker
揭秘云计算中的容器化技术——Docker的深度解析
【10月更文挑战第6天】揭秘云计算中的容器化技术——Docker的深度解析
|
4天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
16 2
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
67 0

推荐镜像

更多