mcpField
A
azure-containerregistry-py

azure-containerregistry-py

github.com/sickn33クラウド・DevOps48.7k54 回インストール今日更新
リポジトリ

azure-containerregistry-py について

Azure Container Registryのリポジトリとコンテナー成果物を管理するPython SDK向けスキルです。メタデータ、タグ、マニフェスト、ダウンロードなど、同期・非同期クライアントの操作を扱います。

主な機能

  1. 01リポジトリ一覧とプロパティ確認
  2. 02タグとマニフェストの管理
  3. 03マニフェストとBlobのダウンロード
  4. 04同期・非同期クライアントの利用
  5. 05Entra IDまたは匿名認証

活用シーン

  1. 01リポジトリとイメージメタデータの棚卸し
  2. 02タグとマニフェストの詳細確認
  3. 03成果物マニフェストやレイヤーのダウンロード
  4. 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レイヤーブロブをダウンロードする

ベストプラクティス

  1. 本番環境での認証には Entra ID を使用する
  2. 孤立したイメージを避けるため、タグではなく ダイジェストで削除する
  3. can_delete=False を設定して 本番イメージをロックする
  4. タグのないマニフェストを定期的にクリーンアップする
  5. スループットの高い操作には 非同期クライアントを使用する
  6. 新しい/古いイメージを見つけるには last_updated で並べ替える
  7. タグ付きイメージの削除を避けるため、削除前に manifest.tags を確認する

使用する場面

このスキルは、概要で説明されているワークフローやアクションを実行する際に適用できます。

制限事項

  • このスキルは、タスクが上記の範囲に明確に一致する場合にのみ使用してください。
  • 出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中止して確認を求めてください。

コメント