容器概念

本文档介绍了与容器(包括注册表、代码库和工件)相关的关键概念。文中还包含一些有关这些概念如何应用于 Artifact Registry 和 Container Registry 的基本信息。

注册表

注册表在代码库中存储和分发容器映像以及按名称整理的工件。一个注册表可以包含一个代码库或多个代码库,并且可以是公共或私有的。

Docker Hub 和 Artifact Registry 等注册表服务提供了用于创建公共代码库或私有代码库的选项。拉取公共映像时,请务必了解可能存在的安全问题。如需详细了解如何监控和减少依赖项占用量,请参阅依赖项管理

注册表会整理成用于存储各个容器映像的仓库。借助 Artifact Registry,您可以在单个项目中创建多个代码库,并将特定 区域或多区域 与每个代码库相关联。相关代码库可以按标签分组。

仓库

名称相同但标记不同的映像和工件会整理到代码库中。如果在将映像推送到代码库时未指定标记,则映像将使用 latest 标记进行标记。如果在未指定标记的情况下推送其他映像,则 latest 标记会从原始映像移至较新的映像,使第一个映像不带标记。我们建议为版本指定一个 latest 以外的标记。

术语“仓库”并非总是一致;在 Artifact Registry 中,使用映像路径的部分内容来标识项目、 单区域或多区域 、映像的名称以及标记清单摘要会更加有用。

例如:

docker push us-west1-docker.pkg.dev/PROJECT/quickstart-docker-repo/quickstart-image:tag1

  • us-west1 是代码库的位置
  • docker.pkg.dev 是 Docker 代码库的主机名。
  • PROJECT 是您的 Google Cloud 项目 ID 创建的命名空间。
  • quickstart-docker-repo 是项目下用于存储映像的命名空间。在 Artifact Registry 中,路径的这一部分称为代码库。
  • quickstart-imagequickstart-image 所有版本的代码库,通常称为“映像”
  • tag1 是指定映像版本的标记。

图片

工件和映像都可以存储在 Artifact Registry 中。工件可以是任何内容:文本文件、Docker 映像或 Helm 图表,而映像通常是指容器映像。容器映像是包含在任何环境中运行的所有必要元素的软件包。如需了解详情,请参阅什么是容器

将映像推送或上传到代码库,并从代码库中拉取或下载映像。为了指定正确的映像和版本,必须指定唯一的注册表和工件。

例如:

docker pull us-west1-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

  • us-west1-docker.pkg.dev 是注册表
  • /google-samples/containers/gke/ 是命名空间和子命名空间。在 Artifact Registry 中,google-samples 是 Google Cloud 项目,containers 称为 Artifact Registry 代码库
  • hello-app 是工件名称
  • :1.0 是用于指定要拉取的工件版本的标记

存储在代码库中的容器映像是使用以增量方式构建的。不同的图片可以使用某些相同的图层。层的定义方式因映像类型而异,例如,Dockerfile 中的每条指令都对应于 Docker 映像中的一层。在注册表中,具有通用层的映像会共享这些层,从而提高存储效率。出于安全考虑,系统未在不同的注册表之间共享层。

删除容器映像时,这些层不会立即删除。系统每天都会删除未被注册表中的任何映像引用的层。

标记

用户在将映像推送或拉取到代码库时添加标记来指定映像的版本。一个映像可以有一个或多个标记,也可以完全没有标记。如果您使用同一标记推送某个映像两次,则该标记将从第一张映像中移除,并移至第二映像,使第一个映像不带标记。未标记的映像仍可通过其清单摘要访问。

latest 标记是在没有标记的情况下推送映像时附加的特殊标记。

例如:

docker push us-west1-docker.pkg.dev/my-project/my-repo/hello-app

将映像推送到 hello-app:latest

docker pull us-west1-docker.pkg.dev/my-project/my-repo/hello-app

拉取映像 hello-app:latest

请务必注意,将映像推送到带有 latest 以外的标记的代码库时,系统不会添加 latest 标记,因此 latest 映像可能位于最新更改之后。我们建议为版本使用 latest 以外的标记。 如需详细了解如何标记映像,请参阅正确标记映像

清单

图片清单可唯一标识并指定每张图片中的层。清单由唯一的 SHA-256 哈希(称为清单摘要)标识。清单摘要比标记更可靠、更安全,因为系统可能会将同一映像的多个版本推送到同一标记,从而使部分映像不带标记,而每个映像由其清单摘要唯一指定。

如果您使用工具扫描或分析图片,则这些工具的结果仅对扫描的图片有效。为确保部署已扫描的映像,您不能依赖于该标记,因为该标记引用的映像可能会发生变化。

如需详细了解 Artifact Registry 专用的标记和清单,请参阅管理映像使用容器映像

后续步骤