我们正在扩展 Docker 与 containerd 的集成,以包括图像管理!为了及早分享这项工作并获得反馈,此集成作为最新 Docker Desktop 4.12.0 版本的一项可选实验功能提供。
什么是容器?
用最简单的话来说,containerd 是一个被广泛采用的开放容器运行时。它管理其主机系统的完整容器生命周期!这包括拉取和推送图像以及处理容器的启动和停止。更不用说,containerd 是容器体验中的低级积木。它不是由开发人员直接使用,而是设计为嵌入到 Docker 和 Kubernetes 等系统中。
Docker 参与containerd 项目可以追溯到 2016 年,可以说,这是一个有点激情的项目!虽然我们有很多启动该项目的理由,但我们的目标是将容器监管从核心 Docker 引擎中移出并转移到一个单独的守护进程中。这样,它就可以在 Kubernetes 等项目中重用。它已捐赠给云原生计算基金会 (CNCF),截至 2017 年,它现在是一个成熟(稳定)项目。
containerd 在 Docker 引擎中取代了什么?
正如我们之前提到的,Docker 已经使用 containerd 作为 Docker Engine 的一部分来管理容器生命周期(创建、启动和停止)已有一段时间了!这项新工作是将 containerd 更深入地集成到 Docker 引擎中的一步。它允许您使用 containerd 存储图像,然后推送和拉取它们。Containerd 还使用快照程序而不是图形驱动程序来挂载容器的根文件系统。由于 containerd 的可插拔架构,它也可以支持多个快照器。
为什么迁移到 containerd 进行镜像管理?
Containerd 是领先的开放容器运行时,更好的是,它已经是 Docker 引擎的一部分!通过切换到 containerd 进行图像管理,我们更好地使自己与更广泛的行业工具保持一致。
此迁移修改了两个主要内容:
1.我们正在用 containerd 的快照程序替换 Docker 的图形驱动程序。
2.我们将使用 containerd 来推送、拉取和存储图像。
这对 Docker 用户意味着什么?
我们知道开发人员喜欢当今 Docker 命令的工作方式,并且许多工具都依赖于现有的 Docker API。考虑到这一点,我们完全致力于确保集成尽可能透明并且不会破坏现有的工作流程。为此,我们首先将其作为一项实验性的、可选择加入的功能推出,以便我们能够尽早获得反馈。在最新的 Docker Desktop 中启用时,此实验性功能允许您在后台使用以下 Docker 命令和 containerd:运行、提交、构建、推送、加载和保存。
这种集成有以下好处:
1.Containerd 的快照器实现可帮助您快速插入新功能。一些示例包括使用stargz在启动时延迟拉取图像,或者使用nydus和dragonfly进行点对点图像分发。
2.containerd 内容存储可以本地存储多平台图像和其他 OCI 兼容对象。这启用了一些功能,例如使用 Docker 引擎构建和操作多平台图像的能力(以及未来可能的其他内容!)。
如果您计划构建多平台映像,下图显示了在启用 containerd 存储的情况下运行构建命令时的预期结果。
如果不启用实验性功能,您将收到一条错误消息,指出 docker 驱动程序不支持此功能,如下图所示。
结语
总之,Docker 用户现在可以期待完整的 containerd 集成。这带来了许多令人兴奋的功能,从原生多平台支持到加密图像和惰性拉取。因此,请确保下载最新版本的 Docker Desktop并启用 containerd 实验性功能以试用它!