共计 3528 个字符,预计需要花费 9 分钟才能阅读完成。
导读 | 很多人希望了解如何正确地选择容器注册表,以及为满足其软件开发需求提供的一些选择。 |
在 2013 年诞生的开源 Docker 引擎促使容器化成为实现云应用程序开发流程现代化的第一步。在 Docker 引擎出现之前,用户必须为特定的计算机 / 硬件配置应用程序。但这种方法的缺点是,将应用程序和数据从一台服务器移动到另一台服务器可能会很耗时。
但是,随着 Docker Registry 的推出,管理和组织容器注册表的长期挑战得到了解决。事实上,Docker Registry 迅速成为了软件行业的标准。如今,Docker Registry 帮助很多企业通过其软件开发过程在一个中心位置收集、存储和交付不同阶段的容器镜像。
本文概述了人们需要了解的容器注册表核心功能,以帮助选择适合软件开发需求的容器注册表。
容器注册表是一个高度可扩展的服务器端应用程序,它允许持续集成 (CI)/ 持续交付(CD) 系统、开发人员和测试人员存储在应用程序开发期间创建的图像。存储在容器注册表中的映像用于 Kubernetes、DevOps 和基于容器的应用程序开发。其示例包括 Docker Hub、Amazon ECR 和 Azure。
在选择容器注册表时,市场并不缺乏一些教学法选择,这可能使选择合适的容器注册表成为一项艰巨的任务。但是,在用户开始选择之前,需要事先考虑的核心问题:
除了容器映像之外,还想承载其他工件吗? 一些容器注册表支持其他类型的文件,例如 Java、Node.js 甚至 Python 包。另一方面,有些只支持容器镜像。
需要额外的安全性吗? 只有少数容器注册表提供的功能更安全,每当用户将图像推送到注册表时会进行漏洞扫描。
应该使用本地还是托管容器注册表?
如果用户决定从一个容器迁移到另一个容器,则任务相对容易。
AWS ECR 可以配置为支持私有和公共 Docker 注册表。这些注册表可与 AWS IAM 一起使用,以控制用户的访问级别、服务和应用程序。在本质上,可以定义哪些用户可以访问受保护的容器映像。
AWS ECR 还配备了漏洞图像扫描功能,使其成为 DevSecOps 的基本功能。这是因为它使用 Clair 的公共漏洞和暴露 (CVE) 数据库来评估所发现问题的严重性。AWS ECR 的另一个重要功能是不可变图像标签。在启用之后,这一功能可确保将映像推送到容器注册表之后,任何人都无法覆盖该映像。
微软公司的 Azure 容器注册表基于 Docker Registry 2.0,其中身份验证由 Azure RBAC 管理。Azure 的容器注册表具有大多数竞争对手尚未提供的功能,例如:
- 自动清除旧图像。
未标记清单的保留策略。
内容信任。
需要注意的是,内容信任是基于 Docker 创建的一个概念,它允许用户对推送到 Azure 容器注册表的图像进行签名。
在本质上,可能使用图像的应用程序 / 用户将其客户端配置为仅提取签名的图像。同时,Docker 客户端可以验证图像的完整性,从而确保图像已经发布,并且在发布后未被修改。除了托管 Docker 容器映像之外,Azure 容器注册表还支持 OCI 映像、OCI 工件和 Helm 图表。
而在定价信息方面,微软公司使用分层系统的方式有所不同。
Docker Hub 可能是当前最流行的容器注册表,因为它是默认的 Docker 存储库。它充当公共容器映像的市场,如果决定公开分发映像,它是最佳选择。有趣的是,Docker Hub 的免费选项在一段时间内非常有吸引力,直到一些用户开始用来挖掘具有自动构建功能的加密货币。
因此,开发商对 Docker 的 pull/push 镜像设置了一些限制,并重新思考如何通过 Docker Hub 获利。用户需要了解有关速率限制更改的更多信息,以及向 Docker Hub 自动构建的转变。避免 Docker 的拉 / 取图像速率限制的一种方法是使用缓存代理。
在定价方面,层级系统允许用户通过付费计划解锁某些特定功能。但是,总体成本不会像使用 AWS ECR 或微软的 Azure 容器注册表(ACR) 等其他一些解决方案那样有效。
2019 年 5 月,GitHub 推出了软件包注册解决方案。由于其解决方案的成功,他们在 2020 年 9 月发布了对容器镜像的支持,并首先作为测试选项。GitHub 容器注册表的一个令人关注的方面是它提供了无缝体验,尤其是对开发人员而言。基本上,身份验证是使用个人访问令牌管理的。
另一种选择是使用公共存储库,尽管在这种情况下,企业需要其用户使用 GitHub 用户帐户进行身份验证。总体而言,GitHub 软件包注册表肯定不是包含最多功能的容器注册表。但是,如果打算使用 GitHub Actions,其定价更具竞争力,因为不需要为入口付费。
GitLab 有自己的容器注册表,可以免费使用,并支持 Docker 容器映像以及 Helm Chart(仍处于测试阶段)。如果使用 GitLab 的自托管版本或通过基于云的 GitLab,它可以是自托管的。GitLab 容器注册表的一大特色是它的清理策略,它可以删除匹配某个正则表达式模式的标签。
或者,用户可以尝试采用 GitLab Package Registry,它也是免费的,并且支持 Composer、Conan、Generic、Maven、npm、NuGet、PyPI 和 RubyGem。毫无疑问,如果已经将 GitLab 用于项目存储库,这是一个很好的选择。
谷歌容器注册表 (GAR) 在以前是值得推荐的选项,但自从 2021 年夏季以来,谷歌公司一直要求他们的客户过渡到谷歌容器注册表 (GAR),因为 GCR 只接收关键的安全修复程序。从本质上来说,GAR 是他们处理容器镜像和非容器工件(例如 Maven、npm、Python、Apt 甚至 Yum 包) 的新方法。
首先,GAR 可以轻松地与持续集成 (CI)/ 持续交付(CD) 管道集成,以简化容器的构建和部署。此外,它还提供扫描图像中的漏洞,用户可以人工启用。
Harbour 创建于 2014 年,并于 2016 年转为开源模型,并无疑是 VMware 公司最成功的开源项目之一。Harbor 是一个容器注册表,需要用户自行安装、配置和管理。使用其 Docker 容器易于部署,可以将其与任何支持 Docker 的 Linux 发行版一起使用。需要注意的是,还可以在 Kubernetes 集群上使用 Helm Chart 部署 Harbor。
Harbor 容器注册表还支持希望从容器注册表中获得的大多数功能,例如:
- 漏洞扫描
垃圾收集
跨区域复制
内容信任
总的来说,如果计划托管容器注册表,这是一个不错的选择。
Quay 最初创建于 2012 年,在过去几年中发生了重大变化。首先,这个容器注册表在 2014 年被 CoreOS 公司收购,后来在 2018 年被 Red Hat 收购。
而理解 Quay、Project Quay 或 Red Hat Quay 之间的区别可能会非常令人困惑。以下简要介绍每一项的含义:
Project Quay:它是一个独立容器注册表,是 Red Hat Quay 的开源发行版,可与 Sonatype Nexus Repository OSS 或 Harbor 相媲美。
Red Hat Quay.io:托管在 Red Hat 云平台上的企业解决方案,按私有存储库的数量定价。但是其公共存储库仍然是免费的。
Red Hat Quay:用于私有云部署的企业容器注册表,可以通过 Red Hat OpenShift 由内置运营者获得。
在本质上,Quay 为不同的环境提供了多种产品,都具有丰富的功能,例如安全扫描(使用 Clair)、存储库镜像、审计日志等。
与 Harbor 类似,Nexus Repository 是另一种自托管容器注册表解决方案,也支持其他语言包。Sonatype 有一个 Docker 映像,可在基础设施中轻松部署。这个容器注册表提供了它的 Nexus Repository 的专业版和一些额外的功能。
如果希望自托管包 / 容器注册表,这可能是一个不错的选择,因为它提供了涵盖许多场景的丰富文档。
9 种容器注册表的比较
总而言之,需要考虑的关键因素是网络就近部署,因为它对于在使用容器注册表时最大限度地降低成本和延迟至关重要。
最后,建议企业使用他们的云计算提供商提供的容器注册表。例如,如果其基础设施完全基于 AWS 云平台,建议使用 AWS ECR。
这是因为所有云计算资源共享一个共同的身份验证模型,并且图像将被更快地提取,因为它们不需要从不同的云平台之间移动。
![post-qrcode](https://www.xgss.net/wp-content/uploads/2023/07/二维码-微信公众号256x256.jpg)