Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az Azure Container Registry lehetővé teszi, hogy konténerképeket és artefaktumokat tárolj és kezelj egy privát adatbázisban minden típusú konténer telepítéshez.
Használd az Azure Container Registry client library-jét:
- Rendszerképek vagy összetevők listázása a beállításjegyzékben
- Képek és tárgyak, tárolók és címkék metaadatának beszerzése
- Beállításjegyzék-elemek olvasási/írási/törlési tulajdonságainak beállítása
- Töröld a képeket, tárgyakat, tárolókat és címkéket
Főbb hivatkozások:
Kezdő lépések
Jelenleg támogatott környezetek
További részletekért lásd a támogató szabályzatunkat
Megjegyzés: Ez a csomag a böngészőben nem használható szolgáltatási korlátok miatt, kérjük, lássa meg a ezt a dokumentumot útmutatásért.
Előfeltételek
Új Konténer Regiszter létrehozásához használhatod a Azure Portal, Azure PowerShell vagy Azure CLI fájlokat. Íme egy példa az Azure CLI használatára:
az acr create --name MyContainerRegistry --resource-group MyResourceGroup --location westus --sku Basic
Telepítse a(z) @azure/container-registry csomagot
Telepítse a Container Registry JavaScript-ügyfélkódtárát a következővel npm:
npm install @azure/container-registry
Az ügyfél hitelesítése
A Azure Identity könyvtár egyszerű Azure Active Directory támogatást nyújt a hitelesítéshez.
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,
});
Fontos megjegyezni, hogy ezek a minták feltételezik, hogy van egy CONTAINER_REGISTRY_ENDPOINT környezeti változó halmaz, ami az URL, beleértve a bejelentkezési szerver nevét és az https:// előtagot.
Nemzeti felhők
Ahhoz, hogy hitelesítést végezzen egy National Cloud adatbázissal, a következő módosításokat kell végrehajtania a konfigurációban:
- Állítsd be a
authorityHostképesedési opciókban vagy a környezetiAZURE_AUTHORITY_HOSTváltozóval - Állítsa be a
audienceContainerRegistryClientOptions
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,
},
);
További információért az AAD Azure Container Registry-vel való használatáról kérjük, tekintse meg a szolgáltatás Authentication Overview oldalát.
Fő fogalmak
Egy regiszter tárolja a Docker képeket és az OCI Erektéteket. Egy kép vagy összetevő jegyzékből és rétegekből áll. Egy kép megjelenése leírja azokat a rétegeket, amelyek a képet alkotják, és egyedileg az emésztője alapján azonosítható. Egy képet "címkézhetnek" is, hogy emberi felismerhető álnévet kapjanak. Egy képhez vagy tárgyhoz nulla vagy több címkével tartozhat, és minden címke egyedileg azonosítja a képet. Egy olyan képgyűjteményt, amely ugyanazt a nevet viseli, de eltérő címkékkel rendelkezik, repositóriumnak nevezik.
További információért kérjük, lásd: Tartály Nyilvántartási Koncepciók.
Examples
Beállításjegyzék-műveletek
Listázási repozióriumok
Iterálás a beállításjegyzékben található adattárak gyűjteményén keresztül.
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}`);
}
Névtelen hozzáféréssel rendelkező lista címkék
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}`);
}
Összetevő tulajdonságainak beállítása
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 });
Rendszerképek törlése
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 és manifest műveletek
Képek feltöltése
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" });
Képek letöltése
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);
}
Töröld a manifest
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 törlése
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);
}
Hibaelhárítás
A hibakeresésről tájékozódásért lásd a hibakeresési útmutatót.
Következő lépések
Kérjük, nézze meg a samples könyvtárat részletes példákért, amelyek bemutatják, hogyan lehet használni az ügyfélkönyvtárakat.
Közreműködés
Ha szeretnél hozzájárulni ehhez a könyvtárhoz, kérjük, olvasd el a hozzájárulás útmutatót hogy többet megtudj arról, hogyan lehet elkészíteni és tesztelni a kódot.
Kapcsolódó projektek
Azure SDK for JavaScript