مكتبة عميل Azure Container Registry ل Python - الإصدار 1.2.0
يسمح لك Azure Container Registry بتخزين صور الحاوية والبيانات الاصطناعية وإدارتها في سجل خاص لجميع أنواع عمليات نشر الحاوية.
استخدام مكتبة العميل سجل حاويات Azure من أجل:
- وضع قائمة بالصور أو الأجزاء الاصطناعية في سجل
- الحصول على بيانات التعريف للصور والبيانات الاصطناعية والمستودعات والعلامات
- تعيين خصائص القراءة/الكتابة/الحذف في عناصر التسجيل
- حذف الصور والبيانات الاصطناعية والمستودعات والعلامات
التعليمات البرمجية | المصدرحزمة (Pypi) | حزمة (Conda) | الوثائق | المرجعية لواجهة برمجة التطبيقاتوثائق | واجهة برمجة تطبيقات RESTوثائق المنتج
إخلاء المسئولية
انتهى دعم حزم Azure SDK Python ل Python 2.7 في 01 يناير 2022. لمزيد من المعلومات والأسئلة، يرجى الرجوع إلى https://github.com/Azure/azure-sdk-for-python/issues/20691Python 3.7 أو أحدث مطلوب لاستخدام هذه الحزمة. لمزيد من التفاصيل، يرجى الرجوع إلى Azure SDK لنهج دعم إصدار Python.
الشروع في العمل
تثبيت الحِزَمة
تثبيت مكتبة عميل تسجيل حاوية Azure لـ.NET مع NuGet:
pip install --pre azure-containerregistry
المتطلبات الأساسية
- Python 3.7 أو أحدث مطلوب لاستخدام هذه الحزمة.
- تحتاج إلى اشتراك Azureوحساب Container Registry لاستخدام هذه الحزمة.
لإنشاء سجل حاوية جديد، يمكنك استخدام مدخل Microsoft Azure أو Azure PowerShell أو Azure CLI. وفيما يلي مثال باستخدام واجهة سطر الأوامر لـ Azure :
az acr create --name MyContainerRegistry --resource-group MyResourceGroup --location westus --sku Basic
مصادقة العميل
توفر مكتبة Azure Identity دعما سهلا ل Azure Active Directory للمصادقة. DefaultAzureCredential
يفترض تعيين متغيرات AZURE_CLIENT_ID
AZURE_TENANT_ID
البيئة و وAZURE_CLIENT_SECRET
، لمزيد من المعلومات، راجع قسم متغيرات بيئة هوية Azure
# Create a ContainerRegistryClient that will authenticate through Active Directory
from azure.containerregistry import ContainerRegistryClient
from azure.identity import DefaultAzureCredential
endpoint = "https://mycontainerregistry.azurecr.io"
audience = "https://management.azure.com"
client = ContainerRegistryClient(endpoint, DefaultAzureCredential(), audience=audience)
المفاهيم الرئيسية
يخزن السجل صور Docker وOCI Artifacts. تتكون الصورة أو الجزء الاصطناعي من بيانوطبقات. يصف بيان الصورة الطبقات التي تشكل الصورة، ويتم تحديدها بشكل فريد من خلال ملخصها. يمكن أيضا "وضع علامة" على الصورة لإعطائها اسما مستعارا يمكن للبشر قراءته. يمكن أن تحتوي الصورة أو البيانات الاصطناعية على صفر أو أكثر من العلامات المرتبطة بها، وتحدد كل علامة الصورة بشكل فريد. يشار إلى مجموعة من الصور التي تشترك في نفس الاسم ولكن لها علامات مختلفة، كمستودع.
لمزيد من المعلومات، يرجى مراجعة مفاهيم سجل الحاوية.
أمثلة
توفر الأقسام التالية العديد من القصاصات البرمجية التي تغطي بعض مهام خدمة ACR الأكثر شيوعا، بما في ذلك:
- عمليات التسجيل:
- Blob وعمليات البيان:
يرجى ملاحظة أن كل عينة تفترض وجود CONTAINERREGISTRY_ENDPOINT
متغير بيئة معين إلى سلسلة تحتوي على https://
البادئة واسم خادم تسجيل الدخول، على سبيل المثال "https://myregistry.azurecr.io". تحصل عينات الوصول المجهولة على قيمة نقطة النهاية من متغيرCONTAINERREGISTRY_ANONREGISTRY_ENDPOINT
البيئة.
سرد المستودعات
التكرار من خلال جمع نظم التخزين في السجل.
with ContainerRegistryClient(self.endpoint, self.credential) as client:
# Iterate through all the repositories
for repository_name in client.list_repository_names():
print(repository_name)
سرد العلامات ذات الوصول المجهول
التكرار من خلال مجموعة العلامات في المستودع مع وصول مجهول.
with ContainerRegistryClient(endpoint) as anon_client:
manifest = anon_client.get_manifest_properties("library/hello-world", "latest")
print(f"Tags of {manifest.repository_name}: ")
# Iterate through all the tags
for tag in manifest.tags:
print(tag)
تعيين خصائص الأجزاء الاصطناعية
تعيين خصائص البيانات الاصطناعية.
with ContainerRegistryClient(self.endpoint, self.credential) as client:
# Set permissions on image "library/hello-world:v1"
client.update_manifest_properties(
"library/hello-world",
"v1",
can_write=False,
can_delete=False
)
حذف الصور
حذف الصور الأقدم من الثلاثة الأولى في المستودع.
with ContainerRegistryClient(self.endpoint, self.credential) as client:
for repository in client.list_repository_names():
# Keep the three most recent images, delete everything else
manifest_count = 0
for manifest in client.list_manifest_properties(
repository, order_by=ArtifactManifestOrder.LAST_UPDATED_ON_DESCENDING
):
manifest_count += 1
if manifest_count > 3:
# Make sure will have the permission to delete the manifest later
client.update_manifest_properties(
repository,
manifest.digest,
can_write=True,
can_delete=True
)
print(f"Deleting {repository}:{manifest.digest}")
client.delete_manifest(repository, manifest.digest)
تحميل الصور
لتحميل صورة كاملة، نحتاج إلى تحميل طبقات وتكوين فرديين. بعد ذلك يمكننا تحميل بيان يصف صورة أو أداة وتعيين علامة لها.
self.repository_name = "sample-oci-image"
layer = BytesIO(b"Sample layer")
config = BytesIO(json.dumps(
{
"sample config": "content",
}).encode())
with ContainerRegistryClient(self.endpoint, self.credential) as client:
# Upload a layer
layer_digest, layer_size = client.upload_blob(self.repository_name, layer)
print(f"Uploaded layer: digest - {layer_digest}, size - {layer_size}")
# Upload a config
config_digest, config_size = client.upload_blob(self.repository_name, config)
print(f"Uploaded config: digest - {config_digest}, size - {config_size}")
# Create an oci image with config and layer info
oci_manifest = {
"config": {
"mediaType": "application/vnd.oci.image.config.v1+json",
"digest": config_digest,
"sizeInBytes": config_size,
},
"schemaVersion": 2,
"layers": [
{
"mediaType": "application/vnd.oci.image.layer.v1.tar",
"digest": layer_digest,
"size": layer_size,
"annotations": {
"org.opencontainers.image.ref.name": "artifact.txt",
},
},
],
}
# Set the image with tag "latest"
manifest_digest = client.set_manifest(self.repository_name, oci_manifest, tag="latest")
print(f"Uploaded manifest: digest - {manifest_digest}")
تنزيل الصور
لتنزيل صورة كاملة، نحتاج إلى تنزيل بيانها ثم تنزيل الطبقات الفردية والتكوين.
with ContainerRegistryClient(self.endpoint, self.credential) as client:
# Get the image
get_manifest_result = client.get_manifest(self.repository_name, "latest")
received_manifest = get_manifest_result.manifest
print(f"Got manifest:\n{received_manifest}")
# Download and write out the layers
for layer in received_manifest["layers"]:
# Remove the "sha256:" prefix from digest
layer_file_name = layer["digest"].split(":")[1]
try:
stream = client.download_blob(self.repository_name, layer["digest"])
with open(layer_file_name, "wb") as layer_file:
for chunk in stream:
layer_file.write(chunk)
except DigestValidationError:
print(f"Downloaded layer digest value did not match. Deleting file {layer_file_name}.")
os.remove(layer_file_name)
print(f"Got layer: {layer_file_name}")
# Download and write out the config
config_file_name = "config.json"
try:
stream = client.download_blob(self.repository_name, received_manifest["config"]["digest"])
with open(config_file_name, "wb") as config_file:
for chunk in stream:
config_file.write(chunk)
except DigestValidationError:
print(f"Downloaded config digest value did not match. Deleting file {config_file_name}.")
os.remove(config_file_name)
print(f"Got config: {config_file_name}")
حذف البيان
with ContainerRegistryClient(self.endpoint, self.credential) as client:
get_manifest_result = client.get_manifest(self.repository_name, "latest")
# Delete the image
client.delete_manifest(self.repository_name, get_manifest_result.digest)
حذف كائن ثنائي كبير الحجم
with ContainerRegistryClient(self.endpoint, self.credential) as client:
get_manifest_result = client.get_manifest(self.repository_name, "latest")
received_manifest = get_manifest_result.manifest
# Delete the layers
for layer in received_manifest["layers"]:
client.delete_blob(self.repository_name, layer["digest"])
# Delete the config
client.delete_blob(self.repository_name, received_manifest["config"]["digest"])
استكشاف الأخطاء وإصلاحها
للحصول على معلومات حول استكشاف الأخطاء وإصلاحها، راجع دليل استكشاف الأخطاء وإصلاحها.
عام
ستقوم مكتبة عميل ACR برفع الاستثناءات المحددة في Azure Core.
تسجيل الدخول
تستخدم هذه المكتبة مكتبة التسجيل القياسية للتسجيل.
يتم تسجيل المعلومات الأساسية حول جلسات HTTP (عناوين URL والعناوين وما إلى ذلك) على INFO
المستوى.
يمكن تمكين تسجيل المستوى التفصيلي DEBUG
، بما في ذلك هيئات الطلب/الاستجابة والعناوين غير النشطة ، على العميل أو لكل عملية باستخدام وسيطة logging_enable
الكلمة الأساسية.
راجع وثائق تسجيل SDK الكاملة مع أمثلة هنا.
التكوين الاختياري
يمكن تمرير وسيطات الكلمات الأساسية الاختيارية على مستوى العميل وكل عملية. تصف الوثائق المرجعية azure-core التكوينات المتوفرة لإعادة المحاولة والتسجيل وبروتوكولات النقل والمزيد.
الخطوات التالية
- انتقل إلى أبعد من ذلك مع azure.containerregistry وعيناتنا.
- شاهد عرضا توضيحيا أو فيديو الغوص العميق.
- اقرأ المزيد حول خدمة Azure Container Registry.
المساهمة
هذا المشروع يرحب بالمساهمات والاقتراحات. معظم المساهمات تتطلب منك الموافقة على اتفاقية ترخيص المساهم (CLA) التي تعلن أن لديك الحق في منحنا حق استخدام مساهمتك. للحصول على التفاصيل، تفضل بزيارة cla.microsoft.com.
اعتمد هذا المشروع مدونة السلوك من المصادر المفتوحة من Microsoft. لمزيد من المعلومات، راجع الأسئلة المتداولة حول قواعد السلوك أو الاتصال opencode@microsoft.com بأي أسئلة أو تعليقات إضافية.
Azure SDK for Python