什么是容器注册表?为什么我需要一个?

爱德华Kisller
2023-01-22 11:05

用户添加图片

它们在任何成功的容器管理策略中都扮演着重要的角色。它们使开发人员更容易存储、管理和部署容器映像。它们无缝地集成到你的持续集成(CI)持续交付(CD)工作流。

容器注册中心是推送和拉取映像的集中点。它们提供了对容器映像和一系列其他内置功能的可靠、一致和高效的访问。

在本指南中,您将了解不同类型的容器注册表、维护您自己的注册表的重要管理步骤以及有助于确保映像安全性和完整性的注册表特性。

什么是容器注册表?

容器注册表是存储位置的目录,您可以在其中推送和拉取容器映像。

但是,存储图像的实际物理位置称为存储库。每个存储库存储一组具有相同名称的相关图像。

存储库中的每个映像表示同一容器部署的不同版本。例如,在流行的容器注册表Docker Hub上,nginx是包含开源web服务器安装NGINX的不同版本的Docker镜像的存储库的名称。

一个特定的图像可以通过它的标签或它自己的唯一引用来标识。

容器注册表的三种主要类型如下。

码头工人中心

Docker自己的官方镜像资源对于容器注册表的新手来说是一个快速而简单的起点。

它提供了超过100,000个现成映像的访问权限,这些映像由软件供应商、开源项目和Docker的用户社区共享。这些包括各种各样的操作系统、应用程序框架、数据库管理系统和DevOps工具,可以立即部署或用作自己的父映像。

除了免费访问其公开可用的存储库外,Docker Hub还提供了一个付费的容器注册服务,供您自己使用。

自托管登记

对于喜欢在自己的本地基础设施上托管容器映像的组织来说,自托管注册中心是一种更高级的解决方案——通常是因为安全性、遵从性或更低延迟需求。

自托管模型使您可以完全控制如何管理映像。但是,要运行您自己的自托管注册表,您需要实现一个注册表服务器解决方案,例如Docker可信注册表港口,需要复杂的设置和持续的运营管理。

第三方注册中心服务

第三方注册中心服务是完全托管的产品,它还可以让您控制如何管理映像,但无需运行自己的本地注册中心。

更重要的是,它们提供了更高级的功能,可以帮助保持您的映像库的安全。

第三方注册中心服务包括亚马逊ECRAzure容器注册表谷歌容器注册表,它们面向公共云,以及混合云解决方案,如GitLab容器注册表和JFrog自己的集装箱注册服务

注册表管理

容器映像由一系列中间映像组成,称为,它打包了配置一个完全可操作的容器环境所需的所有安装、依赖项、进程和应用程序代码。

容器注册表通过共享对多个映像通用的任何层来有效地利用存储空间。

用户添加图片

然而,您的注册表可能很快就会失去控制,因为它会积累大量您不再需要的无法管理的映像。

这些通常包括测试的图片,开发人员已经忘记删除,还有孤儿图像-容器的图片由于将修改后的图像推送到具有相同标记的同一存储库,这些图像已被取消标记。

因此,为了将注册表的大小控制在可管理的范围内,您应该定期清理映像。

您通常可以通过指定单个图像的标记、时间戳或图像自己的唯一引用(称为a消化。或者,您可以删除整个存储库。

当您删除图像时,注册表服务器将清除该图像独有的所有层以及引用该图像的所有标记。

注册安全

唯一校验和引用

除了构成映像构建的层之外,每个容器映像还包括一个清单。这实际上是对图像的描述JSON格式,包含有关该映像的信息,例如标记和关于如何为不同类型的主机平台配置容器的详细信息。

容器映像的摘要只是一个sha - 256清单的散列。这确保了每个图像都有一个唯一的引用。因此,如果有人篡改了您的图像,即使他们使用相同的图像标记,摘要也会发生变化。

因此,如果按摘要提取图像,就可以保证图像的版本相同,并避免潜在的安全问题。

用户添加图片

Alpine最新标记的Docker Hub清单,显示每个图像的缩略摘要

安全工具

使用公共注册中心(如Docker Hub),您必须信任可能无法保持高安全标准的图像发布者。因此,图像可能包含恶意或过时的代码。不仅如此,这样的注册表还只支持基本的安全工具。

另一方面,第三方注册表服务倾向于提供广泛的内置功能,这有助于保持映像的安全。

这些通常包括:

  • 图像扫描以识别危害和未修补的漏洞。
  • 严格的治理,例如基于角色的访问控制(RBAC)和遵从性监视。
  • 数字签名,图像认证和其他防篡改功能。
  • 分离的注册表用于开发、测试和生产。

类似的工具也可用于自托管的注册中心,但通常需要安装外部软件解决方案。

了解更多关于容器的知识