إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يتيح لك Azure Container Registry تخزين وإدارة صور الحاويات والقطع الأثرية في سجل خاص لجميع أنواع عمليات نشر الحاويات.
استخدم مكتبة العميل ل Azure Container Registry ل:
- سرد الصور أو البيانات الاصطناعية في سجل
- الحصول على البيانات الوصفية للصور والقطع الأثرية، والمستودعات والوسوم
- تعيين خصائص القراءة/الكتابة/الحذف على عناصر التسجيل
- حذف الصور والقطع الأثرية، المستودعات والوسوم
الارتباطات الرئيسية:
- الشفرة المصدرية
- حزمة (NPM)
- <وثائق مرجعية c0>API
- وثائق REST API
- وثائق
Product - Samples
الشروع
البيئات المدعومة حاليا
- <نسخ c0>LTS من Node.js
راجع <سياسة الدعم> لمزيد من التفاصيل.
ملاحظة: لا يمكن استخدام هذه الحزمة في المتصفح بسبب قيود الخدمة، يرجى الرجوع إلى هذا المستند للحصول على إرشادات.
المتطلبات المسبقه
- اشتراك Azure
- حساب سجل الحاويات
لإنشاء سجل حاويات جديد، يمكنك استخدام Azure Portal، Azure PowerShell، أو Azure CLI. إليك مثالا باستخدام Azure CLI:
az acr create --name MyContainerRegistry --resource-group MyResourceGroup --location westus --sku Basic
قم بتثبيت حزمة @azure/container-registry
قم بتثبيت مكتبة عميل Container Registry ل JavaScript باستخدام npm:
npm install @azure/container-registry
مصادقة العميل
توفر مكتبة الهوية Azure دعما سهلا Azure Active Directory للمصادقة.
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,
});
لاحظ أن هذه العينات تفترض أن لديك CONTAINER_REGISTRY_ENDPOINT مجموعة متغيرات بيئة، وهي الرابط الذي يشمل اسم خادم تسجيل الدخول والبادئة https:// .
السحب الوطنية
للتحقق من سجل في السحابة الوطنية، ستحتاج إلى إجراء الإضافات التالية على إعدادك:
- قم بتعيين في
authorityHostخيارات الاعتماد أو عبرAZURE_AUTHORITY_HOSTمتغير البيئة - اضبط في
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,
},
);
لمزيد من المعلومات حول استخدام AAD مع Azure Container Registry، يرجى مراجعة نظرة عامة للمصادقة الخاصة بالخدمة.
المفاهيم الأساسية
يخزن سجل الصور وصور Docker وقطع OCI الأثرية. تتكون الصورة أو القطعة الأثرية من بيانوطبقات. يصف بيان الصورة الطبقات التي تشكل الصورة، ويتم تحديده بشكل فريد من خلال ملخصها. يمكن أيضا "وسم" الصورة لمنحها اسما مستعارا يمكن للبشر. يمكن أن يكون للصورة أو القطعة الأثرية أي وسوم أو أكثر مرتبطة بها، وكل وسم يحدد الصورة بشكل فريد. مجموعة من الصور التي تحمل نفس الاسم ولكن تحمل علامات مختلفة، يشار إليها بالمستودع.
لمزيد من المعلومات، يرجى مراجعة مفاهيم سجل الحاويات.
امثله
عمليات التسجيل
قائمة المستودعات
التكرار من خلال جمع المستودعات في السجل.
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}`);
}
قائمة العلامات التي لديها وصول مجهول
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}`);
}
تعيين خصائص القطع الملموسة
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 });
حذف الصور
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();
}
}
}
عمليات الكتلة والبيان
تحميل صور
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" });
تحميل الصور
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);
}
حذف البيان
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);
حذف الكتلة
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);
}
استكشاف الأخطاء وإصلاحها
للحصول على معلومات حول حل المشكلة، راجع ><دليل استكشاف الأخطاء.
الخطوات التالية
يرجى الاطلاع على دليل samples للحصول على أمثلة مفصلة توضح كيفية استخدام مكتبات العملاء.
Contributing
إذا كنت ترغب في المساهمة في هذه المكتبة، يرجى قراءة guidesating لتتعرف أكثر على كيفية بناء واختبار الكود.
المشاريع ذات الصلة
Azure SDK for JavaScript