빠른 시작: Azure Container Registry 클라이언트 라이브러리 사용

이 문서를 사용하여 Azure Container Registry 클라이언트 라이브러리를 시작합니다. 다음 단계에 따라 이미지 및 아티팩트에 대한 데이터 평면 작업 예제 코드를 사용해 보세요.

Azure Container Registry 클라이언트 라이브러리를 사용하여 다음을 수행합니다.

  • 레지스트리의 이미지 또는 아티팩트 나열
  • 이미지 및 아티팩트, 리포지토리 및 태그에 대한 메타데이터 가져오기
  • 레지스트리 항목에 대한 읽기/쓰기/삭제 속성 설정
  • 이미지 및 아티팩트, 리포지토리 및 태그 삭제

Azure Container Registry에는 레지스트리 만들기 및 업데이트를 포함한 컨트롤 플레인 작업을 위한 관리 라이브러리도 있습니다.

필수 조건

주요 개념

  • Azure 컨테이너 레지스트리는 컨테이너 이미지OCI 아티팩트를 저장합니다.
  • 이미지 또는 아티팩트는 매니페스트레이어로 구성됩니다.
  • 매니페스트는 이미지 또는 아티팩트를 구성하는 레이어를 설명합니다. 이는 해당 다이제스트를 통해 고유하게 식별됩니다.
  • 이미지 또는 아티팩트에 태그를 지정하여 사람이 읽을 수 있는 별칭을 제공할 수도 있습니다. 이미지 또는 아티팩트에는 0개 이상의 연결된 태그가 있을 수 있으며, 각 태그는 이미지를 고유하게 식별합니다.
  • 동일한 이름을 공유하지만 태그가 다른 이미지 또는 아티팩트의 컬렉션이 리포지토리입니다.

자세한 내용은 레지스트리, 리포지토리 및 아티팩트 정보를 참조하세요.

시작하기

소스 코드 | 패키지(NuGet) | API 참조 | 샘플

Azure Container Registry 인스턴스에 연결할 수 있는 .NET 애플리케이션 코드를 개발하려면 Azure.Containers.ContainerRegistry 라이브러리가 필요합니다.

패키지 설치

NuGet을 사용하여 .NET용 Azure Container Registry 클라이언트 라이브러리를 설치합니다.

dotnet add package Azure.Containers.ContainerRegistry --prerelease

클라이언트 인증

애플리케이션에서 레지스트리에 연결하려면 인증하는 데 사용할 수 있는 ContainerRegistryClient를 만들어야 합니다. Azure ID 라이브러리를 사용하여 해당 Azure 서비스로 Azure SDK 클라이언트를 인증하기 위한 Microsoft Entra ID 지원을 추가합니다.

애플리케이션을 로컬로 개발 및 디버그할 때 사용자 고유의 사용자를 사용하여 레지스트리를 인증할 수 있습니다. 이 작업을 수행하는 한 가지 방법은 Azure CLI를 사용하여 사용자를 인증하고 이 환경에서 애플리케이션을 실행하는 것입니다. 애플리케이션에서 DefaultAzureCredential을 사용하여 인증하도록 구성된 클라이언트를 사용하는 경우 지정된 엔드포인트에서 레지스트리를 사용하여 올바르게 인증합니다.

// 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
    });

로컬 및 배포 환경 모두에서 DefaultAzureCredential을 사용하여 인증하는 방법에 대한 자세한 내용은 Azure ID README를 참조하세요. 퍼블릭이 아닌 Azure 클라우드의 레지스트리에 연결하려면 API 참조를 참조하세요.

Azure Container Registry에서 Microsoft Entra ID를 사용하는 방법에 대한 자세한 내용은 인증 개요를 참조하세요.

예제

각 샘플에서는 https:// 접두사와 로그인 서버 이름(예: “https://myregistry.azurecr.io"”)을 포함한 문자열로 설정된 REGISTRY_ENDPOINT 환경 변수가 있다고 가정합니다.

다음 샘플에서는 작업을 반환하는 비동기 API를 사용합니다. 동기 API도 사용할 수 있습니다.

비동기적으로 리포지토리 나열

레지스트리의 리포지토리 컬렉션을 반복합니다.

// 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);
}

비동기적으로 아티팩트 속성 설정

// 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);
}

비동기적으로 이미지 삭제

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

시작하기

소스 코드 | 패키지(Maven) | API 참조 | 샘플

현재 지원되는 환경

패키지 포함

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

클라이언트 인증

Azure ID 라이브러리는 인증을 위한 Microsoft Entra ID 지원을 제공합니다.

다음 샘플에서는 https:// 접두사와 로그인 서버 이름(예: “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();

Azure Container Registry에서 Microsoft Entra ID를 사용하는 방법에 대한 자세한 내용은 인증 개요를 참조하세요.

예제

각 샘플에서는 https:// 접두사와 로그인 서버 이름(예: “https://myregistry.azurecr.io"”)이 포함된 레지스트리 엔드포인트 문자열이 있다고 가정합니다.

리포지토리 이름 나열

레지스트리의 리포지토리 컬렉션을 반복합니다.

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

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

아티팩트 속성 설정

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

이미지 삭제

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

시작하기

소스 코드 | 패키지(npm) | API 참조 | 샘플

현재 지원되는 환경

자세한 내용은 지원 정책을 참조하세요.

@azure/container-registry 패키지를 설치합니다.

npm을 사용하여 JavaScript용 Container Registry 클라이언트 라이브러리를 설치합니다.

npm install @azure/container-registry

클라이언트 인증

Azure ID 라이브러리는 인증을 위한 Microsoft Entra ID 지원을 제공합니다.

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

Azure Container Registry에서 Microsoft Entra ID를 사용하는 방법에 대한 자세한 내용은 인증 개요를 참조하세요.

예제

각 샘플에서는 https:// 접두사와 로그인 서버 이름(예: “https://myregistry.azurecr.io"”)을 포함한 문자열로 설정된 CONTAINER_REGISTRY_ENDPOINT 환경 변수가 있다고 가정합니다.

비동기적으로 리포지토리 나열

레지스트리의 리포지토리 컬렉션을 반복합니다.

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

비동기적으로 아티팩트 속성 설정

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

비동기적으로 이미지 삭제

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

시작하기

소스 코드 | 패키지(Pypi) | API 참조 | 샘플

패키지 설치

pip를 사용하여 Python용 Azure Container Registry 클라이언트 라이브러리를 설치합니다.

pip install --pre azure-containerregistry

클라이언트 인증

Azure ID 라이브러리는 인증을 위한 Microsoft Entra ID 지원을 제공합니다. DefaultAzureCredential에서는 AZURE_CLIENT_ID, AZURE_TENANT_IDAZURE_CLIENT_SECRET 환경 변수가 설정되어 있다고 가정합니다. 자세한 내용은 Azure ID 환경 변수를 참조하세요.

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

예제

각 샘플에서는 https:// 접두사와 로그인 서버 이름(예: “https://myregistry.azurecr.io"”)을 포함한 문자열로 설정된 CONTAINERREGISTRY_ENDPOINT 환경 변수가 있다고 가정합니다.

비동기적으로 태그 나열

이 샘플에서는 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")

비동기적으로 아티팩트 속성 설정

이 샘플에서는 v1 태그가 지정된 이미지가 있는 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 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.

비동기적으로 이미지 삭제

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]

시작하기

소스 코드 | 패키지(pkg.go.dev) | REST API 참조

패키지 설치

go get을 사용하여 Go용 Azure Container Registry 클라이언트 라이브러리를 설치합니다.

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

클라이언트 인증

로컬에서 애플리케이션을 개발하고 디버깅하는 경우 azidentity.NewDefaultAzureCredential을 사용하여 인증할 수 있습니다. 프로덕션 환경에서는 관리 ID를 사용하는 것이 좋습니다.

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

다른 인증 방식에 대한 자세한 내용은 azidentity 설명서를 참조하세요.

예제

각 샘플에서는 컨테이너 레지스트리 엔드포인트 URL이 "https://myregistry.azurecr.io""이라고 가정합니다.

태그 나열

이 샘플에서는 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)
		}
	}
}

아티팩트 속성 설정

이 샘플에서는 latest 태그가 지정된 이미지가 있는 hello-world 리포지토리가 레지스트리에 있다고 가정합니다.

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

이미지 삭제

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

리소스 정리

Azure 컨테이너 레지스트리를 정리하고 제거하려는 경우 리소스 또는 리소스 그룹을 삭제할 수 있습니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다.

다음 단계

이 빠른 시작에서는 Azure Container Registry 클라이언트 라이브러리를 사용하여 컨테이너 레지스트리의 이미지 및 아티팩트에 대한 작업을 수행하는 방법을 알아보았습니다.

  • 자세한 내용은 다음과 같은 API 참조 설명서를 참조하세요.

  • Azure Container Registry REST API에 대해 알아봅니다.