Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
本文介绍容器注册表、存储库和容器映像以及相关项目的重要概念。
注册表
容器注册表是一项用来存储和分发容器映像和相关项目的服务。 Docker Hub是公共容器注册表的一个示例,用作 Docker 容器映像的一般目录。 Azure Container Registry为用户提供对其容器内容的直接控制, 通过集成身份验证,geo-replication支持网络关闭部署的全局分发和可靠性、虚拟网络配置以及 Private Link、tag 锁定和其他许多增强功能。
除了 Docker 兼容的容器映像,Azure 容器注册表还支持一系列 内容制品,包括 Helm 图表和开放容器倡议 (OCI) 映像格式。
存储库
存储库是注册表中名称相同但标记不同的容器映像或其他项目的集合。 例如,以下三个映像位于 acr-helloworld 存储库中:
- acr-helloworld:latest
- acr-helloworld:v1
- acr-helloworld:v2
存储库名称还可包括命名空间。 命名空间允许你使用正斜杠分隔的名称标识组织中的相关存储库和项目所有权。 但是,注册表独立管理所有存储库,而不是将其作为层次结构进行管理。 例如:
- marketing/campaign10-18/web:v2
- marketing/campaign10-18/api:v3
- marketing/campaign10-18/email-sender:v2
- product-returns/web-submission:20230604
- product-returns/legacy-integrator:20230715
存储库名称只能包含小写字母数字字符、句点、短划线、下划线和正斜杠。
工件
注册表中的容器映像或其他项目与一个或多个标记相关联,具有一个或多个层,并由一个清单标识。 了解这些组件之间的关系有助于有效管理注册表。
标记
映像或其他项目的标记指定了其版本。 存储库中的单个项目可分配有一个或多个标记,但也可能“无标记”。也就是说,可删除映像中的所有标记,而映像的数据(其层)保留在注册表中。
映像的名称由存储库(或存储库和命名空间)和标记进行定义。 可以通过在推送或拉取操作中指定映像名称来推送和拉取映像。 如果未在 Docker 命令中提供标记,则默认使用标记 latest。
如何对容器映像进行标记由其开发或部署方案引导。 例如,建议使用稳定标记来维护基础映像,使用唯一标记来部署映像。 有关详细信息,请参阅有关对容器映像进行标记和版本控制的建议。
有关标记命名规则,请参阅 Docker 文档。
层
容器映像和项目由一个或多个层组成。 不同的制品类型以不同的方式定义层。 例如,在 Docker 容器映像中,每个层都对应于 Dockerfile 中定义了映像的一行:
构件在注册表中共享相同的层,从而提高了存储效率。 例如,不同存储库中的多个镜像可能有一个常见的 ASP.NET Core 基础层,但注册表中只存储该层的一个副本。 通过让多个项目共享公用层,层共享还优化了到节点的层分布。 如果节点上已有的镜像包含 ASP.NET Core 层作为基础层,那么后续拉取引用同一层的不同镜像不会将该层传输到节点。 相反,它会引用节点上已存在的层。
为了针对潜在的层操作提供安全隔离和保护,层不会在注册表之间共享。
清单
推送到容器注册表的每个容器映像或项目都与一个清单相关联。 内容被推送至注册表时生成的清单唯一标识工件并指定其层。
Linux hello-world 映像的基本清单类似于以下内容:
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1510,
"digest": "sha256:fbf289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 977,
"digest": "sha256:2c930d010525941c1d56ec53b97bd057a67ae1865eebf042686d2a2d18271ced"
}
]
}
可以使用 Azure CLI 命令 az acr manifest list-metadata 列出存储库的清单:
az acr manifest list-metadata --name <repositoryName> --registry <acrName>
例如,列出“acr-helloworld”存储库的清单:
az acr manifest list-metadata --name acr-helloworld --registry myregistry
[
{
"digest": "sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108",
"tags": [
"latest",
"v3"
],
"timestamp": "2023-07-12T15:52:00.2075864Z"
},
{
"digest": "sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57",
"tags": [
"v2"
],
"timestamp": "2023-07-12T15:50:53.5372468Z"
},
{
"digest": "sha256:7ca0e0ae50c95155dbb0e380f37d7471e98d2232ed9e31eece9f9fb9078f2728",
"tags": [
"v1"
],
"timestamp": "2023-07-11T21:38:35.9170967Z"
}
]
清单摘要
清单由唯一的 SHA-256 哈希(即清单摘要)进行标识。 每个映像或制品(无论是否标记)均通过其摘要进行标识。 即使工件的层数据与其他工件相同,摘要值仍然是唯一的。 此机制使你能够反复向注册表推送标记相同的映像。 例如,你可反复向注册表推送 myimage:latest 而不出任何错误,因为每个映像均由其唯一摘要标识。
通过在拉取操作中指定项目的摘要,可从注册表拉取该项目。 某些系统可能被配置为通过摘要进行镜像拉取,因为这保证了即便以后向注册表推送标记相同的镜像,也会拉取到正确的镜像版本。
重要
如果反复推送具有相同标记的已修改项目,则可能会创建孤立的项目;此类项目不带标记,但仍占用注册表中的空间。 在使用标记列出或查看图像时,那些未标记的图像不会在 Azure CLI 或 Azure 门户中显示。 但是,它们的层仍然存在,且占用注册表中的空间。 当清单是指向特定层的唯一清单或最后一个清单时,删除未标记的映像将释放注册表空间。 有关释放未标记图像使用的空间的信息,请参阅删除 Azure 容器注册表中的容器图像。
对工件进行处理
若要使用 Docker 或其他客户端工具对用于推送和拉取操作的注册表项目进行寻址,请将完全限定的注册表名称、存储库名称(包括适用的命名空间路径)以及项目标记或清单摘要组合到一起。 有关这些术语的解释,请参阅前面的部分。
按标记进行寻址:[loginServerUrl]/[repository][:tag]
按摘要进行寻址:[loginServerUrl]/[repository@sha256][:digest]
使用 Docker 或其他客户端工具将项目拉取或推送到Azure容器注册表时,请使用注册表的完全限定 URL,也称为 login 服务器名称。 在Azure云中,Azure容器注册表的完全限定 URL 采用 myregistry.azurecr.cn 格式(全部小写)。
注意
- 不能在注册表登录服务器 URL 中指定端口号,例如
myregistry.azurecr.cn:443。 - 如果未在命令中提供标记,则默认使用标记
latest。
按标签推送
示例:
docker push myregistry.azurecr.cn/samples/myimage:20230106
docker push myregistry.azurecr.cn/marketing/email-sender
拉取指定标签
例如:
docker pull myregistry.azurecr.cn/marketing/campaign10-18/email-sender:v2
按清单摘要拉取
例如:
docker pull myregistry.azurecr.cn/acr-helloworld@sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108
后续步骤
在 Azure Container Registry 中详细了解 注册表存储 和 支持的内容格式。
了解如何从 Azure 容器注册表中推送和拉取图像。