【研发类-框架和库Skills】azure-containerregistry-py 技能
Azure Container Registry SDK for Python。用于管理容器镜像、制品和仓库。
技能概述
azure-containerregistry-py 技能提供了Azure Container Registry SDK for Python的完整使用指南。该技能帮助开发者管理Azure容器注册表中的容器镜像、制品和仓库,支持仓库操作、标签管理、清单操作和制品上传下载等功能。
下载地址:agentic-awesome-skills/skills/azure-containerregistry-py at main · sickn33/agentic-awesome-skills · GitHub
主要功能
- 仓库管理: 列出、获取和删除容器镜像仓库
- 标签操作: 列出、获取和删除镜像标签
- 清单管理: 列出、获取、更新和删除镜像清单
- 制品操作: 下载和上传容器制品
- 权限管理: 设置镜像的读写和删除权限
- 异步客户端: 支持异步操作提高性能
触发条件
在以下情况下应该调用此技能:
- 需要管理Azure容器注册表中的镜像
- 实现容器镜像的清理和维护
- 管理容器镜像标签和清单
- 下载或上传容器制品
- 设置容器镜像的访问权限
安装方法
pip install azure-containerregistry
环境变量
AZURE_CONTAINERREGISTRY_ENDPOINT=https://<registry-name>.azurecr.io
使用示例
示例1: 创建客户端
from azure.containerregistry import ContainerRegistryClient
from azure.identity import DefaultAzureCredential# 使用Entra ID(推荐)
client = ContainerRegistryClient(
endpoint=os.environ["AZURE_CONTAINERREGISTRY_ENDPOINT"],
credential=DefaultAzureCredential()
)# 匿名访问(公共注册表)
client = ContainerRegistryClient(
endpoint="https://mcr.microsoft.com",
credential=None,
audience="https://mcr.microsoft.com"
)
示例2: 列出仓库和标签
# 列出所有仓库
for repository in client.list_repository_names():
print(repository)# 列出标签
for tag in client.list_tag_properties("my-image"):
print(f"{tag.name}: {tag.created_on}")# 按顺序过滤
from azure.containerregistry import ArtifactTagOrderfor tag in client.list_tag_properties(
"my-image",
order_by=ArtifactTagOrder.LAST_UPDATED_ON_DESCENDING
):
print(f"{tag.name}: {tag.last_updated_on}")
示例3: 清单操作
# 列出清单
from azure.containerregistry import ArtifactManifestOrderfor manifest in client.list_manifest_properties(
"my-image",
order_by=ArtifactManifestOrder.LAST_UPDATED_ON_DESCENDING
):
print(f"Digest: {manifest.digest}")
print(f"Tags: {manifest.tags}")
print(f"Size: {manifest.size_in_bytes}")# 获取清单属性
manifest = client.get_manifest_properties("my-image", "latest")
print(f"Digest: {manifest.digest}")
print(f"Architecture: {manifest.architecture}")
print(f"OS: {manifest.operating_system}")# 删除清单
client.delete_manifest("my-image", "sha256:abc123...")
示例4: 清理旧镜像
from datetime import datetime, timedelta, timezone
cutoff = datetime.now(timezone.utc) - timedelta(days=30)
for manifest in client.list_manifest_properties("my-image"):
if manifest.last_updated_on < cutoff and not manifest.tags:
print(f"Deleting {manifest.digest}")
client.delete_manifest("my-image", manifest.digest)
示例5: 异步客户端
from azure.containerregistry.aio import ContainerRegistryClient
from azure.identity.aio import DefaultAzureCredentialasync def list_repos():
credential = DefaultAzureCredential()
client = ContainerRegistryClient(endpoint, credential)
async for repo in client.list_repository_names():
print(repo)
await client.close()
await credential.close()
客户端操作
| 操作 | 描述 |
|---|---|
list_repository_names | 列出所有仓库 |
get_repository_properties | 获取仓库元数据 |
delete_repository | 删除仓库及所有镜像 |
list_tag_properties | 列出仓库中的标签 |
get_tag_properties | 获取标签元数据 |
delete_tag | 删除特定标签 |
list_manifest_properties | 列出仓库中的清单 |
get_manifest_properties | 获取清单元数据 |
delete_manifest | 按摘要删除清单 |
download_manifest | 下载清单内容 |
download_blob | 下载层blob |
最佳实践
- 使用Entra ID: 生产环境中使用Entra ID进行身份验证
- 按摘要删除: 不要按标签删除以避免孤立镜像
- 锁定生产镜像: 使用can_delete=False保护生产镜像
- 定期清理未标记清单: 定期清理未标记的清单
- 使用异步客户端: 用于高吞吐量操作
- 按last_updated排序: 查找最近/旧的镜像
- 删除前检查manifest.tags: 避免删除已标记的镜像
限制说明
- 仅当任务明确符合上述范围时使用此技能
- 不要将输出视为环境特定验证、测试或专家审查的替代品
- 如果缺少所需的输入、权限、安全边界或成功标准,请停止并寻求澄清
