Azure Container Registry client library for JavaScript - version 1.1.2

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 authorityHost képesedési opciókban vagy a környezeti AZURE_AUTHORITY_HOST vá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.