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