azure-containerregistry-py

Azure Container Registry SDK for Python

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "azure-containerregistry-py" with this command: npx skills add claudedjale/skillset/claudedjale-skillset-azure-containerregistry-py

Azure Container Registry SDK for Python

Manage container images, artifacts, and repositories in Azure Container Registry.

Installation

pip install azure-containerregistry

Environment Variables

AZURE_CONTAINERREGISTRY_ENDPOINT=https://<registry-name>.azurecr.io

Authentication

Entra ID (Recommended)

from azure.containerregistry import ContainerRegistryClient from azure.identity import DefaultAzureCredential

client = ContainerRegistryClient( endpoint=os.environ["AZURE_CONTAINERREGISTRY_ENDPOINT"], credential=DefaultAzureCredential() )

Anonymous Access (Public Registry)

from azure.containerregistry import ContainerRegistryClient

client = ContainerRegistryClient( endpoint="https://mcr.microsoft.com", credential=None, audience="https://mcr.microsoft.com" )

List Repositories

client = ContainerRegistryClient(endpoint, DefaultAzureCredential())

for repository in client.list_repository_names(): print(repository)

Repository Operations

Get Repository Properties

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}")

Update Repository Properties

from azure.containerregistry import RepositoryProperties

client.update_repository_properties( "my-image", properties=RepositoryProperties( can_delete=False, can_write=False ) )

Delete Repository

client.delete_repository("my-image")

List Tags

for tag in client.list_tag_properties("my-image"): print(f"{tag.name}: {tag.created_on}")

Filter by Order

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}")

Manifest Operations

List Manifests

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}")

Get Manifest Properties

manifest = client.get_manifest_properties("my-image", "latest") print(f"Digest: {manifest.digest}") print(f"Architecture: {manifest.architecture}") print(f"OS: {manifest.operating_system}")

Update Manifest Properties

from azure.containerregistry import ArtifactManifestProperties

client.update_manifest_properties( "my-image", "latest", properties=ArtifactManifestProperties( can_delete=False, can_write=False ) )

Delete Manifest

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 Operations

Get Tag Properties

tag = client.get_tag_properties("my-image", "latest") print(f"Digest: {tag.digest}") print(f"Created: {tag.created_on}")

Delete Tag

client.delete_tag("my-image", "old-tag")

Upload and Download Artifacts

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)

Async Client

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()

Clean Up Old Images

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)

Client Operations

Operation Description

list_repository_names

List all repositories

get_repository_properties

Get repository metadata

delete_repository

Delete repository and all images

list_tag_properties

List tags in repository

get_tag_properties

Get tag metadata

delete_tag

Delete specific tag

list_manifest_properties

List manifests in repository

get_manifest_properties

Get manifest metadata

delete_manifest

Delete manifest by digest

download_manifest

Download manifest content

download_blob

Download layer blob

Best Practices

  • Use Entra ID for authentication in production

  • Delete by digest not tag to avoid orphaned images

  • Lock production images with can_delete=False

  • Clean up untagged manifests regularly

  • Use async client for high-throughput operations

  • Order by last_updated to find recent/old images

  • Check manifest.tags before deleting to avoid removing tagged images

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

github-issue-creator

No summary provided by upstream source.

Repository SourceNeeds Review
General

azure-observability

No summary provided by upstream source.

Repository SourceNeeds Review
General

azure-appconfiguration-java

No summary provided by upstream source.

Repository SourceNeeds Review
General

azure-aigateway

No summary provided by upstream source.

Repository SourceNeeds Review