Azure Container Registry client library for JavaScript - version 1.1.2

Azure Container Registry, tüm tür konteyner dağıtımları için özel bir kayıt defterinde konteyner imajlarını ve artefaktlarını depolayıp yönetmenize olanak tanır.

Azure Container Registry için client library kullanın:

  • Kayıt defterindeki görüntüleri veya yapıtları listeleme
  • Görseller ve eserler, depolar ve etiketler için meta veri elde edin
  • Kayıt defteri öğelerinde okuma/yazma/silme özelliklerini ayarlama
  • Görselleri ve eserleri, depoları ve etiketleri silin

Önemli bağlantılar:

Başlangıç Yapmak

Şu anda desteklenen ortamlar

Daha fazla detay için destek politikamız adresimize bakınız.

Not: Bu paket hizmet kısıtlamaları nedeniyle tarayıcıda kullanılamaz, lütfen rehberlik için bu belge sayfasına bakınız.

Önkoşullar

Yeni bir Konteyner Kaydı oluşturmak için Azure Portal, Azure PowerShell veya Azure CLI kullanılabilir. İşte Azure CLI'yı kullanan bir örnek:

az acr create --name MyContainerRegistry --resource-group MyResourceGroup --location westus --sku Basic

@azure/container-registry paketini yükleme

ile npmJavaScript için Container Registry istemci kitaplığını yükleyin:

npm install @azure/container-registry

İstemcinin kimliğini doğrulama

Azure Kimlik kütüphanesi kimlik doğrulama için kolay Azure Active Directory desteği sağlar.

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,
});

Bu örnekler, giriş sunucusunun adı ve önekini https:// içeren URL olan bir CONTAINER_REGISTRY_ENDPOINT ortam değişkeni setiniz olduğunu varsayıyor.

Ulusal Bulutlar

Ulusal Bulut'ta bir kayıt kaydıyla kimlik doğrulaması yapmak için yapılandırmanıza aşağıdaki eklemeleri yapmanız gerekir:

  • Credential seçeneklerinde veya ortam değişkeni aracılığıyla AZURE_AUTHORITY_HOST ayarlayın authorityHost
  • audience Girişi ayarlayınContainerRegistryClientOptions
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,
  },
);

AAD'yi Azure Container Registry ile kullanma hakkında daha fazla bilgi için lütfen hizmetin Authentication Overview sayfasına bakınız.

Temel kavramlar

Bir kayıt defteri, Docker görüntülerini ve OCI Eserlerini saklar. Görüntü veya yapıt bir bildirimden ve katmanlardan oluşur. Bir görüntünün manifestesi, görüntüyü oluşturan katmanları tanımlar ve özgün olarak özgün olarak tanımlanır. Bir görüntü ayrıca insan tarafından okunabilir bir takma ad vermek için "etiketlenebilir". Bir görüntü veya artefakt sıfır veya daha fazla etikete sahip olabilir ve her etiket görseli benzersiz şekilde tanımlar. Aynı adı taşıyan ancak farklı etiketlere sahip bir görsel koleksiyonuna depo denir.

Daha fazla bilgi için lütfen Konteyner Kayıt Kavramları'na bakınız.

Örnekler

Kayıt defteri işlemleri

Listeleme depoları

Kayıtta depolar koleksiyonu üzerinde gezinme yapın.

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}`);
}

Anonim erişime sahip etiketleri listele

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}`);
}

Eser özelliklerini ayarla

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 });

Görüntüleri silme

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 ve manifest işlemleri

Görüntüleri yükleme

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" });

Görselleri indir

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);
}

Manifestoyu sil

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);

Blobu silme

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);
}

Sorun giderme

Sorun giderme hakkında bilgi için troubleshooting guide'a bakınız.

Sonraki Adımlar

İstemci kütüphanelerinin nasıl kullanılacağını gösteren ayrıntılı örnekler için lütfen samples dizinine göz atın.

Contributing

Bu kütüphaneye katkıda bulunmak isterseniz, kodun nasıl oluşturulacağı ve test edileceği hakkında daha fazla bilgi edinmek için lütfen katkı rehberi adresini okuyun.