[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EXGZZ7WDFDNXM1NR1E1NXP":3,"skill-same:01M6EXGZZ7WDFDNXM1NR1E1NXP":68},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":44,"ownerHtmlUrl":45,"ownerBlogUrl":6,"ownerDescription":46,"updatedAt":47,"install":48,"resources":61},"01M6EXGZZ7WDFDNXM1NR1E1NXP","azure-containerregistry-py",null,"Azure Container Registry SDK for Python. Use for managing container images, artifacts, and repositories.\nTriggers: \"azure-containerregistry\", \"ContainerRegistryClient\", \"container images\", \"docker registry\", \"ACR\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fazure-containerregistry-py\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31],"azure","azure containerregistry py","python","docker","sdk","container images","registry","artifacts","use","container","images","triggers","azure container registry","2026-11-10 10:12:30",false,"---\nname: azure-containerregistry-py\ndescription: |\n  Azure Container Registry SDK for Python. Use for managing container images, artifacts, and repositories.\n  Triggers: \"azure-containerregistry\", \"ContainerRegistryClient\", \"container images\", \"docker registry\", \"ACR\".\npackage: azure-containerregistry\n---\n\n# Azure Container Registry SDK for Python\n\nManage container images, artifacts, and repositories in Azure Container Registry.\n\n## Installation\n\n```bash\npip install azure-containerregistry\n```\n\n## Environment Variables\n\n```bash\nAZURE_CONTAINERREGISTRY_ENDPOINT=https:\u002F\u002F\u003Cregistry-name>.azurecr.io\n```\n\n## Authentication\n\n### Entra ID (Recommended)\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\nfrom azure.identity import DefaultAzureCredential\n\nclient = ContainerRegistryClient(\n    endpoint=os.environ[\"AZURE_CONTAINERREGISTRY_ENDPOINT\"],\n    credential=DefaultAzureCredential()\n)\n```\n\n### Anonymous Access (Public Registry)\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\n\nclient = ContainerRegistryClient(\n    endpoint=\"https:\u002F\u002Fmcr.microsoft.com\",\n    credential=None,\n    audience=\"https:\u002F\u002Fmcr.microsoft.com\"\n)\n```\n\n## List Repositories\n\n```python\nclient = ContainerRegistryClient(endpoint, DefaultAzureCredential())\n\nfor repository in client.list_repository_names():\n    print(repository)\n```\n\n## Repository Operations\n\n### Get Repository Properties\n\n```python\nproperties = client.get_repository_properties(\"my-image\")\nprint(f\"Created: {properties.created_on}\")\nprint(f\"Modified: {properties.last_updated_on}\")\nprint(f\"Manifests: {properties.manifest_count}\")\nprint(f\"Tags: {properties.tag_count}\")\n```\n\n### Update Repository Properties\n\n```python\nfrom azure.containerregistry import RepositoryProperties\n\nclient.update_repository_properties(\n    \"my-image\",\n    properties=RepositoryProperties(\n        can_delete=False,\n        can_write=False\n    )\n)\n```\n\n### Delete Repository\n\n```python\nclient.delete_repository(\"my-image\")\n```\n\n## List Tags\n\n```python\nfor tag in client.list_tag_properties(\"my-image\"):\n    print(f\"{tag.name}: {tag.created_on}\")\n```\n\n### Filter by Order\n\n```python\nfrom azure.containerregistry import ArtifactTagOrder\n\n# Most recent first\nfor tag in client.list_tag_properties(\n    \"my-image\",\n    order_by=ArtifactTagOrder.LAST_UPDATED_ON_DESCENDING\n):\n    print(f\"{tag.name}: {tag.last_updated_on}\")\n```\n\n## Manifest Operations\n\n### List Manifests\n\n```python\nfrom azure.containerregistry import ArtifactManifestOrder\n\nfor manifest in client.list_manifest_properties(\n    \"my-image\",\n    order_by=ArtifactManifestOrder.LAST_UPDATED_ON_DESCENDING\n):\n    print(f\"Digest: {manifest.digest}\")\n    print(f\"Tags: {manifest.tags}\")\n    print(f\"Size: {manifest.size_in_bytes}\")\n```\n\n### Get Manifest Properties\n\n```python\nmanifest = client.get_manifest_properties(\"my-image\", \"latest\")\nprint(f\"Digest: {manifest.digest}\")\nprint(f\"Architecture: {manifest.architecture}\")\nprint(f\"OS: {manifest.operating_system}\")\n```\n\n### Update Manifest Properties\n\n```python\nfrom azure.containerregistry import ArtifactManifestProperties\n\nclient.update_manifest_properties(\n    \"my-image\",\n    \"latest\",\n    properties=ArtifactManifestProperties(\n        can_delete=False,\n        can_write=False\n    )\n)\n```\n\n### Delete Manifest\n\n```python\n# Delete by digest\nclient.delete_manifest(\"my-image\", \"sha256:abc123...\")\n\n# Delete by tag\nmanifest = client.get_manifest_properties(\"my-image\", \"old-tag\")\nclient.delete_manifest(\"my-image\", manifest.digest)\n```\n\n## Tag Operations\n\n### Get Tag Properties\n\n```python\ntag = client.get_tag_properties(\"my-image\", \"latest\")\nprint(f\"Digest: {tag.digest}\")\nprint(f\"Created: {tag.created_on}\")\n```\n\n### Delete Tag\n\n```python\nclient.delete_tag(\"my-image\", \"old-tag\")\n```\n\n## Upload and Download Artifacts\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\n\nclient = ContainerRegistryClient(endpoint, DefaultAzureCredential())\n\n# Download manifest\nmanifest = client.download_manifest(\"my-image\", \"latest\")\nprint(f\"Media type: {manifest.media_type}\")\nprint(f\"Digest: {manifest.digest}\")\n\n# Download blob\nblob = client.download_blob(\"my-image\", \"sha256:abc123...\")\nwith open(\"layer.tar.gz\", \"wb\") as f:\n    for chunk in blob:\n        f.write(chunk)\n```\n\n## Async Client\n\n```python\nfrom azure.containerregistry.aio import ContainerRegistryClient\nfrom azure.identity.aio import DefaultAzureCredential\n\nasync def list_repos():\n    credential = DefaultAzureCredential()\n    client = ContainerRegistryClient(endpoint, credential)\n    \n    async for repo in client.list_repository_names():\n        print(repo)\n    \n    await client.close()\n    await credential.close()\n```\n\n## Clean Up Old Images\n\n```python\nfrom datetime import datetime, timedelta, timezone\n\ncutoff = datetime.now(timezone.utc) - timedelta(days=30)\n\nfor manifest in client.list_manifest_properties(\"my-image\"):\n    if manifest.last_updated_on \u003C cutoff and not manifest.tags:\n        print(f\"Deleting {manifest.digest}\")\n        client.delete_manifest(\"my-image\", manifest.digest)\n```\n\n## Client Operations\n\n| Operation | Description |\n|-----------|-------------|\n| `list_repository_names` | List all repositories |\n| `get_repository_properties` | Get repository metadata |\n| `delete_repository` | Delete repository and all images |\n| `list_tag_properties` | List tags in repository |\n| `get_tag_properties` | Get tag metadata |\n| `delete_tag` | Delete specific tag |\n| `list_manifest_properties` | List manifests in repository |\n| `get_manifest_properties` | Get manifest metadata |\n| `delete_manifest` | Delete manifest by digest |\n| `download_manifest` | Download manifest content |\n| `download_blob` | Download layer blob |\n\n## Best Practices\n\n1. **Use Entra ID** for authentication in production\n2. **Delete by digest** not tag to avoid orphaned images\n3. **Lock production images** with can_delete=False\n4. **Clean up untagged manifests** regularly\n5. **Use async client** for high-throughput operations\n6. **Order by last_updated** to find recent\u002Fold images\n7. **Check manifest.tags** before deleting to avoid removing tagged images\n","# Azure Container Registry SDK for Python\n\nManage container images, artifacts, and repositories in Azure Container Registry.\n\n## Installation\n\n```bash\npip install azure-containerregistry\n```\n\n## Environment Variables\n\n```bash\nAZURE_CONTAINERREGISTRY_ENDPOINT=https:\u002F\u002F\u003Cregistry-name>.azurecr.io\n```\n\n## Authentication\n\n### Entra ID (Recommended)\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\nfrom azure.identity import DefaultAzureCredential\n\nclient = ContainerRegistryClient(\n    endpoint=os.environ[\"AZURE_CONTAINERREGISTRY_ENDPOINT\"],\n    credential=DefaultAzureCredential()\n)\n```\n\n### Anonymous Access (Public Registry)\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\n\nclient = ContainerRegistryClient(\n    endpoint=\"https:\u002F\u002Fmcr.microsoft.com\",\n    credential=None,\n    audience=\"https:\u002F\u002Fmcr.microsoft.com\"\n)\n```\n\n## List Repositories\n\n```python\nclient = ContainerRegistryClient(endpoint, DefaultAzureCredential())\n\nfor repository in client.list_repository_names():\n    print(repository)\n```\n\n## Repository Operations\n\n### Get Repository Properties\n\n```python\nproperties = client.get_repository_properties(\"my-image\")\nprint(f\"Created: {properties.created_on}\")\nprint(f\"Modified: {properties.last_updated_on}\")\nprint(f\"Manifests: {properties.manifest_count}\")\nprint(f\"Tags: {properties.tag_count}\")\n```\n\n### Update Repository Properties\n\n```python\nfrom azure.containerregistry import RepositoryProperties\n\nclient.update_repository_properties(\n    \"my-image\",\n    properties=RepositoryProperties(\n        can_delete=False,\n        can_write=False\n    )\n)\n```\n\n### Delete Repository\n\n```python\nclient.delete_repository(\"my-image\")\n```\n\n## List Tags\n\n```python\nfor tag in client.list_tag_properties(\"my-image\"):\n    print(f\"{tag.name}: {tag.created_on}\")\n```\n\n### Filter by Order\n\n```python\nfrom azure.containerregistry import ArtifactTagOrder\n\n# Most recent first\nfor tag in client.list_tag_properties(\n    \"my-image\",\n    order_by=ArtifactTagOrder.LAST_UPDATED_ON_DESCENDING\n):\n    print(f\"{tag.name}: {tag.last_updated_on}\")\n```\n\n## Manifest Operations\n\n### List Manifests\n\n```python\nfrom azure.containerregistry import ArtifactManifestOrder\n\nfor manifest in client.list_manifest_properties(\n    \"my-image\",\n    order_by=ArtifactManifestOrder.LAST_UPDATED_ON_DESCENDING\n):\n    print(f\"Digest: {manifest.digest}\")\n    print(f\"Tags: {manifest.tags}\")\n    print(f\"Size: {manifest.size_in_bytes}\")\n```\n\n### Get Manifest Properties\n\n```python\nmanifest = client.get_manifest_properties(\"my-image\", \"latest\")\nprint(f\"Digest: {manifest.digest}\")\nprint(f\"Architecture: {manifest.architecture}\")\nprint(f\"OS: {manifest.operating_system}\")\n```\n\n### Update Manifest Properties\n\n```python\nfrom azure.containerregistry import ArtifactManifestProperties\n\nclient.update_manifest_properties(\n    \"my-image\",\n    \"latest\",\n    properties=ArtifactManifestProperties(\n        can_delete=False,\n        can_write=False\n    )\n)\n```\n\n### Delete Manifest\n\n```python\n# Delete by digest\nclient.delete_manifest(\"my-image\", \"sha256:abc123...\")\n\n# Delete by tag\nmanifest = client.get_manifest_properties(\"my-image\", \"old-tag\")\nclient.delete_manifest(\"my-image\", manifest.digest)\n```\n\n## Tag Operations\n\n### Get Tag Properties\n\n```python\ntag = client.get_tag_properties(\"my-image\", \"latest\")\nprint(f\"Digest: {tag.digest}\")\nprint(f\"Created: {tag.created_on}\")\n```\n\n### Delete Tag\n\n```python\nclient.delete_tag(\"my-image\", \"old-tag\")\n```\n\n## Upload and Download Artifacts\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\n\nclient = ContainerRegistryClient(endpoint, DefaultAzureCredential())\n\n# Download manifest\nmanifest = client.download_manifest(\"my-image\", \"latest\")\nprint(f\"Media type: {manifest.media_type}\")\nprint(f\"Digest: {manifest.digest}\")\n\n# Download blob\nblob = client.download_blob(\"my-image\", \"sha256:abc123...\")\nwith open(\"layer.tar.gz\", \"wb\") as f:\n    for chunk in blob:\n        f.write(chunk)\n```\n\n## Async Client\n\n```python\nfrom azure.containerregistry.aio import ContainerRegistryClient\nfrom azure.identity.aio import DefaultAzureCredential\n\nasync def list_repos():\n    credential = DefaultAzureCredential()\n    client = ContainerRegistryClient(endpoint, credential)\n    \n    async for repo in client.list_repository_names():\n        print(repo)\n    \n    await client.close()\n    await credential.close()\n```\n\n## Clean Up Old Images\n\n```python\nfrom datetime import datetime, timedelta, timezone\n\ncutoff = datetime.now(timezone.utc) - timedelta(days=30)\n\nfor manifest in client.list_manifest_properties(\"my-image\"):\n    if manifest.last_updated_on \u003C cutoff and not manifest.tags:\n        print(f\"Deleting {manifest.digest}\")\n        client.delete_manifest(\"my-image\", manifest.digest)\n```\n\n## Client Operations\n\n| Operation | Description |\n|-----------|-------------|\n| `list_repository_names` | List all repositories |\n| `get_repository_properties` | Get repository metadata |\n| `delete_repository` | Delete repository and all images |\n| `list_tag_properties` | List tags in repository |\n| `get_tag_properties` | Get tag metadata |\n| `delete_tag` | Delete specific tag |\n| `list_manifest_properties` | List manifests in repository |\n| `get_manifest_properties` | Get manifest metadata |\n| `delete_manifest` | Delete manifest by digest |\n| `download_manifest` | Download manifest content |\n| `download_blob` | Download layer blob |\n\n## Best Practices\n\n1. **Use Entra ID** for authentication in production\n2. **Delete by digest** not tag to avoid orphaned images\n3. **Lock production images** with can_delete=False\n4. **Clean up untagged manifests** regularly\n5. **Use async client** for high-throughput operations\n6. **Order by last_updated** to find recent\u002Fold images\n7. **Check manifest.tags** before deleting to avoid removing tagged images\n",{"name":5,"package":37,"description":38},"azure-containerregistry","Azure Container Registry SDK for Python. Use for managing container images, artifacts, and repositories.\nTriggers: \"azure-containerregistry\", \"ContainerRegistryClient\", \"container images\", \"docker registry\", \"ACR\".\n","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fazure-containerregistry-py",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill azure-containerregistry-py",{"tool":54,"command":55},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill azure-containerregistry-py",{"tool":57,"command":58},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill azure-containerregistry-py","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fazure-containerregistry-py\u002FSKILL.md",true,[62],{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},"skill-report.json","REFERENCE","参考文档",8123,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fazure-containerregistry-py\u002Fskill-report.json",[69,83,93,101,107,114],{"skillNo":70,"name":71,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":79,"publishedAt":32},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[74],{"categoryNo":75,"categoryName":76,"taxonomyType":77,"taxonomyTypeDesc":78},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[80,81,82],"model","model hierarchy","model hierarchy skill",{"skillNo":84,"name":85,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":89,"publishedAt":32},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[88],{"categoryNo":75,"categoryName":76,"taxonomyType":77,"taxonomyTypeDesc":78},[90,91,92],"MCP","zoom","zoom mcp",{"skillNo":94,"name":95,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":32},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[23,99,100,91],"zoom apps sdk","apps",{"skillNo":102,"name":103,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":32},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[103],{"skillNo":108,"name":109,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":113,"publishedAt":32},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[112],{"categoryNo":75,"categoryName":76,"taxonomyType":77,"taxonomyTypeDesc":78},[109],{"skillNo":115,"name":116,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":32},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[116]]