管理容器映像和舵图

JFrog支持
2021-10-12 15:09

管理容器映像和舵图

码头工人中心是容器化应用程序最流行的公共注册中心之一,目前提供超过500万个单独的容器图像。这个惊人的数字强调了Docker Hub对于托管开发人员希望向公众提供的容器映像的重要性。

但是,尽管Docker Hub非常受欢迎,该平台并不总是容器镜像托管的最佳解决方案。有些团队需要以一种私有的方式来托管容器映像,或者(即使它们是公共的)提供比Docker Hub支持的更细粒度的访问控制。

在其他情况下,组织可能需要一种解决方案,它不仅可以托管容器映像,还可以托管Helm图,这是向用户分发容器化应用程序的另一种方式。Docker Hub不支持Helm charts。

为了为您的需求确定最佳容器注册表或Helm图表存储库解决方案提供指导,本文介绍了管理容器映像和Helm图表的关键注意事项和最佳实践。

什么是容器映像?

容器映像是用于启动在容器内运行的应用程序的蓝图。如果您希望使用容器运行应用程序,则需要为其创建一个容器映像。然后,当您想要运行应用程序(或者想让其他人可以运行它)时,将映像下载到将要托管容器的计算机上,并开始基于它启动容器。

容器映像有时也被称为Docker映像,因为大多数容器映像都是为与Docker一起运行而设计的。从技术上讲,Docker只是支持容器的几个平台之一。

容器映像通常托管在容器注册中心内,这些注册中心是可以下载映像的存储库。注册中心可以是公共的,这意味着任何人都可以从它们下载图像,或者可以将它们配置为私有的,在这种情况下,访问仅限于某些组。

什么是舵图?

Helm charts是在Kubernetes上自动安装和配置软件的包。他们是由这是一个开源包管理器,旨在简化Kubernetes的软件管理。

在大多数情况下,Helm图表之于Kubernetes就像Debian或Yum软件包之于Linux, MSI文件之于Windows。它们提供了安装和配置应用程序以某种方式运行所需的所有信息。

然而,Helm图表与其他类型的软件包有点不同。它们本身通常不包含应用程序二进制文件;相反,它们提供了指令,告诉Kubernetes在哪里可以找到运行某个应用程序所需的容器映像。Helm charts的另一个显著特性是单个图表可以安装多个应用程序。例如,如果您需要部署Web服务器和附带的数据库,您可以通过一个Helm图表完成所有工作。

舵图vs.容器图像

虽然容器映像和Helm图都是安装和运行容器化应用程序的解决方案,但它们之间存在关键区别——最大的区别是容器映像只提供一个应用程序(或者,在某些情况下,是应用程序的一部分),而不是运行它所需的配置数据。下载容器映像类似于将二进制应用程序下载到计算机(而不是下载应用程序的包或安装程序):您可以获得应用程序本身,但如果要运行它,则必须手动配置并启动它。

Helm charts更像是一个完整的软件安装包。运行Helm图表时,它不仅安装应用程序二进制文件,还安装运行应用程序所需的所有配置数据。

Helm charts的主要限制是它们只适用于在Kubernetes上安装软件。您也可以在Kubernetes上运行容器映像,但是您也可以在安装了兼容的容器运行时(执行容器的应用程序)的其他地方运行它。

管理Helm图和容器映像的最佳实践

使容器映像和Helm图表可供使用的最简单方法是将它们托管在注册表或存储库中,用户可以从中下载它们。容器注册表和Helm chart存储库类似于应用商店:人们可以在这里找到他们想要运行的应用程序的容器映像或Helm chart,然后下载并执行它。

以这种方式分发容器映像和Helm图的能力是使这些资源如此强大的部分原因。2022世界杯阿根廷预选赛赛程当您的所有容器映像和Helm图表都可以从一个中心位置访问时,很容易将它们集成到自动化的应用程序部署管道中,并支持广泛的用户集。

也就是说,为了从容器映像注册中心和Helm图表存储库中获得最大价值,以适合您需求的方式管理映像和图表非常重要。

不要默认使用公共存储库。将图像和图表存储在公共存储库中是很诱人的,任何人都可以自由访问,而且您不必担心配置访问控制。但是,如果您正在部署仅供内部使用的应用程序,则应该使用仅由您指定的用户访问的私有存储库。

不要错误地认为,简单地将公共存储库托管在一个非公共的URL上,就可以保护它免受未经授权的访问。这是维恩吸取的惨痛教训,他的源代码被泄露因为有人猜出了它的私有容器映像存储库的URL。

了解存储库中有什么。Vine的故事也提醒我们,了解存储库中实际有哪些数据是很重要的。一般来说,将源代码等数据存储在容器注册表中是没有多大意义的。尽管在某些情况下,您可能希望将其他类型的工件(意味着任何类型的二进制文件或数据)与Helm图表和容器注册表一起存储,但您至少应该跟踪存储在何处的内容,以避免安全疏忽。

粒度访问控制。有时,您希望某些容器映像或Helm图表对公众开放,而其他容器映像或Helm图表则是私有的。例如,您可能有一个开源应用程序要向全世界发布,而其他图像或图表则用于专有的内部软件。或者,有些图像可能只需要由公司内的一个部门访问,而其他图像则可以由不同的部门使用。

在这种情况下,选择支持细粒度访问控制的存储库是有益的,它允许您准确地指定谁对存储库中的每个项目具有哪些级别的访问。

版本控制。尽管大多数用户都希望下载最新版本的应用程序,但在许多情况下,需要使用旧版本。例如,兼容性问题可能会阻止最新版本在特定环境中运行,或者最新版本可能尚未完全测试。为了确保用户总是可以下载他们需要的容器映像或Helm chart版本,请在存储库中配置版本控制。

保持图像和舵图小而分散。作为一般规则,最好为需要部署的每个应用程序或微服务提供一个容器映像或Helm图。虽然可以将多个应用程序或服务组合到单个图像或图表中,但这样做可能会导致臃肿的软件包难以处理。

中央存储库的优点之一是,它可以根据需要有效地托管和管理尽可能多的离散对象。充分利用这一优势,保持图像和图表较小,即使这意味着需要管理更多的图像和图表。

最终的想法

容器映像和Helm图是简化容器化软件应用程序部署的宝贵工具。然而,为了从它们中获得最大的价值,您需要将它们托管在提供您的组织所需的访问控制、版本控制和可管理性级别的存储库中。

JFrog Artifactory提供了一个安全的解决方案,它可以作为一个Docker镜像注册表和一个舵图库。无论您必须管理多少图像或图表,或者您需要与它们集成哪种类型的部署和安装工具,Artifactory都提供了一种灵活的方式来管理驱动团队软件交付过程的所有数据。