本页介绍了如何管理保存为 OCI 容器映像的 Helm 3 图表,包括推送(上传)、拉取(下载)、列出、标记和删除图表。
准备工作
- 如果目标代码库不存在,请创建新代码库。选择 Docker 作为代码库格式。
- 验证您是否拥有 存储库
- (可选)为 Google Cloud CLI 命令配置默认值。
安装 Helm 3.8.0 或更高版本。在更早的 Helm 版本中,OCI 格式的图表只作为一项实验性功能提供。
运行
helm version
以验证您的版本。配置 Helm 以对 Artifact Registry 进行身份验证。
创建或获取图表
本文档重点介绍如何管理图表图片,并假定您已有现有图表或熟悉如何创建图表。要详细了解 如何在 Artifact Hub 中创建图表或获取公开的图表,请参阅 了解 Helm 文档中的相关信息。
打包图表
您必须先将图表打包为图表归档,然后才能将其推送到 Artifact Registry。
切换到包含图表的目录。
打包图表。
helm package CHART-PATH
将 CHART-PATH 替换为包含
Chart.yaml
文件的目录的路径。
Helm 使用图表名称和版本作为归档文件名。例如,如果您有一个名为 my-chart
且版本号为 0.1.0
的图表,则软件包名称为 my-chart-0.1.0.tgz
。
现在,您可以将该图表推送到 Artifact Registry。
推送图表
打包图表后,您可以将其推送到工件注册库。
如需推送图表,请运行以下命令:
helm push my-chart-0.1.0.tgz oci://LOCATION-docker.pkg.dev/PROJECT/REPOSITORY
替换以下值:
- LOCATION 是 单区域或多区域 代码库的位置。
- PROJECT 是您的 Google Cloud 项目 ID。 如果您的项目 ID 包含英文冒号 (`:`),请参阅网域级项目。
- REPOSITORY 是代码库的名称。
Helm 使用 Chart.yaml
中的信息作为 OCI 容器映像名称,
标记前面。请考虑以下示例命令:
helm push my-chart-0.1.0.tgz oci://us-west1-docker.pkg.dev/my-project/my-repo
Helm 会将图表归档文件作为标记为 0.1.0
的映像 my-chart
上传。
如需验证推送操作是否成功,请列出 存储库
gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT/REPOSITORY
拉取图表
如需拉取图表,请执行以下操作:
运行以下命令以提取图表归档文件:
helm pull oci://LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE \ --version VERSION
如果要提取图表存档并提取其内容,请将
--untar
标志。helm pull oci://LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE \ --version VERSION \ --untar
替换以下值:
安装图表
使用 helm install 命令安装存储在 Artifact Registry 中的图表。
helm install RELEASE \
oci://LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE \
--version VERSION
以下示例使用图表 us-west1-docker.pkg.dev/nyap-test/helm-repo/my-chart
的版本 0.1.0
安装名为 release1
的版本:
helm install release1 oci://us-west1-docker.pkg.dev/nyap-test/helm-repo/my-chart --version 0.1.0
列表图表
您可以使用 Google Cloud 控制台或命令行列出图表。如果您 将容器映像和图表存储在同一个 Docker 代码库中, 工件类型
控制台
如需查看代码库中的映像,请执行以下操作:
打开 Google Cloud 控制台中的制品库页面。
点击包含容器映像的制品库。
点击图片可查看其版本。
gcloud
列出默认项目、代码库和 配置了默认值时的位置:
gcloud artifacts docker images list
如需列出特定位置的代码库中的映像,请运行以下命令:
gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT/REPOSITORY
如需列出特定映像的所有摘要和标记,请运行以下命令:
gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE \
--include-tags
替换以下值:
- LOCATION 是代码库的单区域或多区域位置。
- PROJECT 是您的 Google Cloud 项目 ID。 如果您的项目 ID 包含英文冒号 (`:`),请参阅网域级项目。
- REPOSITORY 是存储了映像的代码库的名称。
- IMAGE 是代码库中的映像名称。
--include-tags
会显示映像的所有版本,包括摘要和标记。如果省略此标志,则返回的列表仅包含顶级容器映像。
例如,假设一个映像具有以下特征:
- 代码库位置:
us-west1
- 代码库名称:
my-repo
- 项目 ID:
my-project
- 映像名称:
my-image
完整的代码库名称为:
us-west1-docker.pkg.dev/my-project/my-repo
完整的映像名称为:
us-west1-docker.pkg.dev/my-project/my-repo/my-image
如需详细了解映像名称格式,请参阅代码库和映像名称。
列出文件
您可以列出代码库中的文件、指定容器映像的所有版本中的文件,或映像的特定版本中的文件。
对于以下所有命令,您都可以通过向命令添加 --limit
标志来设置要返回的文件数量上限。
如需在配置默认值时列出默认项目、代码库和位置中的所有文件,请运行以下命令:
gcloud artifacts files list
如需列出指定项目、代码库和位置中的文件,请运行以下命令:
gcloud artifacts files list \
--project=PROJECT \
--repository=REPOSITORY \
--location=LOCATION
如需列出特定容器映像的所有版本的文件,请执行以下操作:
gcloud artifacts files list \
--project=PROJECT \
--repository=REPOSITORY \
--location=LOCATION \
--package=PACKAGE
如需列出特定容器映像版本的文件,请执行以下操作:
gcloud artifacts files list \
--project=PROJECT \
--repository=REPOSITORY \
--location=LOCATION \
--package=PACKAGE \
--version=VERSION
gcloud artifacts files list \
--project=PROJECT \
--repository=REPOSITORY \
--location=LOCATION \
--package=PACKAGE \
--tag=TAG
替换以下值:
LOCATION
: 单区域或多区域 代码库的位置。PROJECT
:您的 Google Cloud 项目 ID。 如果您的项目 ID 包含英文冒号 (`:`),请参阅网域级项目。REPOSITORY
:映像所在代码库的名称 。PACKAGE
:映像的名称。VERSION
:映像摘要,以sha256:
开头的字符串。TAG
:与容器映像关联的标记。
删除映像
在 Artifact Registry 代码库中,您可以删除整个容器映像,也可以删除与标记或摘要关联的特定映像版本。删除图片后,您便无法撤消此操作。
如需删除存储在 Artifact Registry 中的映像,请执行以下操作:
控制台
打开 Google Cloud 控制台中的制品库页面。
点击映像名称即可查看该映像的版本。
选择您要删除的版本。
点击删除。
在确认对话框中,点击删除。
gcloud
如需删除某个映像及其所有标记,请运行以下命令:
gcloud artifacts docker images delete LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE --delete-tags
如需删除特定映像版本,请使用以下命令之一。
gcloud artifacts docker images delete LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE:TAG [--delete-tags]
或
gcloud artifacts docker images delete LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE@IMAGE-DIGEST [--delete-tags]
地点
- LOCATION 是代码库的单区域或多区域位置。
- PROJECT 是您的 Google Cloud 项目 ID。 如果您的项目 ID 包含英文冒号 (`:`),请参阅网域级项目。
- REPOSITORY 是存储了映像的代码库的名称。
- IMAGE 是代码库中的映像名称。
- TAG 是您要删除的版本的标记。如果多个标记与同一映像版本相关联,则您必须添加
--delete-tags
才能删除映像版本,而无需先移除标记。 - IMAGE-DIGEST 是您要删除的版本的 sha256 哈希值。如果某个标记与映像摘要相关联,则您必须添加
--delete-tags
才能删除映像版本,而无需先移除标记。 --delete-tags
会移除应用于映像版本的所有标记。借助此标志,您可以在以下情况下强制删除映像版本:- 您指定了一个标记,但有其他标记与映像版本相关联。
- 您指定的映像摘要至少具有一个标记。
后续步骤
- 了解如何管理 Docker 映像。
- 无需使用 Helm 命令即可从代码库下载单个文件。