Szybki start: korzystanie z bibliotek klienckich usługi Azure Container Registry
Skorzystaj z tego artykułu, aby rozpocząć pracę z biblioteką klienta usługi Azure Container Registry. Wykonaj następujące kroki, aby wypróbować przykładowy kod operacji płaszczyzny danych na obrazach i artefaktach.
Użyj biblioteki klienta usługi Azure Container Registry, aby:
- Wyświetlanie listy obrazów lub artefaktów w rejestrze
- Uzyskiwanie metadanych obrazów i artefaktów, repozytoriów i tagów
- Ustawianie właściwości odczytu/zapisu/usuwania w elementach rejestru
- Usuwanie obrazów i artefaktów, repozytoriów i tagów
Usługa Azure Container Registry ma również bibliotekę zarządzania dla operacji płaszczyzny sterowania, w tym tworzenie i aktualizacje rejestru.
Wymagania wstępne
Do korzystania z tej biblioteki potrzebna jest subskrypcja platformy Azure i rejestr kontenerów platformy Azure.
Aby utworzyć nowy rejestr kontenerów platformy Azure, możesz użyć witryny Azure Portal, programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure. Oto przykład użycia interfejsu wiersza polecenia platformy Azure:
az acr create --name MyContainerRegistry --resource-group MyResourceGroup \ --location westus --sku Basic
Wypchnij co najmniej jeden obraz kontenera do rejestru. Aby uzyskać instrukcje, zobacz Wypychanie pierwszego obrazu do rejestru kontenerów platformy Azure przy użyciu interfejsu wiersza polecenia platformy Docker.
Najważniejsze pojęcia
- Rejestr kontenerów platformy Azure przechowuje obrazy kontenerów i artefakty OCI.
- Obraz lub artefakt składa się z manifestu i warstw.
- Manifest opisuje warstwy tworzące obraz lub artefakt. Jest on jednoznacznie identyfikowany przez jego skrót.
- Obraz lub artefakt można również oznaczyć , aby nadać mu alias czytelny dla człowieka. Skojarzony z nim obraz lub artefakt może zawierać zero lub więcej tagów, a każdy tag jednoznacznie identyfikuje obraz.
- Kolekcja obrazów lub artefaktów, które mają taką samą nazwę, ale mają różne tagi, jest repozytorium.
Aby uzyskać więcej informacji, zobacz Informacje o rejestrach, repozytoriach i artefaktach.
Rozpocznij
Przykłady referencyjne | dotyczące pakietu kodu źródłowego | (NuGet)API |
Aby opracować kod aplikacji platformy .NET, który może łączyć się z wystąpieniem usługi Azure Container Registry, potrzebna Azure.Containers.ContainerRegistry
będzie biblioteka.
Instalowanie pakietu
Zainstaluj bibliotekę klienta usługi Azure Container Registry dla platformy .NET za pomocą narzędzia NuGet:
dotnet add package Azure.Containers.ContainerRegistry --prerelease
Uwierzytelnianie użytkownika
Aby aplikacja mogła nawiązać połączenie z rejestrem, należy utworzyć element, który ContainerRegistryClient
może się z nim uwierzytelnić. Użyj biblioteki tożsamości platformy Azure, aby dodać obsługę identyfikatora Entra firmy Microsoft na potrzeby uwierzytelniania klientów zestawu Azure SDK przy użyciu odpowiednich usług platformy Azure.
Podczas tworzenia i debugowania aplikacji lokalnie możesz użyć własnego użytkownika do uwierzytelniania w rejestrze. Jednym ze sposobów osiągnięcia tego celu jest uwierzytelnianie użytkownika za pomocą interfejsu wiersza polecenia platformy Azure i uruchamianie aplikacji z tego środowiska. Jeśli aplikacja używa klienta, który został skonstruowany do uwierzytelniania DefaultAzureCredential
w usłudze , będzie poprawnie uwierzytelniać się w rejestrze w określonym punkcie końcowym.
// 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
});
Zobacz plik README tożsamości platformy Azure, aby uzyskać więcej metod uwierzytelniania za pomocą DefaultAzureCredential
polecenia , zarówno lokalnie, jak i w środowiskach wdrażania. Aby nawiązać połączenie z rejestrami w chmurach platformy Azure innych niż publiczne, zobacz dokumentację interfejsu API.
Aby uzyskać więcej informacji na temat korzystania z identyfikatora Entra firmy Microsoft z usługą Azure Container Registry, zobacz omówienie uwierzytelniania.
Przykłady
W każdym przykładzie przyjęto założenie, REGISTRY_ENDPOINT
że istnieje zmienna środowiskowa ustawiona na ciąg zawierający https://
prefiks i nazwę serwera logowania, na przykład "https://myregistry.azurecr.io"".
W poniższych przykładach użyto asynchronicznych interfejsów API, które zwracają zadanie. Dostępne są również synchroniczne interfejsy API.
Asynchroniczne wyświetlanie listy repozytoriów
Iterowanie po kolekcji repozytoriów w rejestrze.
// 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);
}
Asynchroniczne ustawianie właściwości artefaktu
// 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);
}
Asynchroniczne usuwanie obrazów
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();
}
}
Rozpocznij
Przykłady dokumentacji | interfejsu API pakietu kodu | źródłowego (Maven)API |
Obecnie obsługiwane środowiska
- Zestaw Java Development Kit (JDK) w wersji 8 lub nowszej.
Uwzględnij pakiet
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-containers-containerregistry</artifactId>
<version>1.0.0-beta.3</version>
</dependency>
Uwierzytelnianie użytkownika
Biblioteka tożsamości platformy Azure zapewnia obsługę identyfikatora Entra firmy Microsoft na potrzeby uwierzytelniania.
W poniższych przykładach przyjęto założenie, że masz ciąg punktu końcowego rejestru zawierający https://
prefiks i nazwę serwera logowania, na przykład "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();
Aby uzyskać więcej informacji na temat korzystania z identyfikatora Entra firmy Microsoft z usługą Azure Container Registry, zobacz omówienie uwierzytelniania.
Przykłady
W każdym przykładzie przyjęto założenie, że istnieje ciąg punktu końcowego rejestru zawierający https://
prefiks i nazwę serwera logowania, na przykład "https://myregistry.azurecr.io"".
Wyświetlanie listy nazw repozytoriów
Iterowanie po kolekcji repozytoriów w rejestrze.
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
ContainerRegistryClient client = new ContainerRegistryClientBuilder()
.endpoint(endpoint)
.credential(credential)
.buildClient();
client.listRepositoryNames().forEach(repository -> System.out.println(repository));
Ustawianie właściwości artefaktu
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));
Usuwanie obrazów
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();
});
}
Rozpocznij
Przykłady dokumentacji | interfejsu API pakietu kodu | źródłowego (npm)API |
Obecnie obsługiwane środowiska
Aby uzyskać więcej informacji, zobacz nasze zasady pomocy technicznej.
Instalowanie pakietu @azure/container-registry
Zainstaluj bibliotekę klienta usługi Container Registry dla języka JavaScript za pomocą polecenia npm
:
npm install @azure/container-registry
Uwierzytelnianie użytkownika
Biblioteka tożsamości platformy Azure zapewnia obsługę identyfikatora Entra firmy Microsoft na potrzeby uwierzytelniania.
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());
Aby uzyskać więcej informacji na temat korzystania z identyfikatora Entra firmy Microsoft z usługą Azure Container Registry, zobacz omówienie uwierzytelniania.
Przykłady
W każdym przykładzie przyjęto założenie, CONTAINER_REGISTRY_ENDPOINT
że istnieje zmienna środowiskowa ustawiona na ciąg zawierający https://
prefiks i nazwę serwera logowania, na przykład "https://myregistry.azurecr.io"".
Asynchroniczne wyświetlanie listy repozytoriów
Iterowanie po kolekcji repozytoriów w rejestrze.
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);
});
Asynchroniczne ustawianie właściwości artefaktu
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);
});
Asynchroniczne usuwanie obrazów
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);
});
Rozpocznij
Przykłady referencyjne | dla pakietu kodu źródłowego | (Pypi)API |
Instalowanie pakietu
Zainstaluj bibliotekę klienta usługi Azure Container Registry dla języka Python za pomocą narzędzia:
pip install --pre azure-containerregistry
Uwierzytelnianie użytkownika
Biblioteka tożsamości platformy Azure zapewnia obsługę identyfikatora Entra firmy Microsoft na potrzeby uwierzytelniania. Założono DefaultAzureCredential
, że AZURE_CLIENT_ID
zmienne środowiskowe , AZURE_TENANT_ID
i AZURE_CLIENT_SECRET
są ustawione. Aby uzyskać więcej informacji, zobacz Zmienne środowiskowe usługi Azure Identity.
# 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())
Przykłady
W każdym przykładzie przyjęto założenie, CONTAINERREGISTRY_ENDPOINT
że istnieje zmienna środowiskowa ustawiona na ciąg zawierający https://
prefiks i nazwę serwera logowania, na przykład "https://myregistry.azurecr.io"".
Asynchronicznie wyświetlanie listy tagów
W tym przykładzie założono, że rejestr ma repozytorium hello-world
.
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")
Asynchroniczne ustawianie właściwości artefaktu
W tym przykładzie założono, że rejestr zawiera repozytorium hello-world
z oznaczonym obrazem v1
.
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.
Asynchroniczne usuwanie obrazów
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]
Rozpocznij
Dokumentacja interfejsu API REST pakietu kodu źródłowego | (pkg.go.dev) |
Instalowanie pakietu
Zainstaluj bibliotekę klienta usługi Azure Container Registry dla języka Go za pomocą polecenia go get
:
go get github.com/Azure/azure-sdk-for-go/sdk/containers/azcontainerregistry
Uwierzytelnianie użytkownika
Podczas tworzenia i debugowania aplikacji lokalnie możesz użyć funkcji azidentity. NewDefaultAzureCredential do uwierzytelniania. Zalecamy używanie tożsamości zarządzanej w środowisku produkcyjnym.
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)
}
}
Aby uzyskać więcej informacji na temat innych metod uwierzytelniania, zobacz dokumentację azidentity.
Przykłady
W każdym przykładzie przyjęto założenie, że adres URL punktu końcowego rejestru kontenerów to "https://myregistry.azurecr.io".
Tworzenie listy tagów
W tym przykładzie założono, że rejestr ma repozytorium hello-world
.
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)
}
}
}
Ustawianie właściwości artefaktu
W tym przykładzie założono, że rejestr zawiera repozytorium hello-world
z oznaczonym obrazem latest
.
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)
}
Usuwanie obrazów
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)
}
}
}
}
}
}
Czyszczenie zasobów
Jeśli chcesz wyczyścić i usunąć rejestr kontenerów platformy Azure, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów.
Następne kroki
W tym przewodniku Szybki start przedstawiono używanie biblioteki klienta usługi Azure Container Registry do wykonywania operacji na obrazach i artefaktach w rejestrze kontenerów.
Aby uzyskać więcej informacji, zobacz dokumentację referencyjną interfejsu API:
Dowiedz się więcej o interfejsie API REST usługi Azure Container Registry.