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.
在开发工作流中使用 Azure 容器注册表时,注册表可能会很快充满在短期内不需要的映像或其他工件。 你可能会想删除早于某一特定持续时间或与指定名称筛选器匹配的所有标记。
若要快速删除多个项目,请使用 acr purge 命令。 你可以将 acr purge 或 计划 的 ACR 任务运行。
重要
acr purge 目前为预览版。
有关适用于 beta 版、预览版或尚未正式发布的 Azure 功能的法律条款,请参阅 Azure 预览补充使用条款。
acr purge 命令(预览版)目前在公共容器映像(mcr.microsoft.com/acr/acr-cli:0.17)中分发,该映像基于 GitHub acr-cli 存储库中的源代码生成。
可以使用Azure CLI的本地安装来运行本文中的 ACR 任务示例。 如果想要在本地使用它,则需要使用 2.0.76 版或更高版本。 运行 az --version 即可查找版本。 如果需要安装或升级,请参阅 Install Azure CLI。
警告
acr purge请谨慎使用命令 - 已删除的图像数据不可恢复。 如果你有按清单摘要(而不是映像名称)拉取映像的系统,请不要清除未标记的图像。 删除未标记的映像可防止这些系统从注册表拉取映像。 请考虑 采用 唯一的标记 方案 而不是使用清单进行拉取。
若要使用 Azure CLI 命令删除单个映像标记或清单,请参阅 Azure Container Registry 中的
使用清除命令
该 acr purge 命令通过存储库中的标记删除映像。 它会删除与名称筛选器匹配且早于指定持续时间的所有图像。 默认情况下,该命令仅删除标记引用,而不是基础 清单 和层数据。 该命令还提供删除清单的选项。
注意
acr purge 不会删除图像标签或存储库,如果 write-enabled 属性设置为 false。 有关详细信息,请参阅在Azure容器注册表中锁定容器映像。
acr purge 旨在作为 ACR 任务中的容器命令运行。 它会自动在任务运行的注册中心进行身份验证,并在其中执行相关操作。 本文中的任务示例使用 acr purge 命令 别名 ,而不是完全限定的容器映像命令。
重要
执行 acr purge 命令的标准命令为 az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --optional parameter' /dev/null.
建议运行完整的 acr purge 命令。 例如,将acr purge --help作为az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null运行。
请在运行 acr purge 时,至少指定以下选项:
-
--filter- 存储库名称正则表达式和标记名称正则表达式,用于筛选注册表中的映像。 例如,--filter "hello-world:.*"匹配存储库中的所有标记hello-world,--filter "hello-world:^1.*"匹配以存储库开头的1标记hello-world,并--filter ".*/cache:.*"匹配以结尾/cache的存储库中的所有标记。 你还可传递多个--filter参数。 -
--ago- 一个 Go 风格的持续时间字符串,表示超过此持续时间后将删除图像。 该持续时间由一个或多个十进制数字序列组成,每个数字都有一个单位后缀。 有效的时间单位包括“d”(表示天数)、“h”(表示小时数)和“m”(表示分钟数)。 例如,--ago 2d3h6m选择上次修改时间早于 2 天零 3 小时 6 分钟之前的所有已筛选的映像,--ago 1.5h选择上次修改时间早于 1.5 小时之前的映像。
acr purge 支持多个可选参数:
-
--untagged- 删除没有关联标记的所有清单(未标记的清单)。 此参数除了删除命令已删除的标签外,还会删除未标记的清单。 删除与清单关联的所有标记以清除它;仅当使用--untagged时,才能清除无标记清单。 -
--dry-run- 指定未删除任何数据,但命令将生成与在没有此标志的情况下运行命令相同的输出。 此参数可用于测试清除命令,以确保它不会无意中删除要保留的数据。 -
--keep- 指定每个存储库中保留的待删除标记的最新数量。 最新标记由所提供--filter选项匹配的每个存储库的标记的上次修改时间确定。 -
--concurrency- 指定要同时处理的清除任务数量。
注意
--untagged 筛选器不会响应 --ago 筛选器。
有关其他参数的信息,请运行 acr purge --help。
acr purge 支持 ACR Tasks 命令的其他功能,包括流式传输并保存的 运行变量 和 任务运行日志 ,以供以后检索。
在按需任务中运行清除命令
以下示例使用 az acr run 命令按需运行 acr purge 命令。 本示例删除 hello-world 中存储库中所有映像标记和清单,这些标记和清单在一天前进行了多次修改,以及所有未标记的清单。 容器命令是使用环境变量传递的。 任务在没有源上下文的情况下运行。
# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
--untagged --ago 1d"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
/dev/null
在计划任务中运行清除命令
以下示例使用 az acr task create 命令来创建一个每天的定时 ACR 任务。 任务会删除 hello-world 存储库中在七天前被修改的标记。 容器命令是使用环境变量传递的。 任务在没有源上下文的情况下运行。
# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
--ago 7d"
az acr task create --name purgeTask \
--cmd "$PURGE_CMD" \
--schedule "0 0 * * *" \
--registry myregistry \
--context /dev/null
运行 az acr task show 命令查看该计时器触发器是否已配置。
清除大量标签和清单
清除大量标记和清单可能需要几分钟或更长时间。 若要清除数千个标记和清单,该命令可能需要运行时间超过默认超时时间:对按需任务是 600 秒,对计划任务是 3,600 秒。 如果命令超时,进程只会删除标记和清单的子集。 若要确保完成大规模清除操作,请传递 --timeout 参数以增加此值。
例如,以下按需任务设置超时时间为 3,600 秒(一小时):
# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
--ago 1d --untagged"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
--timeout 3600 \
/dev/null
示例:计划清除注册表中的多个存储库
此示例演示如何使用 acr purge 定期清除注册表中的多个存储库。 例如,你可能有一个将映像推送到 samples/devimage1 和 samples/devimage2 存储库的开发管道。 你定期将开发映像导入到部署的生产存储库,因此不再需要开发映像。 你会每周清除 samples/devimage1 和 samples/devimage2 存储库,以便为未来一周的工作做好准备。
预览清除内容
在删除数据之前,请使用 --dry-run 参数运行按需清除任务。 此选项显示命令清除的标记和清单,而不删除任何数据。
在以下示例中,每个存储库中的筛选器都会选择所有标记。
--ago 0d 参数匹配与筛选器相匹配的存储库中所有存留期的映像。 根据方案的需要修改选择条件。
--untagged 参数指示要删除清单以及标记。 使用环境变量将容器命令传递给 az acr run 命令。
# Environment variable for container command line
PURGE_CMD="acr purge \
--filter 'samples/devimage1:.*' --filter 'samples/devimage2:.*' \
--ago 0d --untagged --dry-run"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
/dev/null
查看命令输出,以查看与选择参数匹配的标记和清单。 由于该命令使用 --dry-run,因此不会删除任何数据。
示例输出:
[...]
Deleting tags for repository: samples/devimage1
myregistry.azurecr.cn/samples/devimage1:232889b
myregistry.azurecr.cn/samples/devimage1:a21776a
Deleting manifests for repository: samples/devimage1
myregistry.azurecr.cn/samples/devimage1@sha256:81b6f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e788b
myregistry.azurecr.cn/samples/devimage1@sha256:3ded859790e68bd02791a972ab0bae727231dc8746f233a7949e40f8ea90c8b3
Deleting tags for repository: samples/devimage2
myregistry.azurecr.cn/samples/devimage2:5e788ba
myregistry.azurecr.cn/samples/devimage2:f336b7c
Deleting manifests for repository: samples/devimage2
myregistry.azurecr.cn/samples/devimage2@sha256:8d2527cde610e1715ad095cb12bc7ed169b60c495e5428eefdf336b7cb7c0371
myregistry.azurecr.cn/samples/devimage2@sha256:ca86b078f89607bc03ded859790e68bd02791a972ab0bae727231dc8746f233a
Number of deleted tags: 4
Number of deleted manifests: 4
[...]
安排清除时间
验证试运行行为符合预期后,创建计划任务以自动清理。 下面的示例将在每周日 UTC 1:00 安排一个任务,以执行之前的清除命令
# Environment variable for container command line
PURGE_CMD="acr purge \
--filter 'samples/devimage1:.*' --filter 'samples/devimage2:.*' \
--ago 0d --untagged"
az acr task create --name weeklyPurgeTask \
--cmd "$PURGE_CMD" \
--schedule "0 1 * * Sun" \
--registry myregistry \
--context /dev/null
运行 az acr task show 命令查看该计时器触发器是否已配置。
后续步骤
了解其他选项以删除 Azure Container Registry 中的图像数据。
有关映像存储的详细信息,请参阅 Azure 容器注册表中的容器映像存储。