Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure Container Registry stelt je in staat om containerimages en artefacten op te slaan en te beheren in een privé register voor alle soorten containerimplementaties.
Gebruik de clientbibliotheek voor Azure Container Registry om:
- Afbeeldingen of artefacten in een register weergeven
- Verkrijg metadata voor afbeeldingen en artefacten, repositories en tags
- Eigenschappen lezen/schrijven/verwijderen instellen voor registeritems
- Verwijder afbeeldingen en artefacten, repositories en tags
Sleutelkoppelingen:
Aan de slag
Momenteel ondersteunde omgevingen
Zie ons supportbeleid voor meer details.
Opmerking: Dit pakket kan niet in de browser worden gebruikt vanwege servicebeperkingen, raadpleeg dit document voor richtlijnen.
Vereiste voorwaarden
Om een nieuw Container Registry aan te maken, kun je de Azure Portal, Azure PowerShell of de Azure CLI gebruiken. Hier is een voorbeeld met de Azure CLI:
az acr create --name MyContainerRegistry --resource-group MyResourceGroup --location westus --sku Basic
Het @azure/container-registry-pakket installeren
Installeer de Container Registry-clientbibliotheek voor JavaScript met npm:
npm install @azure/container-registry
De client verifiëren
De Azure Identity-bibliotheek biedt eenvoudige Azure Active Directory ondersteuning voor authenticatie.
import { ContainerRegistryClient, KnownContainerRegistryAudience } from "@azure/container-registry";
import { DefaultAzureCredential } from "@azure/identity";
const endpoint = "https://myregistryname.azurecr.io";
// Create a ContainerRegistryClient that will authenticate through Active Directory
const client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential(), {
audience: KnownContainerRegistryAudience.AzureResourceManagerPublicCloud,
});
Let op dat deze voorbeelden ervan uitgaan dat je een omgevingsvariabele CONTAINER_REGISTRY_ENDPOINT hebt ingesteld, namelijk de URL inclusief de naam van de inlogserver en het https:// voorvoegsel.
Nationale Wolken
Om te authenticeren met een register in een National Cloud, moet u de volgende toevoegingen aan uw configuratie doen:
- Stel de
authorityHostin in de credentialopties of via de omgevingsvariabeleAZURE_AUTHORITY_HOST - Stel de
audienceinContainerRegistryClientOptions
import { ContainerRegistryClient, KnownContainerRegistryAudience } from "@azure/container-registry";
import { DefaultAzureCredential, AzureAuthorityHosts } from "@azure/identity";
const endpoint = "https://myregistryname.azurecr.cn";
// Create a ContainerRegistryClient that will authenticate through AAD in the China national cloud
const client = new ContainerRegistryClient(
endpoint,
new DefaultAzureCredential({ authorityHost: AzureAuthorityHosts.AzureChina }),
{
audience: KnownContainerRegistryAudience.AzureResourceManagerChina,
},
);
Voor meer informatie over het gebruik van AAD met Azure Container Registry, zie de Authentication Overview van de dienst.
Belangrijke concepten
Een register slaat Docker-afbeeldingen en OCI-artefacten op. Een afbeelding of artefact bestaat uit een manifest en lagen. Het manifest van een afbeelding beschrijft de lagen waaruit het beeld bestaat en wordt uniek geïdentificeerd door de samenvatting ervan. Een afbeelding kan ook worden "getagd" om een menselijk leesbaar alias te geven. Een afbeelding of artefact kan nul of meer tags hebben die eraan gekoppeld zijn, en elke tag identificeert de afbeelding uniek. Een verzameling afbeeldingen met dezelfde naam maar verschillende tags wordt een repository genoemd.
Voor meer informatie zie Container Registry Concepts.
Examples
Registerbewerkingen
Lijsten van archieven
Doorloop de verzameling opslagplaatsen in het register.
import { ContainerRegistryClient, KnownContainerRegistryAudience } from "@azure/container-registry";
import { DefaultAzureCredential } from "@azure/identity";
const endpoint = "https://myregistryname.azurecr.io";
const client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential(), {
audience: KnownContainerRegistryAudience.AzureResourceManagerPublicCloud,
});
const iterator = client.listRepositoryNames();
for await (const repository of iterator) {
console.log(` repository: ${repository}`);
}
Lijst tags met anonieme toegang
import { ContainerRegistryClient, KnownContainerRegistryAudience } from "@azure/container-registry";
const endpoint = "https://myregistryname.azurecr.io";
// Create a new ContainerRegistryClient for anonymous access
const client = new ContainerRegistryClient(endpoint, {
audience: KnownContainerRegistryAudience.AzureResourceManagerPublicCloud,
});
// Obtain a RegistryArtifact object to get access to image operations
const image = client.getArtifact("library/hello-world", "latest");
// List the set of tags on the hello_world image tagged as "latest"
const tagIterator = image.listTagProperties();
// Iterate through the image's tags, listing the tagged alias for the image
console.log(`${image.fullyQualifiedReference} has the following aliases:`);
for await (const tag of tagIterator) {
console.log(` ${tag.registryLoginServer}/${tag.repositoryName}:${tag.name}`);
}
Artefacteigenschappen instellen
import { ContainerRegistryClient, KnownContainerRegistryAudience } from "@azure/container-registry";
import { DefaultAzureCredential } from "@azure/identity";
const endpoint = "https://myregistryname.azurecr.io";
const client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential(), {
audience: KnownContainerRegistryAudience.AzureResourceManagerPublicCloud,
});
const image = client.getArtifact("library/hello-world", "v1");
// Set permissions on the image's "latest" tag
await image.updateTagProperties("latest", { canWrite: false, canDelete: false });
Afbeeldingen verwijderen
import { ContainerRegistryClient, KnownContainerRegistryAudience } from "@azure/container-registry";
import { DefaultAzureCredential } from "@azure/identity";
const endpoint = "https://myregistryname.azurecr.io";
const client = new ContainerRegistryClient(endpoint, new DefaultAzureCredential(), {
audience: KnownContainerRegistryAudience.AzureResourceManagerPublicCloud,
});
// 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 `order` option
const imageManifests = repository.listManifestProperties({
order: "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();
}
}
}
Blob- en manifestoperaties
Afbeeldingen uploaden
import { ContainerRegistryContentClient } from "@azure/container-registry";
import { DefaultAzureCredential } from "@azure/identity";
const endpoint = "https://myregistryname.azurecr.io";
const repository = "library/hello-world";
const client = new ContainerRegistryContentClient(
endpoint,
repository,
new DefaultAzureCredential(),
);
const config = Buffer.from("Sample config");
const { digest: configDigest, sizeInBytes: configSize } = await client.uploadBlob(config);
const layer = Buffer.from("Sample layer");
const { digest: layerDigest, sizeInBytes: layerSize } = await client.uploadBlob(layer);
const manifest = {
schemaVersion: 2,
config: {
digest: configDigest,
size: configSize,
mediaType: "application/vnd.oci.image.config.v1+json",
},
layers: [
{
digest: layerDigest,
size: layerSize,
mediaType: "application/vnd.oci.image.layer.v1.tar",
},
],
};
await client.setManifest(manifest, { tag: "demo" });
Download afbeeldingen
import {
ContainerRegistryContentClient,
KnownManifestMediaType,
OciImageManifest,
} from "@azure/container-registry";
import { DefaultAzureCredential } from "@azure/identity";
import { writeFileSync, createWriteStream } from "node:fs";
const endpoint = "https://myregistryname.azurecr.io";
const repository = "library/hello-world";
const client = new ContainerRegistryContentClient(
endpoint,
repository,
new DefaultAzureCredential(),
);
// Download the manifest to obtain the list of files in the image based on the tag
const result = await client.getManifest("demo");
if (result.mediaType !== KnownManifestMediaType.OciImageManifest) {
throw new Error("Expected an OCI image manifest");
}
const manifest = result.manifest as OciImageManifest;
// Manifests of all media types have a buffer containing their content; this can be written to a file.
writeFileSync("manifest.json", result.content);
const configResult = await client.downloadBlob(manifest.config.digest);
const configFile = createWriteStream("config.json");
configResult.content.pipe(configFile);
const trimSha = (digest: string): string => {
const index = digest.indexOf(":");
return index === -1 ? digest : digest.substring(index);
};
// Download and write out the layers
for (const layer of manifest.layers) {
const fileName = trimSha(layer.digest);
const layerStream = createWriteStream(fileName);
const downloadLayerResult = await client.downloadBlob(layer.digest);
downloadLayerResult.content.pipe(layerStream);
}
Manifest verwijderen
import { ContainerRegistryContentClient } from "@azure/container-registry";
import { DefaultAzureCredential } from "@azure/identity";
const endpoint = "https://myregistryname.azurecr.io";
const repository = "library/hello-world";
const client = new ContainerRegistryContentClient(
endpoint,
repository,
new DefaultAzureCredential(),
);
const downloadResult = await client.getManifest("latest");
await client.deleteManifest(downloadResult.digest);
Blob verwijderen
import {
ContainerRegistryContentClient,
KnownManifestMediaType,
OciImageManifest,
} from "@azure/container-registry";
import { DefaultAzureCredential } from "@azure/identity";
const endpoint = "https://myregistryname.azurecr.io";
const repository = "library/hello-world";
const client = new ContainerRegistryContentClient(
endpoint,
repository,
new DefaultAzureCredential(),
);
const downloadResult = await client.getManifest("latest");
if (downloadResult.mediaType !== KnownManifestMediaType.OciImageManifest) {
throw new Error("Expected an OCI image manifest");
}
for (const layer of (downloadResult.manifest as OciImageManifest).layers) {
await client.deleteBlob(layer.digest);
}
Troubleshooting
Voor informatie over probleemoplossing, raadpleeg de handleiding probleemoplossing.
Volgende stappen
Bekijk alsjeblieft de directory samples voor gedetailleerde voorbeelden die laten zien hoe je de clientbibliotheken gebruikt.
Contributing
Als je wilt bijdragen aan deze bibliotheek, lees dan de bijdragende gids om meer te weten te komen over hoe je de code bouwt en test.
Verwante projecten
Azure SDK for JavaScript