<转载>什么是 Containerd

我们过去曾就 containerd 的不同特点、它是如何设计的、以及我们在此过程中所解决的一些问题进行过几次讨论。

Containerd 已经被 Docker、Kubernetes CRI 和其他一些项目所使用。今天这篇文章,意在帮助读者理解 Containerd 实际上如何在这些平台上使用。将来我会写更多文章来介绍 containerd 的各种功能以及设计理念。不过,现在让我们先从一些基础知识开始吧。

我估计,容器生态系统时常让人感到迷惑。特别是我们所使用的术语。这是什么?一个运行时。这个呢?一个运行时...

从其名称看,containerd 并不是像某些人所调侃的那样 (contain nerd,字面意思“包含傻瓜”),而是一个容器守护程序。它最初是作为一种 OCI 运行时的整合点,如 runc,但在过去的 6 个月里,它增加了许多功能,使其满足 Docker 和 Kubernetes 等现代容器平台的需求。

由于在内核空间中没有 Linux 容器这样的东西,容器是各种内核功能捆绑在一起,当您在构建一个大型平台或分布式系统时,您想要在管理代码和系统调用之间的一个抽象层和一系列功能来运行一个容器。那就是 containerd 所在的层。它提供了一个客户端层,包含一些类型,平台可以在其上进行构建,而不需要下降到内核层。与管理对 clone() 或 mount() 的调用相比,使用 Container、Task 和 Snapshot 类型的工作要轻松得多。

Containerd 可用于 Docker、Kubernetes 以及任何其他希望抽象系统调用或 OS 特定功能的平台,以便在 Linux、Windows、Solaris 或其他操作系统上运行容器。考虑到这些用户,我们希望确保 containerd 只拥有他们需要的东西,而舍弃他们不想要的东西。实际上这不太可能,但至少我们会朝这一点进行努力。

比如,网络这样的事情超出了 containerd 的范围。原因是,当您构建分布式系统时,网络是一个非常重要的方面。随着 SDN 和服务发现的功能,网络更依赖于平台,而不是像 Linux 平台上抽象掉 netlink 调用那样简单。大多数新的覆盖网络都是基于路由的,并且每次创建或删除新容器时都需要更新路由表。服务发现、DNS 等都必须同时通知这些更改。如果我们将网络添加到 containerd,为了支持所有不同的网络接口、钩子和集成点,这将是非常大的一块代码。我们所做的是在 containerd 中选择一个强大的事件系统,这样多个客户就可以订阅他们关心的事件。我们还公开了一个任务 API,它允许用户创建一个正在运行的任务,能够向容器的网络命名空间添加接口, 然后启动容器的进程,而不必在容器的生命周期各个点上使用复杂的钩子。

在过去几个月中,添加到 containerd 的另一块功能是一个完整的存储和分发系统,支持 OCI 和 Docker 镜像格式。通过 containerd API,有一个完整的内容寻址存储系统,它不仅适用于镜像,还可用于元数据、检查点和附加到容器的任意数据。

我们还花了很多时间来重新思考 "graphdriver" 如何工作。这些是叠层或块级文件系统,允许镜像分层,从而使您可以执行高效的构建。Graphdriver 最初是由 Solomon 和我写的,当时我们增加了对 devicemapper 的支持。Docker 当时只支持 AUFS,因此我们在叠层文件系统之后设计了 graphdriver。然而,要想使一个块级文件系统 (如 devicemapper/lvm) 像叠层文件系统那样工作,实际上从长远来看更加困难。接口必须随着时间的推移而不断扩展,以支持不同的功能,而不只是我们最初认为需要的功能。使用 containerd,我们采取了不同的方法,使叠层文件系统运行起来更像一个快照程序,而不是反过来。由于叠层文件系统比快照文件系统 (如 BTRFS、ZFS 和 devicemapper) 提供了更大的灵活性,因为它们没有严格的父/子关系,因此这样做便容易许多。我们为快照程序构建了一个较小的接口,同时还满足了诸如生成器之类的需求,并减少了所需的代码量,从而更容易维护长期运行。

那么,通过使用 containerd,您能获得什么?
您可以获得 push 和 pull 功能以及镜像管理。
您可以获得容器生命周期 API 来创建、执行和管理容器及其任务。
您可以获得一个完整的 API,用于快照管理。

基本上,您拥有了构建一个容器平台所需的任何事情,而无需处理底层操作系统的细节。我认为 containerd 最重要的部分是有一个版本化和稳定的 API,并且可以将缺陷修复和安全补丁应用到之前的版本。

文章转载自:Docker官方公众号,原文链接

Docker 企业版在中国由我们的战略合作伙伴阿里巴巴提供
联系阿里云销售人员获取 Docker 企业版,或访问阿里云市场在线购买

时间: 2024-10-04 14:54:26

<转载>什么是 Containerd的相关文章

&lt;转载&gt;DockerCon 2017 欧洲站大会议程抢先看

DockerCon 内容审查委员会仍在努力审核各个分论坛的议题内容,不过您可以通过下面的介绍来了解在哥本哈根举办的此次大会的基本议程设计和内容框架. 要了解各个演讲摘要的详细信息,请查看官网的 Agenda (议程) 页面 (https://europe-2017.dockercon.com/agenda). 特别提醒您,我们在 10 月 19 日(周四)有两场高峰论坛. Moby 高峰论坛,为资深容器用户准备的一场动手协作活动,他们积极维护.贡献或对 Moby 项目及其组件的设计和开发感兴趣.

[转载]Moby峰会精彩回顾 - 2017年6月

Moby峰会精彩回顾 - 2017年6月 2017年6月19日, 超过90名Moby社区成员齐聚在位于美国旧金山的Docker公司总部,举行了第二次Moby峰会.在宣布启动Moby项目两个月之后,此次峰会主要讨论了Moby项目的进展及未来方向. 首先由 Solomon Hykes 做了开场介绍,然后展示了网站的设计改版,Moby网站地址为:http://mobyproject.org/.现在有博客区 (http://mobyproject.org/blog/).事件日历.项目列表,以及社区页面(

Docker、Containerd、RunC...:你应该知道的所有

从Docker 1.11开始,Docker容器运行已经不是简单的通过Docker daemon来启动,而是集成了containerd.runC等多个组件.Docker服务启动之后,我们也可以看见系统上启动了dockerd.docker-containerd等进程,本文主要介绍新版Docker(1.11以后)每个部分的功能和作用. Docker Daemon 作为Docker容器管理的守护进程,Docker Daemon从最初集成在docker命令中(1.11版本前),到后来的独立成单独二进制程序

Docker Engine 核心组件 containerd 开源

12月15日 , Docker 宣布将 Docker Engine 核心组件 containerd 开源,并捐赠到一个新的开源社区(https://containerd.io/)独立发展和运营.阿里云,AWS, Google,IBM和Microsoft 作为初始成员,将会为新项目提供贡献和维护人员. containerd开源对构建一个开放和健康的容器生态具有重要意义.containerd 是容器运行环境的核心引擎,可以实现对容器的各种操作(启动,停止等)和网络和存储配置. containerd

【转载】Jenkins + Git + Maven + tomcat集成环境搭建

本文转载自http://shift-alt-ctrl.iteye.com/blog/2208786   折腾了好几天,终于吧Jenkins + Git + Maven + tomcat集成环境搭建起来了,最终主要实现"自动构建.部署"web应用.   1.安装环境     操作系统:Centos 6.5     JDK:1.7.x     Maven:3.1.x     Git: 1.7.1,自建GitLab平台     tomcat:7.x       上述宿主机器2台:192.16

完美解决layDate强制动态显示当前时间(不求评论,但求疯狂转载!)

**只给懂我的你** 强烈建议喜欢装逼(B)的使用上面的2.0版,优化了相关代码,封装了js,速度你懂得,O(∩_∩)O哈哈~, laydate2.0强势来袭:http://download.csdn.net/detail/cometwo/9371372 layDate默认是不显示时间的,实在是操蛋,现自己动手,现修源文件208行如下: 工程下载:你妈CSDN今天抽风,上传不了工程,改天传,急的加QQ:3120217729,我给你发,还是那句话:不求评论,但求疯狂转载!转转转 至此还是向@贤心同

软件架构模式转载

概要介绍 最近一两年,转载文章越来越少了,之所以转载这篇文章,是因为看这篇文章,弄明白了我的一些问题.所以梳理了一下,结合了几篇文章. 架构模式可以帮助你定义程序的基本特征和行为.例如一些架构模式很自然让程序成为大规模(scalable)的程序.有些模式让程序变得灵巧敏捷(agile).知道这些架构的特征,优点和缺点,你就可以根据你特定的业务需求和目标从容的选择一种架构模式.作为一位架构师,你总会为自己架构选择做解释,尤其你选择一个特别的架构模式的时候.O'Reilly的这本书提供了充足的信息来

【转载】低成本和高性能的MySQL云数据库的实现淘宝 MySQL

低成本和高性能的MySQL云数据库的实现 作者: 鸣嵩/曹伟(集团技术专家) 本文刊登于<程序员>杂志2012年12期上,转载请注明         UMP(Unified MySQL Platform)系统是淘宝核心系统数据库团队开发的低成本和高性能的MySQL云数据方案,关键模块采用Erlang语言实现.系统中包含了controller服务器.proxy服务器.agent服务器.API/Web服务器.日志分析服务器.信息统计服务器等组件,并且依赖于Mnesia.LVS.RabbitMQ.Z

[转载]JDK自带VM分析工具jps,jstat,jmap,jconsole

一.概述      SUN 的JDK中的几个工具,非常好用.秉承着有免费,不用商用的原则.以下简单介绍一下这几种工具.(注:本文章下的所有工具都存在JDK5.0以上版本的工具集里,同javac一样,不须特意安装)  .           我一共找到以下四个工具:重点看看jconsole和jmap. jps :与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号. jstat :一个极强的监视VM内存工具.可以用来监视VM内存内的各种堆和非堆