如何通过命令行在ACR中保留最新10个镜像并删除其余?
Azure容器注册表保留最新10个镜像并删除其余的命令行实现
az acr purge本身没有直接的--limit参数来指定保留最新N个镜像,但可以结合az acr repository系列命令筛选出需要保留的镜像,再通过az acr purge删除其余镜像,以下是两种可行方案:
方案一:按标签保留最新10个镜像(适用于带标签的镜像)
先筛选出仓库中创建时间最新的10个标签,再让az acr purge排除这些标签,删除其他所有镜像(可选包含未标记镜像)。
本地测试命令
先获取最新10个标签:
az acr repository show-tags --name <ACR_NAME> --repository <REPOSITORY_NAME> --orderby time_desc --top 10 --output tsv
创建定时清理任务:
az acr task create \ --name "purge-old-images" \ --resource-group "<RESOURCE_GROUP_NAME>" \ --registry "<ACR_NAME>" \ --cmd "az acr purge --name <ACR_NAME> --repository <REPOSITORY_NAME> \ $(az acr repository show-tags --name <ACR_NAME> --repository <REPOSITORY_NAME> --orderby time_desc --top 10 --output tsv | sed 's/^/-t !/')" \ --schedule "0 0 * * *"
如果需要同时删除未标记镜像,在az acr purge命令后添加--untagged参数即可。
方案二:按镜像manifest保留最新10个镜像(支持未标记镜像)
如果要保留包括未标记在内的最新10个镜像,需要基于镜像的manifest digest来筛选:
本地测试命令
先获取最新10个manifest的digest:
az acr repository show-manifests --name <ACR_NAME> --repository <REPOSITORY_NAME> --orderby time_desc --top 10 --query "[].digest" --output tsv
创建定时清理任务:
az acr task create \ --name "purge-old-images" \ --resource-group "<RESOURCE_GROUP_NAME>" \ --registry "<ACR_NAME>" \ --cmd "az acr purge --name <ACR_NAME> --repository <REPOSITORY_NAME> \ $(az acr repository show-manifests --name <ACR_NAME> --repository <REPOSITORY_NAME> --orderby time_desc --top 10 --query "[].digest" --output tsv | sed 's/^/-d !/')" \ --schedule "0 0 * * *"
注意事项
- 替换命令中的
<RESOURCE_GROUP_NAME>、<ACR_NAME>、<REPOSITORY_NAME>为实际资源信息。 - 建议先在本地执行筛选命令,确认获取的标签/manifest符合预期后,再创建定时任务。
- ACR任务默认使用的服务主体已具备执行相关命令的权限,无需额外配置。
内容的提问来源于stack exchange,提问作者hades
相关产品推荐
相关产品推荐

