0Pricing
Azure Fundamentals · درس

Azure Container Registry

أنشئ صور Docker وادفعها إلى Azure Container Registry خاص، وأدر الوصول باستخدام تعيينات الأدوار، وأتمت إنشاء الصور باستخدام ACR Tasks.

Azure Container Registry درس مجاني في Azure Fundamentals على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Azure Fundamentals، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.

ما هو Azure Container Registry؟

إن Azure Container Registry (ACR) هو خدمة مُدارة وخاصة لسجل Docker، مبنية على Docker Registry 2.0 مفتوح المصدر. ويخزن صور الحاويات والعناصر المرتبطة بها ويديرها (مثل مخططات Helm وعناصر OCI) والمستخدمة في عمليات نشر Azure. يتكامل ACR بصورة أصلية مع Azure Kubernetes Service (AKS) وAzure Container Instances (ACI) وApp Service، مما يتيح سحب الصور بسلاسة من دون إدارة بيانات الاعتماد.

مستويات خدمة ACR

يوفر ACR ثلاثة مستويات للخدمة. يوفر المستوى Basic تكلفة محسّنة للتعلم والتطوير منخفض معدل النقل، مع مساحة تخزين تبلغ 10 غيغابايت ودعم محدود لخطافات الويب. ويضيف المستوى Standard إمكانات النسخ المتماثل الجغرافي ومعدل نقل أعلى، مما يجعله مناسبًا لمعظم أحمال العمل الإنتاجية. ويتضمن المستوى Premium النسخ المتماثل الجغرافي، وثقة المحتوى، والارتباطات الخاصة، والمفاتيح التي يديرها العميل، وأعلى معدل نقل؛ وهو مطلوب لمتطلبات الأمان المؤسسية.

# Create a Premium ACR in East US
az acr create \
  --name mycontainerregistry \
  --resource-group MyRG \
  --location eastus \
  --sku Premium

# List ACR instances in the subscription
az acr list --query '[].{name:name, sku:sku.name, loginServer:loginServer}' -o table

دفع الصور إلى ACR

لدفع صورة Docker إلى ACR، صادق عميل Docker، ووسم صورتك المحلية باستخدام اسم مضيف خادم تسجيل الدخول إلى ACR، ثم ادفع الصورة. يتبع عنوان URL لخادم تسجيل الدخول إلى ACR النمط <registryname>.azurecr.io. وتستخدم المصادقة بيانات اعتماد Azure AD عبر az acr login (للاستخدام التفاعلي)، أو كلمة مرور مسؤول ACR، أو كيان خدمة لخطوط الأنابيب المؤتمتة.

# Authenticate to ACR
az acr login --name mycontainerregistry

# Tag a local image for ACR
docker tag myapp:latest mycontainerregistry.azurecr.io/myapp:v1.0

# Push the image
docker push mycontainerregistry.azurecr.io/myapp:v1.0

# List images in the registry
az acr repository list --name mycontainerregistry -o table
az acr repository show-tags --name mycontainerregistry --repository myapp

مهام ACR: عمليات الإنشاء المستندة إلى السحابة

تتيح لك مهام ACR إنشاء صور Docker في السحابة من دون برنامج Docker خفي محلي. ترسل المهمة السريعة (az acr build) سياق الإنشاء إلى ACR وتشغّل Dockerfile عن بُعد، فتنتج صورة تُخزّن مباشرةً في السجل. ويمكن للمهام المجدولة أو المستندة إلى المشغلات إعادة إنشاء صورتك تلقائيًا عند تحديث الصورة الأساسية أو عند إيداع التعليمات البرمجية في GitHub، مما يتيح إنشاء خط أنابيب CI كامل للحاويات من دون وكيل إنشاء منفصل.

# Quick task: build and push without local Docker
az acr build \
  --registry mycontainerregistry \
  --image myapp:v1.0 \
  . # build context (current directory with Dockerfile)

# Define a multi-step ACR Task triggered on commit
az acr task create \
  --name buildAndTest \
  --registry mycontainerregistry \
  --context https://github.com/myorg/myrepo.git \
  --file acr-task.yaml \
  --git-access-token <GITHUB_PAT>

التحكم في الوصول باستخدام RBAC

يتكامل ACR مع Azure RBAC لتوفير تحكم دقيق في الوصول. وتشمل أدوار ACR المضمنة AcrPull (سحب الصور فقط — لخدمات النشر)، وAcrPush (السحب والدفع — لخطوط أنابيب CI/CD)، وAcrDelete (إدارة علامات الصور). عيّن دور AcrPull للهوية المُدارة الخاصة بـ AKS أو App Service حتى تتمكن الحاويات من سحب الصور من دون تخزين بيانات الاعتماد في أي مكان.

# Grant AKS cluster's managed identity the AcrPull role
ACR_ID=$(az acr show --name mycontainerregistry --resource-group MyRG --query id -o tsv)
AKS_IDENTITY=$(az aks show --name myAKSCluster --resource-group MyRG \
  --query identityProfile.kubeletidentity.objectId -o tsv)

az role assignment create \
  --assignee $AKS_IDENTITY \
  --role AcrPull \
  --scope $ACR_ID

النسخ المتماثل الجغرافي لعمليات النشر العالمية

يعمل النسخ المتماثل الجغرافي (المستوى Premium) على نسخ سجلك إلى مناطق Azure متعددة. وعندما تسحب AKS أو ACI في إحدى المناطق صورةً، فإنها تقرأها من النسخة المتماثلة الأقرب بدلًا من سجل بعيد، مما يقلل زمن الاستجابة وتكاليف نقل البيانات الصادر. وتتم عملية النسخ بشفافية؛ إذ يعمل عنوان URI للصورة نفسه عالميًا، ويوجّه ACR طلبات السحب تلقائيًا إلى أقرب نسخة متماثلة جغرافيًا.

# Add a geo-replication to West Europe
az acr replication create \
  --name westeurope \
  --registry mycontainerregistry \
  --location westeurope

# List all replicas
az acr replication list \
  --registry mycontainerregistry \
  --query '[].{name:name, location:location, status:provisioningState}' -o table

ثقة المحتوى وتوقيع الصور

تستخدم ثقة المحتوى (المستوى Premium) أداة Docker Notary لضمان إمكانية سحب الصور الموقعة فقط من السجل. وعند تمكين ثقة المحتوى في ACR، تُرفض الصور غير الموقعة. ويُجرى التوقيع في خط أنابيب CI باستخدام مجموعة أدوات Docker Content Trust وزوج مفاتيح موثوق. ويمنع ذلك هجمات سلسلة التوريد التي تُدفع فيها صورة ضارة ثم تُنشر في بيئة الإنتاج.

# Enable content trust on the registry
az acr config content-trust update \
  --registry mycontainerregistry \
  --status enabled

# Sign an image when pushing (DOCKER_CONTENT_TRUST env var)
# export DOCKER_CONTENT_TRUST=1
# docker push mycontainerregistry.azurecr.io/myapp:v1.0
# (Docker prompts for signing key passphrase)

فحص الثغرات باستخدام Defender

مكّن Microsoft Defender for Containers لفحص كل صورة تُدفع إلى ACR تلقائيًا بحثًا عن الثغرات المعروفة في نظام التشغيل وطبقة التطبيق (CVE). وينشئ Defender تقريرًا يسرد الثغرات حسب مستوى الخطورة (حرجة، وعالية، ومتوسطة، ومنخفضة)، ويوفر إرشادات للمعالجة. ويمكنك تكوين سياسات لحظر نشر الصور التي تحتوي على ثغرات حرجة إلى مجموعات AKS من خلال التكامل مع Azure Policy.

# Enable Defender for Containers on the subscription
az security pricing create \
  --name Containers \
  --tier Standard

# View vulnerability assessment results
az security assessment list \
  --query "[?contains(displayName, 'Container')].{name:displayName, status:status.code}" \
  -o table

نقطة النهاية الخاصة لـ ACR

لتحقيق أعلى مستوى من الأمان، عطّل الوصول إلى شبكة ACR العامة واتصل بها حصريًا عبر نقطة نهاية خاصة داخل VNet. ويضمن ذلك عدم نقل صور الحاويات مطلقًا عبر الإنترنت العام؛ إذ تمر جميع عمليات السحب عبر البنية الأساسية الخاصة لـ Azure. كوّن منطقة DNS خاصة (privatelink.azurecr.io) لتحليل اسم مضيف السجل إلى عنوان IP الخاص داخل VNet.

# Create a private endpoint for ACR
az network private-endpoint create \
  --name acr-private-endpoint \
  --resource-group MyRG \
  --vnet-name MyVNet \
  --subnet PrivateEndpointSubnet \
  --private-connection-resource-id \
    $(az acr show --name mycontainerregistry --query id -o tsv) \
  --group-id registry \
  --connection-name acrConnection

# Disable public access
az acr update \
  --name mycontainerregistry \
  --public-network-enabled false

إدارة دورة الحياة: حذف الصور القديمة

من دون إدارة دورة الحياة، تراكم سجلات الحاويات آلافًا من علامات الصور القديمة، مما يستهلك مساحة تخزين باهظة التكلفة. استخدم مهام ACR purge (وهي مهمة مؤقت مضمنة) لحذف البيانات الوصفية والعلامات غير المرتبطة الأقدم من مدة محددة. وشغّل عمليات الحذف وفق جدول باستخدام az acr task create مع الأمر acr purge، مستهدفًا مستودعات محددة مع الاحتفاظ بالحد الأدنى من العلامات الحديثة.

# Create a scheduled purge task: delete tags older than 30d
az acr task create \
  --name scheduledPurge \
  --registry mycontainerregistry \
  --cmd 'acr purge --filter myapp:.*  --ago 30d --keep 5 --untagged' \
  --schedule '0 1 * * *' \
  --context /dev/null

دمج ACR مع AKS

تتمثل أبسط طريقة لربط AKS بـ ACR في استخدام الأمر az aks update --attach-acr، الذي يمنح الهوية المُدارة لـ AKS دور AcrPull تلقائيًا. بعد إتمام الربط، تشير مواصفات Kubernetes الخاصة بالـ pods إلى الصور باستخدام اسم مضيف ACR الكامل فقط — ولا تكون هناك حاجة إلى imagePullSecrets، لأن AKS يستخدم الهوية المُدارة للمصادقة بشفافية على مستوى العقدة.

# Attach ACR to an existing AKS cluster
az aks update \
  --name myAKSCluster \
  --resource-group MyRG \
  --attach-acr mycontainerregistry

# Now pods can use ACR images without imagePullSecrets
# Example pod spec:
# spec:
#   containers:
#   - name: myapp
#     image: mycontainerregistry.azurecr.io/myapp:v1.0

تحقق سريع

اختبر مدى فهمك لمفاهيم Microsoft Azure Fundamentals (AZ-900) الواردة في هذا الدرس.

مراجعة الدرس

تعلمت في هذا الدرس أن Azure Container Registry (ACR) هو سجل خاص مُدار يخزن صور Docker، وأن ACR Tasks تتيح إنشاء الصور في السحابة من دون Docker daemon محلي، وأن RBAC roles (AcrPull وAcrPush) تتحكم في الوصول لخدمات النشر وخطوط أنابيب CI/CD. بعد ذلك سنستكشف Azure Container Instances.

الأسئلة الشائعة

هل درس «Azure Container Registry» مجاني؟

نعم — نص درس «Azure Container Registry» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Azure Fundamentals، انتقل إلى CoddyKit PRO. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.

ماذا ستتعلم في «Azure Container Registry»؟

أنشئ صور Docker وادفعها إلى Azure Container Registry خاص، وأدر الوصول باستخدام تعيينات الأدوار، وأتمت إنشاء الصور باستخدام ACR Tasks. تتمرن على Azure Fundamentals مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Azure Fundamentals؟

لا تُشترط خبرة سابقة. Azure Fundamentals على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «Azure Container Registry»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Azure Fundamentals هذا؟

نعم. كل درس في Azure Fundamentals يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. Azure Container Registry
  2. Azure Container Instances
  3. مفاهيم Kubernetes لـ Azure
  4. نشر أعباء العمل على AKS
← العودة إلى Azure Fundamentals