Schnellstart: Verwenden der Azure Container Registry-Clientbibliotheken

Dieser Artikel hilft Ihnen beim Einstieg in die Verwendung der Clientbibliothek für Azure Container Registry. Führen Sie diese Schritte aus, um Beispielcode für Vorgänge auf Datenebene für Images und Artefakte auszuprobieren.

Verwenden Sie die Clientbibliothek für Azure Container Registry für Folgendes:

  • Auflisten von Images oder Artefakten in einer Registrierung
  • Abrufen von Metadaten für Images und Artefakte, Repositorys und Tags
  • Festlegen von Lese-/Schreib-/Löscheigenschaften für Registrierungselemente
  • Löschen von Images und Artefakten, Repositorys und Tags

Azure Container Registry verfügt auch über eine Verwaltungsbibliothek für Vorgänge auf Steuerungsebene, einschließlich Registrierungserstellung und Updates.

Voraussetzungen

Wichtige Begriffe

  • Eine Azure-Containerregistrierung speichert Containerimages und OCI-Artefakte.
  • Ein Image oder Artefakt besteht aus einem Manifest und Ebenen.
  • Ein Manifest beschreibt die Ebenen, aus denen sich das Image oder Artefakt zusammensetzt. Es wird anhand seines Digest eindeutig identifiziert.
  • Ein Image oder Artefakt kann auch markiert werden, um es mit einem für Benutzer lesbaren Alias zu versehen. Einem Image oder Artefakt können null oder mehr Tags zugeordnet sein, und jedes Tag identifiziert das Image eindeutig.
  • Eine Sammlung mit Images oder Artefakten, die den gleichen Namen, aber unterschiedliche Tags haben, ist ein Repository.

Weitere Informationen finden Sie unter Informationen zu Registrierungen, Repositorys und Artefakten.

Erste Schritte

Quellcode | Paket (NuGet) | API-Referenz | Beispiele

Zum Entwickeln von .NET-Anwendungscode, der eine Verbindung mit einer Azure Container Registry-Instanz herstellen kann, benötigen Sie die Bibliothek Azure.Containers.ContainerRegistry.

Installieren des Pakets

Installieren Sie die Azure Container Registry-Clientbibliothek für .NET mit NuGet:

dotnet add package Azure.Containers.ContainerRegistry --prerelease

Authentifizieren des Clients

Damit Ihre Anwendung eine Verbindung mit der Registrierung herstellen kann, müssen Sie ein für die Authentifizierung geeignetes ContainerRegistryClient-Element erstellen. Verwenden Sie die Azure-Identitätsbibliothek, um Microsoft Entra ID-Unterstützung für die Authentifizierung von Azure SDK-Clients mit den entsprechenden Azure-Diensten hinzuzufügen.

Wenn Sie Ihre Anwendung lokal entwickeln und debuggen, können Sie Ihren eigenen Benutzer verwenden, um sich bei der Registrierung zu authentifizieren. Dazu können Sie den Benutzer mit der Azure CLI authentifizieren und Ihre Anwendung über diese Anwendung ausführen. Wenn Ihre Anwendung einen Client verwendet, der für die Authentifizierung mit DefaultAzureCredential erstellt wurde, wird die Authentifizierung bei der Registrierung am angegebenen Endpunkt ordnungsgemäß ausgeführt.

// Create a ContainerRegistryClient that will authenticate to your registry through Azure Active Directory
Uri endpoint = new Uri("https://myregistry.azurecr.io");
ContainerRegistryClient client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential(),
    new ContainerRegistryClientOptions()
    {
        Audience = ContainerRegistryAudience.AzureResourceManagerPublicCloud
    });

In der INFODATEI zu Azure-Identitäten finden Sie weitere Ansätze für die Authentifizierung mit DefaultAzureCredential, die sowohl lokal als auch in Bereitstellungsumgebungen genutzt werden können. Informationen zum Herstellen einer Verbindung mit Registrierungen in nicht öffentlichen Azure-Clouds finden Sie in der API-Referenz.

Weitere Informationen zur Verwendung von Microsoft Entra ID mit Azure Container Registry finden Sie in der Übersicht über die Authentifizierung.

Beispiele

In jedem Beispiel wird davon ausgegangen, dass die Umgebungsvariable REGISTRY_ENDPOINT auf eine Zeichenfolge festgelegt ist, die das Präfix https:// und den Namen des Anmeldeservers enthält, z. B. „https://myregistry.azurecr.io".

In den folgenden Beispielen werden asynchrone APIs verwendet, die eine Aufgabe zurückgeben. Synchrone APIs sind ebenfalls verfügbar.

Asynchrones Auflisten von Repositorys

Durchlaufen Sie die Sammlung von Repositorys in der Registrierung:

// Get the service endpoint from the environment
Uri endpoint = new Uri(Environment.GetEnvironmentVariable("REGISTRY_ENDPOINT"));

// Create a new ContainerRegistryClient
ContainerRegistryClient client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential(),
    new ContainerRegistryClientOptions()
    {
        Audience = ContainerRegistryAudience.AzureResourceManagerPublicCloud
    });

// Get the collection of repository names from the registry
AsyncPageable<string> repositories = client.GetRepositoryNamesAsync();
await foreach (string repository in repositories)
{
    Console.WriteLine(repository);
}

Asynchrones Festlegen von Artefakteigenschaften

// Get the service endpoint from the environment
Uri endpoint = new Uri(Environment.GetEnvironmentVariable("REGISTRY_ENDPOINT"));

// Create a new ContainerRegistryClient
ContainerRegistryClient client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential(),
    new ContainerRegistryClientOptions()
    {
        Audience = ContainerRegistryAudience.AzureResourceManagerPublicCloud
    });

// Get the collection of repository names from the registry
AsyncPageable<string> repositories = client.GetRepositoryNamesAsync();
await foreach (string repository in repositories)
{
    Console.WriteLine(repository);
}

Asynchrones Löschen von Images

using System.Linq;
using Azure.Containers.ContainerRegistry;
using Azure.Identity;

// Get the service endpoint from the environment
Uri endpoint = new Uri(Environment.GetEnvironmentVariable("REGISTRY_ENDPOINT"));

// Create a new ContainerRegistryClient
ContainerRegistryClient client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential(),
    new ContainerRegistryClientOptions()
    {
        Audience = ContainerRegistryAudience.AzureResourceManagerPublicCloud
    });

// Iterate through repositories
AsyncPageable<string> repositoryNames = client.GetRepositoryNamesAsync();
await foreach (string repositoryName in repositoryNames)
{
    ContainerRepository repository = client.GetRepository(repositoryName);

    // Obtain the images ordered from newest to oldest
    AsyncPageable<ArtifactManifestProperties> imageManifests =
        repository.GetManifestPropertiesCollectionAsync(orderBy: ArtifactManifestOrderBy.LastUpdatedOnDescending);

    // Delete images older than the first three.
    await foreach (ArtifactManifestProperties imageManifest in imageManifests.Skip(3))
    {
        RegistryArtifact image = repository.GetArtifact(imageManifest.Digest);
        Console.WriteLine($"Deleting image with digest {imageManifest.Digest}.");
        Console.WriteLine($"   Deleting the following tags from the image: ");
        foreach (var tagName in imageManifest.Tags)
        {
            Console.WriteLine($"        {imageManifest.RepositoryName}:{tagName}");
            await image.DeleteTagAsync(tagName);
        }
        await image.DeleteAsync();
    }
}

Erste Schritte

Quellcode | Paket (Maven) | API-Referenz | Beispiele

Die derzeitig unterstützten Umgebungen

Einschließen des Pakets

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-containers-containerregistry</artifactId>
  <version>1.0.0-beta.3</version>
</dependency>

Authentifizieren des Clients

Die Azure-Identitätsbibliothek bietet Microsoft Entra ID-Unterstützung für die Authentifizierung.

In den folgenden Beispielen wird davon ausgegangen, dass Sie über eine Registrierungsendpunkt-Zeichenfolge verfügen, die das Präfix https:// und den Namen des Anmeldeservers enthält, z. B. „https://myregistry.azurecr.io".

DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
ContainerRegistryClient client = new ContainerRegistryClientBuilder()
    .endpoint(endpoint)
    .credential(credential)
    .buildClient();
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
ContainerRegistryAsyncClient client = new ContainerRegistryClientBuilder()
    .endpoint(endpoint)
    .credential(credential)
    .buildAsyncClient();

Weitere Informationen zur Verwendung von Microsoft Entra ID mit Azure Container Registry finden Sie in der Übersicht über die Authentifizierung.

Beispiele

In jedem Beispiel wird davon ausgegangen, dass Sie über eine Registrierungsendpunkt-Zeichenfolge verfügen, die das Präfix https:// und den Namen des Anmeldeservers enthält, z. B. „https://myregistry.azurecr.io".

Auflisten der Repositorynamen

Durchlaufen Sie die Sammlung von Repositorys in der Registrierung:

DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
ContainerRegistryClient client = new ContainerRegistryClientBuilder()
    .endpoint(endpoint)
    .credential(credential)
    .buildClient();

client.listRepositoryNames().forEach(repository -> System.out.println(repository));

Festlegen von Artefakteigenschaften

TokenCredential defaultCredential = new DefaultAzureCredentialBuilder().build();

ContainerRegistryClient client = new ContainerRegistryClientBuilder()
    .endpoint(endpoint)
    .credential(defaultCredential)
    .buildClient();

RegistryArtifact image = client.getArtifact(repositoryName, digest);

image.updateTagProperties(
    tag,
    new ArtifactTagProperties()
        .setWriteEnabled(false)
        .setDeleteEnabled(false));

Löschen von Images

TokenCredential defaultCredential = new DefaultAzureCredentialBuilder().build();

ContainerRegistryClient client = new ContainerRegistryClientBuilder()
    .endpoint(endpoint)
    .credential(defaultCredential)
    .buildClient();

final int imagesCountToKeep = 3;
for (String repositoryName : client.listRepositoryNames()) {
    final ContainerRepository repository = client.getRepository(repositoryName);

    // Obtain the images ordered from newest to oldest
    PagedIterable<ArtifactManifestProperties> imageManifests =
        repository.listManifestProperties(
            ArtifactManifestOrderBy.LAST_UPDATED_ON_DESCENDING,
            Context.NONE);

    imageManifests.stream().skip(imagesCountToKeep)
        .forEach(imageManifest -> {
            System.out.printf(String.format("Deleting image with digest %s.%n", imageManifest.getDigest()));
            System.out.printf("    This image has the following tags: ");

            for (String tagName : imageManifest.getTags()) {
                System.out.printf("        %s:%s", imageManifest.getRepositoryName(), tagName);
            }

            repository.getArtifact(imageManifest.getDigest()).delete();
        });
}

Erste Schritte

Quellcode | Paket (npm) | API-Referenz | Beispiele

Die derzeitig unterstützten Umgebungen

Ausführlichere Informationen finden Sie in der Supportrichtlinie.

Installieren Sie das Paket @azure/container-registry.

Installieren Sie die Container Registry-Clientbibliothek für JavaScript mit npm:

npm install @azure/container-registry

Authentifizieren des Clients

Die Azure-Identitätsbibliothek bietet Microsoft Entra ID-Unterstützung für die Authentifizierung.

const { ContainerRegistryClient } = require("@azure/container-registry");
const { DefaultAzureCredential } = require("@azure/identity");

const endpoint = process.env.CONTAINER_REGISTRY_ENDPOINT;
// Create a ContainerRegistryClient that will authenticate through Active Directory
const client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential());

Weitere Informationen zur Verwendung von Microsoft Entra ID mit Azure Container Registry finden Sie in der Übersicht über die Authentifizierung.

Beispiele

In jedem Beispiel wird davon ausgegangen, dass die Umgebungsvariable CONTAINER_REGISTRY_ENDPOINT auf eine Zeichenfolge festgelegt ist, die das Präfix https:// und den Namen des Anmeldeservers enthält, z. B. „https://myregistry.azurecr.io".

Asynchrones Auflisten von Repositorys

Durchlaufen Sie die Sammlung von Repositorys in der Registrierung:

const { ContainerRegistryClient } = require("@azure/container-registry");
const { DefaultAzureCredential } = require("@azure/identity");

async function main() {
  // endpoint should be in the form of "https://myregistryname.azurecr.io"
  // where "myregistryname" is the actual name of your registry
  const endpoint = process.env.CONTAINER_REGISTRY_ENDPOINT || "<endpoint>";
  const client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential());

  console.log("Listing repositories");
  const iterator = client.listRepositoryNames();
  for await (const repository of iterator) {
    console.log(`  repository: ${repository}`);
  }
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Asynchrones Festlegen von Artefakteigenschaften

const { ContainerRegistryClient } = require("@azure/container-registry");
const { DefaultAzureCredential } = require("@azure/identity");

async function main() {
  // Get the service endpoint from the environment
  const endpoint = process.env.CONTAINER_REGISTRY_ENDPOINT || "<endpoint>";

  // Create a new ContainerRegistryClient and RegistryArtifact to access image operations
  const client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential());
  const image = client.getArtifact("library/hello-world", "v1");

  // Set permissions on the image's "latest" tag
  await image.updateTagProperties("latest", { canWrite: false, canDelete: false });
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Asynchrones Löschen von Images

const { ContainerRegistryClient } = require("@azure/container-registry");
const { DefaultAzureCredential } = require("@azure/identity");

async function main() {
  // Get the service endpoint from the environment
  const endpoint = process.env.CONTAINER_REGISTRY_ENDPOINT || "<endpoint>";
  // Create a new ContainerRegistryClient
  const client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential());

  // Iterate through repositories
  const repositoryNames = client.listRepositoryNames();
  for await (const repositoryName of repositoryNames) {
    const repository = client.getRepository(repositoryName);
    // Obtain the images ordered from newest to oldest by passing the `orderBy` option
    const imageManifests = repository.listManifestProperties({
      orderBy: "LastUpdatedOnDescending"
    });
    const imagesToKeep = 3;
    let imageCount = 0;
    // Delete images older than the first three.
    for await (const manifest of imageManifests) {
      imageCount++;
      if (imageCount > imagesToKeep) {
        const image = repository.getArtifact(manifest.digest);
        console.log(`Deleting image with digest ${manifest.digest}`);
        console.log(`  Deleting the following tags from the image:`);
        for (const tagName of manifest.tags) {
          console.log(`    ${manifest.repositoryName}:${tagName}`);
          image.deleteTag(tagName);
        }
        await image.delete();
      }
    }
  }
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Erste Schritte

Quellcode | Paket (Pypi) | API-Referenz | Beispiele

Installieren des Pakets

Installieren Sie die Azure Container Registry-Clientbibliothek für Python mit pip:

pip install --pre azure-containerregistry

Authentifizieren des Clients

Die Azure-Identitätsbibliothek bietet Microsoft Entra ID-Unterstützung für die Authentifizierung. DefaultAzureCredential geht davon aus, dass die Umgebungsvariablen AZURE_CLIENT_ID, AZURE_TENANT_ID und AZURE_CLIENT_SECRET festgelegt sind. Weitere Informationen finden Sie unter Umgebungsvariablen für Azure-Identitäten.

# Create a ContainerRegistryClient that will authenticate through Active Directory
from azure.containerregistry import ContainerRegistryClient
from azure.identity import DefaultAzureCredential

account_url = "https://mycontainerregistry.azurecr.io"
client = ContainerRegistryClient(account_url, DefaultAzureCredential())

Beispiele

In jedem Beispiel wird davon ausgegangen, dass die Umgebungsvariable CONTAINERREGISTRY_ENDPOINT auf eine Zeichenfolge festgelegt ist, die das Präfix https:// und den Namen des Anmeldeservers enthält, z. B. „https://myregistry.azurecr.io".

Asynchrones Auflisten von Tags

In diesem Beispiel wird davon ausgegangen, dass die Registrierung über das Repository hello-world verfügt.

import asyncio
from dotenv import find_dotenv, load_dotenv
import os

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


class ListTagsAsync(object):
    def __init__(self):
        load_dotenv(find_dotenv())

    async def list_tags(self):
        # Create a new ContainerRegistryClient      
        audience = "https://management.azure.com"
        account_url = os.environ["CONTAINERREGISTRY_ENDPOINT"]
        credential = DefaultAzureCredential()
        client = ContainerRegistryClient(account_url, credential, audience=audience)

        manifest = await client.get_manifest_properties("library/hello-world", "latest")
        print(manifest.repository_name + ": ")
        for tag in manifest.tags:
            print(tag + "\n")

Asynchrones Festlegen von Artefakteigenschaften

In diesem Beispiel wird davon ausgegangen, dass die Registrierung über das Repository hello-world mit dem Tag v1 verfügt.

import asyncio
from dotenv import find_dotenv, load_dotenv
import os

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


class SetImagePropertiesAsync(object):
    def __init__(self):
        load_dotenv(find_dotenv())

    async def set_image_properties(self):
        # Create a new ContainerRegistryClient
        account_url = os.environ["CONTAINERREGISTRY_ENDPOINT"]
        audience = "https://management.azure.com"
        credential = DefaultAzureCredential()
        client = ContainerRegistryClient(account_url, credential, audience=audience)

        # [START update_manifest_properties]
        # Set permissions on the v1 image's "latest" tag
        await client.update_manifest_properties(
            "library/hello-world",
            "latest",
            can_write=False,
            can_delete=False
        )
        # [END update_manifest_properties]
        # After this update, if someone were to push an update to "myacr.azurecr.io\hello-world:v1", it would fail.
        # It's worth noting that if this image also had another tag, such as "latest", and that tag did not have
        # permissions set to prevent reads or deletes, the image could still be overwritten. For example,
        # if someone were to push an update to "myacr.azurecr.io\hello-world:latest"
        # (which references the same image), it would succeed.

Asynchrones Löschen von Images

import asyncio
from dotenv import find_dotenv, load_dotenv
import os

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


class DeleteImagesAsync(object):
    def __init__(self):
        load_dotenv(find_dotenv())

    async def delete_images(self):
        # [START list_repository_names]   
        audience = "https://management.azure.com"
        account_url = os.environ["CONTAINERREGISTRY_ENDPOINT"]
        credential = DefaultAzureCredential()
        client = ContainerRegistryClient(account_url, credential, audience=audience)

        async with client:
            async for repository in client.list_repository_names():
                print(repository)
                # [END list_repository_names]

                # [START list_manifest_properties]
                # Keep the three most recent images, delete everything else
                manifest_count = 0
                async for manifest in client.list_manifest_properties(repository, order_by=ManifestOrder.LAST_UPDATE_TIME_DESCENDING):
                    manifest_count += 1
                    if manifest_count > 3:
                        await client.delete_manifest(repository, manifest.digest)
                # [END list_manifest_properties]

Erste Schritte

Quellcode | Paket (pkg.go.dev) | REST-API-Verweis

Installieren des Pakets

Installieren Sie die Azure Container Registry-Clientbibliothek für Go mit go get:

go get github.com/Azure/azure-sdk-for-go/sdk/containers/azcontainerregistry

Authentifizieren des Clients

Wenn Sie Ihre Anwendung lokal entwickeln und debuggen, können Sie azidentity.NewDefaultAzureCredential für die Authentifizierung verwenden. Es wird empfohlen, eine verwaltete Identität in einer Produktionsumgebung zu verwenden.

import (
	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/containers/azcontainerregistry"
	"log"
)

func main() {
	cred, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil {
		log.Fatalf("failed to obtain a credential: %v", err)
	}

	client, err := azcontainerregistry.NewClient("https://myregistry.azurecr.io", cred, nil)
	if err != nil {
		log.Fatalf("failed to create client: %v", err)
	}
}

Weitere Informationen zu anderen Authentifizierungsansätzen finden Sie in der azidentity-Dokumentation.

Beispiele

Bei jedem Beispiel wird davon ausgegangen, dass die Endpunkt-URL der Containerregistrierung „https://myregistry.azurecr.io"“ lautet.

Auflisten von Tags

In diesem Beispiel wird davon ausgegangen, dass die Registrierung über das Repository hello-world verfügt.

import (
	"context"
	"fmt"
	"github.com/Azure/azure-sdk-for-go/sdk/containers/azcontainerregistry"
	"log"
)

func Example_listTagsWithAnonymousAccess() {
	client, err := azcontainerregistry.NewClient("https://myregistry.azurecr.io", nil, nil)
	if err != nil {
		log.Fatalf("failed to create client: %v", err)
	}
	ctx := context.Background()
	pager := client.NewListTagsPager("library/hello-world", nil)
	for pager.More() {
		page, err := pager.NextPage(ctx)
		if err != nil {
			log.Fatalf("failed to advance page: %v", err)
		}
		for _, v := range page.Tags {
			fmt.Printf("tag: %s\n", *v.Name)
		}
	}
}

Festlegen von Artefakteigenschaften

In diesem Beispiel wird davon ausgegangen, dass die Registrierung über das Repository hello-world mit dem Tag latest verfügt.

package azcontainerregistry_test

import (
	"context"
	"fmt"
	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/containers/azcontainerregistry"
	"log"
)

func Example_setArtifactProperties() {
	cred, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil {
		log.Fatalf("failed to obtain a credential: %v", err)
	}
	client, err := azcontainerregistry.NewClient("https://myregistry.azurecr.io", cred, nil)
	if err != nil {
		log.Fatalf("failed to create client: %v", err)
	}
	ctx := context.Background()
	res, err := client.UpdateTagProperties(ctx, "library/hello-world", "latest", &azcontainerregistry.ClientUpdateTagPropertiesOptions{
		Value: &azcontainerregistry.TagWriteableProperties{
			CanWrite:  to.Ptr(false),
			CanDelete: to.Ptr(false),
		}})
	if err != nil {
		log.Fatalf("failed to finish the request: %v", err)
	}
	fmt.Printf("repository library/hello-world - tag latest: 'CanWrite' property: %t, 'CanDelete' property: %t\n", *res.Tag.ChangeableAttributes.CanWrite, *res.Tag.ChangeableAttributes.CanDelete)
}

Löschen von Images

package azcontainerregistry_test

import (
	"context"
	"fmt"
	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/containers/azcontainerregistry"
	"log"
)

func Example_deleteImages() {
	cred, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil {
		log.Fatalf("failed to obtain a credential: %v", err)
	}
	client, err := azcontainerregistry.NewClient("https://myregistry.azurecr.io", cred, nil)
	if err != nil {
		log.Fatalf("failed to create client: %v", err)
	}
	ctx := context.Background()
	repositoryPager := client.NewListRepositoriesPager(nil)
	for repositoryPager.More() {
		repositoryPage, err := repositoryPager.NextPage(ctx)
		if err != nil {
			log.Fatalf("failed to advance repository page: %v", err)
		}
		for _, r := range repositoryPage.Repositories.Names {
			manifestPager := client.NewListManifestsPager(*r, &azcontainerregistry.ClientListManifestsOptions{
				OrderBy: to.Ptr(azcontainerregistry.ArtifactManifestOrderByLastUpdatedOnDescending),
			})
			for manifestPager.More() {
				manifestPage, err := manifestPager.NextPage(ctx)
				if err != nil {
					log.Fatalf("failed to advance manifest page: %v", err)
				}
				imagesToKeep := 3
				for i, m := range manifestPage.Manifests.Attributes {
					if i >= imagesToKeep {
						for _, t := range m.Tags {
							fmt.Printf("delete tag from image: %s", *t)
							_, err := client.DeleteTag(ctx, *r, *t, nil)
							if err != nil {
								log.Fatalf("failed to delete tag: %v", err)
							}
						}
						_, err := client.DeleteManifest(ctx, *r, *m.Digest, nil)
						if err != nil {
							log.Fatalf("failed to delete manifest: %v", err)
						}
						fmt.Printf("delete image with digest: %s", *m.Digest)
					}
				}
			}
		}
	}
}

Bereinigen von Ressourcen

Wenn Sie eine Azure-Containerregistrierung bereinigen und entfernen möchten, können Sie die Ressource oder Ressourcengruppe löschen. Wenn Sie die Ressourcengruppe löschen, werden auch alle anderen Ressourcen gelöscht, die ihr zugeordnet sind.

Nächste Schritte

In dieser Schnellstartanleitung haben Sie erfahren, wie Sie die Azure Container Registry-Clientbibliothek verwenden, um Vorgänge für Images und Artefakte in Ihrer Containerregistrierung auszuführen.

  • Weitere Informationen finden Sie in der API-Referenzdokumentation:

  • Informieren Sie sich über die Azure Container Registry-REST-API.