Azure Container Registry clientbibliotheek voor JavaScript - versie 1.1.0
met Azure Container Registry kunt u containerinstallatiekopieën en artefacten opslaan en beheren in een privéregister voor alle typen containerimplementaties.
Gebruik de clientbibliotheek voor Azure Container Registry om het volgende te doen:
- Installatiekopieën of artefacten in een register weergeven
- Metagegevens verkrijgen voor afbeeldingen en artefacten, opslagplaatsen en tags
- Eigenschappen voor lezen/schrijven/verwijderen voor registeritems instellen
- Installatiekopieën en artefacten, opslagplaatsen en tags verwijderen
Belangrijke koppelingen:
- Broncode
- Pakket (NPM)
- API-referentiedocumentatie
- REST API-documentatie
- Productdocumentatie
- Voorbeelden
Aan de slag
Momenteel ondersteunde omgevingen
Zie ons ondersteuningsbeleid voor meer informatie.
Opmerking: dit pakket kan niet worden gebruikt in de browser vanwege servicebeperkingen. Raadpleeg dit document voor hulp.
Vereisten
Als u een nieuwe Container Registry wilt maken, kunt u azure portal, Azure PowerShell of de Azure CLI gebruiken. Hier volgt een voorbeeld van het gebruik van de Azure CLI:
az acr create --name MyContainerRegistry --resource-group MyResourceGroup --location westus --sku Basic
Installeer het pakket @azure/container-registry
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 verificatie.
const {
ContainerRegistryClient,
KnownContainerRegistryAudience,
} = 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(), {
audience: KnownContainerRegistryAudience.AzureResourceManagerPublicCloud,
});
Houd er rekening mee dat in deze voorbeelden wordt ervan uitgegaan dat u een CONTAINER_REGISTRY_ENDPOINT
omgevingsvariabele hebt ingesteld. Dit is de URL, inclusief de naam van de aanmeldingsserver en het https://
voorvoegsel.
Nationale clouds
Als u wilt verifiëren met een register in een nationale cloud, moet u de volgende toevoegingen aan uw configuratie aanbrengen:
- Stel de
authorityHost
in de referentieopties of via deAZURE_AUTHORITY_HOST
omgevingsvariabele in - Stel de
audience
in inContainerRegistryClientOptions
const {
ContainerRegistryClient,
KnownContainerRegistryAudience,
} = require("@azure/container-registry");
const { DefaultAzureCredential, AzureAuthorityHosts } = require("@azure/identity");
const endpoint = process.env.CONTAINER_REGISTRY_ENDPOINT;
// 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,
}
);
Zie het Verificatieoverzicht van de service voor meer informatie over het gebruik van AAD met Azure Container Registry.
Belangrijkste concepten
In een register worden Docker-installatiekopieën en OCI-artefacten opgeslagen. Een afbeelding of artefact bestaat uit een manifest en lagen. Het manifest van een afbeelding beschrijft de lagen waaruit de afbeelding bestaat en wordt uniek geïdentificeerd door de samenvatting. Een afbeelding kan ook worden 'getagd' om deze een door mensen leesbare alias te geven. Aan een afbeelding of artefact kunnen nul of meer tags zijn gekoppeld en elke tag identificeert de afbeelding uniek. Een verzameling installatiekopieën die dezelfde naam delen, maar verschillende tags hebben, wordt een opslagplaats genoemd.
Zie Container Registry-concepten voor meer informatie.
Voorbeelden
Registerbewerkingen
Opslagplaatsen weergeven
Doorloop de verzameling opslagplaatsen in het register.
const {
ContainerRegistryClient,
KnownContainerRegistryAudience,
} = 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(), {
audience: KnownContainerRegistryAudience.AzureResourceManagerPublicCloud,
});
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);
});
Tags met anonieme toegang weergeven
const {
ContainerRegistryClient,
KnownContainerRegistryAudience,
} = require("@azure/container-registry");
async function main() {
// Get the service endpoint from the environment
const endpoint = process.env.CONTAINER_REGISTRY_ENDPOINT || "<endpoint>";
// 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}`);
}
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Artefacteigenschappen instellen
const {
ContainerRegistryClient,
KnownContainerRegistryAudience,
} = 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(), {
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 });
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Installatiekopieën verwijderen
const {
ContainerRegistryClient,
KnownContainerRegistryAudience,
} = 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(), {
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();
}
}
}
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Blob- en manifestbewerkingen
Afbeeldingen uploaden
const { ContainerRegistryContentClient } = require("@azure/container-registry");
const { DefaultAzureCredential } = require("@azure/identity");
require("dotenv").config();
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 repository = process.env.CONTAINER_REGISTRY_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" });
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Afbeeldingen downloaden
const {
ContainerRegistryContentClient,
KnownManifestMediaType,
} = require("@azure/container-registry");
const { DefaultAzureCredential } = require("@azure/identity");
const dotenv = require("dotenv");
const fs = require("fs");
dotenv.config();
function trimSha(digest) {
const index = digest.indexOf(":");
return index === -1 ? digest : digest.substring(index);
}
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 repository = process.env.CONTAINER_REGISTRY_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;
// Manifests of all media types have a buffer containing their content; this can be written to a file.
fs.writeFileSync("manifest.json", result.content);
const configResult = await client.downloadBlob(manifest.config.digest);
const configFile = fs.createWriteStream("config.json");
configResult.content.pipe(configFile);
// Download and write out the layers
for (const layer of manifest.layers) {
const fileName = trimSha(layer.digest);
const layerStream = fs.createWriteStream(fileName);
const downloadLayerResult = await client.downloadBlob(layer.digest);
downloadLayerResult.content.pipe(layerStream);
}
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Manifest verwijderen
const { ContainerRegistryContentClient } = require("@azure/container-registry");
const { DefaultAzureCredential } = require("@azure/identity");
require("dotenv").config();
async function main() {
// Get the service endpoint from the environment
const endpoint = process.env.CONTAINER_REGISTRY_ENDPOINT || "<endpoint>";
const repository = process.env.CONTAINER_REGISTRY_REPOSITORY || "library/hello-world";
// Create a new ContainerRegistryClient
const client = new ContainerRegistryContentClient(
endpoint,
repository,
new DefaultAzureCredential()
);
const downloadResult = await client.getManifest("latest");
await client.deleteManifest(downloadResult.digest);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Blob verwijderen
const {
ContainerRegistryContentClient,
KnownManifestMediaType,
} = require("@azure/container-registry");
const { DefaultAzureCredential } = require("@azure/identity");
require("dotenv").config();
async function main() {
// Get the service endpoint from the environment
const endpoint = process.env.CONTAINER_REGISTRY_ENDPOINT || "<endpoint>";
const repository = process.env.CONTAINER_REGISTRY_REPOSITORY || "library/hello-world";
// Create a new ContainerRegistryClient
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.layers) {
await client.deleteBlob(layer.digest);
}
}
Problemen oplossen
Raadpleeg de gids voor probleemoplossing voor informatie over het oplossen van problemen.
Volgende stappen
Raadpleeg de map met voorbeelden voor gedetailleerde voorbeelden die laten zien hoe u de clientbibliotheken gebruikt.
Bijdragen
Als u een bijdrage wilt leveren aan deze bibliotheek, leest u de handleiding voor bijdragen voor meer informatie over het bouwen en testen van de code.
Verwante projecten
Azure SDK for JavaScript