azure-containerregistry-py について
Azure Container Registryのリポジトリとコンテナー成果物を管理するPython SDK向けスキルです。メタデータ、タグ、マニフェスト、ダウンロードなど、同期・非同期クライアントの操作を扱います。
主な機能
- 01リポジトリ一覧とプロパティ確認
- 02タグとマニフェストの管理
- 03マニフェストとBlobのダウンロード
- 04同期・非同期クライアントの利用
- 05Entra IDまたは匿名認証
活用シーン
- 01リポジトリとイメージメタデータの棚卸し
- 02タグとマニフェストの詳細確認
- 03成果物マニフェストやレイヤーのダウンロード
- 04候補を確認したうえでのイメージ保持管理
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill azure-containerregistry-pyインストール後、Claude Code で/azure-containerregistry-pyを入力して読み込まれたか確認します。
詳細
Azure Container Registry SDK for Python
Azure Container Registry 内のコンテナーイメージ、アーティファクト、リポジトリを管理します。
インストール
pip install azure-containerregistry
環境変数
AZURE_CONTAINERREGISTRY_ENDPOINT=https://<registry-name>.azurecr.io
認証
Entra ID(推奨)
import os
from azure.containerregistry import ContainerRegistryClient
from azure.identity import DefaultAzureCredential
client = ContainerRegistryClient(
endpoint=os.environ["AZURE_CONTAINERREGISTRY_ENDPOINT"],
credential=DefaultAzureCredential()
)
匿名アクセス(パブリックレジストリ)
from azure.containerregistry import ContainerRegistryClient
client = ContainerRegistryClient(
endpoint="https://mcr.microsoft.com",
credential=None,
audience="https://mcr.microsoft.com"
)
リポジトリの一覧表示
client = ContainerRegistryClient(endpoint, DefaultAzureCredential())
for repository in client.list_repository_names():
print(repository)
リポジトリの操作
リポジトリのプロパティを取得する
properties = client.get_repository_properties("my-image")
print(f"Created: {properties.created_on}")
print(f"Modified: {properties.last_updated_on}")
print(f"Manifests: {properties.manifest_count}")
print(f"Tags: {properties.tag_count}")
リポジトリのプロパティを更新する
from azure.containerregistry import RepositoryProperties
client.update_repository_properties(
"my-image",
properties=RepositoryProperties(
can_delete=False,
can_write=False
)
)
リポジトリを削除する
client.delete_repository("my-image")
タグの一覧表示
for tag in client.list_tag_properties("my-image"):
print(f"{tag.name}: {tag.created_on}")
順序で絞り込む
from azure.containerregistry import ArtifactTagOrder
# Most recent first
for tag in client.list_tag_properties(
"my-image",
order_by=ArtifactTagOrder.LAST_UPDATED_ON_DESCENDING
):
print(f"{tag.name}: {tag.last_updated_on}")
マニフェストの操作
マニフェストの一覧表示
from azure.containerregistry import ArtifactManifestOrder
for 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}")
マニフェストのプロパティを更新する
from azure.containerregistry import ArtifactManifestProperties
client.update_manifest_properties(
"my-image",
"latest",
properties=ArtifactManifestProperties(
can_delete=False,
can_write=False
)
)
マニフェストを削除する
# Delete by digest
client.delete_manifest("my-image", "sha256:abc123...")
# Delete by tag
manifest = client.get_manifest_properties("my-image", "old-tag")
client.delete_manifest("my-image", manifest.digest)
タグの操作
タグのプロパティを取得する
tag = client.get_tag_properties("my-image", "latest")
print(f"Digest: {tag.digest}")
print(f"Created: {tag.created_on}")
タグを削除する
client.delete_tag("my-image", "old-tag")
アーティファクトのアップロードとダウンロード
from azure.containerregistry import ContainerRegistryClient
client = ContainerRegistryClient(endpoint, DefaultAzureCredential())
# Download manifest
manifest = client.download_manifest("my-image", "latest")
print(f"Media type: {manifest.media_type}")
print(f"Digest: {manifest.digest}")
# Download blob
blob = client.download_blob("my-image", "sha256:abc123...")
with open("layer.tar.gz", "wb") as f:
for chunk in blob:
f.write(chunk)
非同期クライアント
from azure.containerregistry.aio import ContainerRegistryClient
from azure.identity.aio import DefaultAzureCredential
async 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()
古いイメージのクリーンアップ
経過期間やタグがないことだけを根拠に、削除を直接実行しないでください。タグのないダイジェストでも、デプロイされていたり、マルチアーキテクチャマニフェストから参照されていたりする場合があります。依存関係と現在のワークロードを調査し、削除候補のダイジェストを正確に提示したうえで、保持/復旧ポリシーに基づく削除の承認を得てください。以下の変更を伴うループを実行する前に、ドライランで候補レポートを作成してください。
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)
クライアントの操作
| 操作 | 説明 |
|---|---|
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 | レイヤーブロブをダウンロードする |
ベストプラクティス
- 本番環境での認証には Entra ID を使用する
- 孤立したイメージを避けるため、タグではなく ダイジェストで削除する
can_delete=Falseを設定して 本番イメージをロックする- タグのないマニフェストを定期的にクリーンアップする
- スループットの高い操作には 非同期クライアントを使用する
- 新しい/古いイメージを見つけるには
last_updatedで並べ替える - タグ付きイメージの削除を避けるため、削除前に
manifest.tagsを確認する
使用する場面
このスキルは、概要で説明されているワークフローやアクションを実行する際に適用できます。
制限事項
- このスキルは、タスクが上記の範囲に明確に一致する場合にのみ使用してください。
- 出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
- 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中止して確認を求めてください。
コメント
Markdown 対応