Snabbstart: Använda Azure Container Registry klientbibliotek
Använd den här artikeln för att komma igång med klientbiblioteket för Azure Container Registry. Följ de här stegen om du vill prova exempelkod för dataplansåtgärder på bilder och artefakter.
Använd klientbiblioteket för att Azure Container Registry:
- Lista avbildningar eller artefakter i ett register
- Hämta metadata för bilder och artefakter, lagringsplatsen och taggar
- Ange läs-/skriv-/borttagningsegenskaper för registerobjekt
- Ta bort avbildningar och artefakter, lagringsplatsen och taggar
Azure Container Registry också ett hanteringsbibliotek för kontrollplansåtgärder, inklusive skapande av register och uppdateringar.
Förutsättningar
Du behöver en Azure-prenumeration och ett Azure-containerregister för att kunna använda det här biblioteket.
Om du vill skapa ett nytt Azure-containerregister kan du använda Azure Portal, Azure PowerShelleller Azure CLI. Här är ett exempel på hur du använder Azure CLI:
az acr create --name MyContainerRegistry --resource-group MyResourceGroup \ --location westus --sku BasicPush-skicka en eller flera containeravbildningar till registret. Anvisningar finns i Push your first image to your Azure container registry using the Docker CLI (Skicka din första avbildning till Azure-containerregistret med hjälp av Docker CLI).
Viktiga begrepp
- Ett Azure-containerregister lagrar containeravbildningar och OCI-artefakter.
- En bild eller artefakt består av ett manifest och lager.
- Ett manifest beskriver de lager som utgör bilden eller artefakten. Den identifieras unikt av dess sammanfattade.
- En bild eller artefakt kan också taggas för att ge den ett läsbart alias. En bild eller artefakt kan ha noll eller flera associerade taggar, och varje tagg identifierar bilden unikt.
- En samling bilder eller artefakter som delar samma namn, men som har olika taggar, är en lagringsplats.
Mer information finns i Om register, lagringsplatsen och artefakter.
Kom igång
Källkod | Paket (NuGet) | API-referens | Prover
Om du vill utveckla .NET-programkod som kan ansluta Azure Container Registry en instans behöver du Azure.Containers.ContainerRegistry biblioteket .
Installera paketet
Installera Azure Container Registry för .NET med NuGet:
dotnet add package Azure.Containers.ContainerRegistry --prerelease
Autentisera klienten
För att programmet ska kunna ansluta till registret måste du skapa en som ContainerRegistryClient kan autentisera med det. Använd Azure Identity-biblioteket för att lägga Azure Active Directory stöd för autentisering av Azure SDK-klienter med motsvarande Azure-tjänster.
När du utvecklar och felsöker ditt program lokalt kan du använda din egen användare för att autentisera med ditt register. Ett sätt att åstadkomma detta är att autentisera användaren med Azure CLI och köra programmet från den här miljön. Om programmet använder en klient som har konstruerats för att autentisera med autentiseras det korrekt med registret DefaultAzureCredential på den angivna slutpunkten.
// 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
});
Se Azure Identity README för fler metoder för autentisering med DefaultAzureCredential , både lokalt och i distributionsmiljöer. Information om hur du ansluter till register i icke-offentliga Azure-moln finns i API-referensen.
Mer information om hur du använder Azure AD med Azure Container Registry finns i autentiseringsöversikten.
Exempel
Varje exempel förutsätter att det finns en miljövariabel inställd på en sträng som innehåller prefixet och namnet på REGISTRY_ENDPOINT https:// inloggningsservern, till exempel " https://myregistry.azurecr.io ".
I följande exempel används asynkrona API:er som returnerar en uppgift. Synkrona API:er är också tillgängliga.
Visa en lista över lagringsplatsen asynkront
Iterera genom insamlingen av lagringsplatsen i registret.
// 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);
}
Ange artefaktegenskaper asynkront
// 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);
}
Ta bort avbildningar asynkront
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();
}
}
Kom igång
Källkod | Paket (Maven) | API-referens | Prover
Miljöer som stöds för närvarande
- Java Development Kit (JDK), version 8 eller senare.
Inkludera paketet
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-containers-containerregistry</artifactId>
<version>1.0.0-beta.3</version>
</dependency>
Autentisera klienten
Azure Identity-biblioteket har Azure Active Directory stöd för autentisering.
Följande exempel förutsätter att du har en registerslutpunktssträng som innehåller prefixet och namnet på https:// inloggningsservern, till exempel " 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();
Mer information om hur du använder Azure AD med Azure Container Registry finns i autentiseringsöversikten.
Exempel
Varje exempel förutsätter att det finns en registerslutpunktssträng som innehåller prefixet och namnet på https:// inloggningsservern, till exempel " https://myregistry.azurecr.io ".
Lista lagringsplatsnamn
Iterera genom insamlingen av lagringsplatsen i registret.
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
ContainerRegistryClient client = new ContainerRegistryClientBuilder()
.endpoint(endpoint)
.credential(credential)
.buildClient();
client.listRepositoryNames().forEach(repository -> System.out.println(repository));
Ange artefaktegenskaper
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));
Ta bort avbildningar
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();
});
}
Kom igång
Källkod | Paket (npm) | API-referens | Prover
Miljöer som stöds för närvarande
Mer information finns i vår supportprincip.
Installera @azure/container-registry-paketet
Installera Container Registry för JavaScript med npm :
npm install @azure/container-registry
Autentisera klienten
Azure Identity-biblioteket har Azure Active Directory stöd för autentisering.
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());
Mer information om hur du använder Azure AD med Azure Container Registry finns i autentiseringsöversikten.
Exempel
Varje exempel förutsätter att det finns en miljövariabel inställd på en sträng som innehåller prefixet och namnet på CONTAINER_REGISTRY_ENDPOINT https:// inloggningsservern, till exempel " https://myregistry.azurecr.io ".
Visa en lista över lagringsplatsen asynkront
Iterera genom insamlingen av lagringsplatsen i registret.
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);
});
Ange artefaktegenskaper asynkront
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);
});
Ta bort avbildningar asynkront
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);
});
Kom igång
Källkod | Paket (Pypi) | API-referens | Prover
Installera paketet
Installera Azure Container Registry klientbibliotek för Python med pip:
pip install --pre azure-containerregistry
Autentisera klienten
Azure Identity-biblioteket har Azure Active Directory stöd för autentisering. DefaultAzureCredentialförutsätter att AZURE_CLIENT_ID AZURE_TENANT_ID miljövariablerna , AZURE_CLIENT_SECRET och anges. Mer information finns i Miljövariabler för 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())
Exempel
Varje exempel förutsätter att det finns en miljövariabel inställd på en sträng som innehåller prefixet och namnet på CONTAINERREGISTRY_ENDPOINT https:// inloggningsservern, till exempel " https://myregistry.azurecr.io ".
Visa en lista över taggar asynkront
Det här exemplet förutsätter att registret har en lagringsplats 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")
Ange artefaktegenskaper asynkront
Det här exemplet förutsätter att registret har en lagringsplats med hello-world avbildningen taggad 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.
Ta bort avbildningar asynkront
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]
Rensa resurser
Om du vill rensa och ta bort ett Azure-containerregister kan du ta bort resursen eller resursgruppen. Om du tar bort resursgruppen tas även alla andra resurser som är associerade med den bort.
Nästa steg
I den här snabbstarten har du lärt dig hur du använder Azure Container Registry-klientbiblioteket för att utföra åtgärder på avbildningar och artefakter i containerregistret.
Mer information finns i API-referensdokumentationen:
Läs mer om Azure Container Registry REST API.