البرنامج التعليمي: إنشاء وتوزيع صور الحاويات في السحابة مع مهام Azure Container Registry Tasks

⁩ACR Tasks⁧⁩ عبارة عن مجموعة من الميزات داخل Azure Container Registry حيث توفر البنيات المُبسطة والفعّالة لصورة حاوية Docker في Azure. في هذه المقالة، ستتعلم كيفية استخدام ميزة ⁧⁩المهمة السريعة⁧⁩ من مهام ACR.

تُعد دورة تطوير «الحلقة الداخلية» هي العملية التكرارية لكتابة التعليمات البرمجية، والإنشاء، واختبار التطبيق الخاص بك قبل الالتزام بالتحكم في المصدر. تعمل المهمة السريعة على بسط الحلقة الداخلية الخاصة بك إلى السحابة، ما يمكّنك من التحقق من نجاح الإنشاء والدفع التلقائي لصور البنيات بنجاح إلى سجل الحاويات الخاصة بك. يتم إنشاء صورك في السحابة، قريبة من السجل، مما يتيح لك نشر أسرع.

جميع خبرات Dockerfile لديك قابلة للتحويل مباشرة إلى مهام ACR. لم تكن بحاجة إلى تغيير Dockerfiles الخاص بك من أجل إنشائه في السحابة مع مهام ACR، مجرد الأمر الذي تقوم بتشغيله.

في هذا البرنامج التعليمي، الجزء الأول من السلسلة:

  • الحصول على التعليمات البرمجية لمصدر تطبيق العينة
  • إنشاء صورة حاوية في Azure
  • استخدم حاوية من أجل Azure Container Instances

في البرامج التعليمية اللاحقة، ستتعلم استخدام مهام ACR لصورة حاوية آلية قائمة على تثبيت التعليمات البرمجية وتحديث الصورة الأساسية. يمكن أيضًا تشغيل مهام ACR ⁧⁩مهام متعددة الخطوات⁧⁩، باستخدام ملف YAML لتحديد خطوات لإنشاء ودفع واختبار حاويات متعددة اختياريًا.

المتطلبات الأساسية

حساب GitHub

يُرجى إنشاء حساب على ⁧ https://github.com ⁩ إذا لم يكن لديك حساب بالفعل. تستخدم هذه السلسلة التعليمية مستودع GitHub لعرض البنيات التلقائية للصور في مهام ACR.

نسخة مستودع العينة

بعد ذلك، استخدم واجهة المستخدم GitHub لنسخ مستودع العينة إلى حسابك على GitHub. في هذا البرنامج التعليمي، يمكنك إنشاء صورة حاوية من المصدر في المستودع، وفي البرنامج التعليمي المقبل، يمكنك دفع التثبيت إلى نسخة المستودع الخاصة بك من أجل البدء في مهمة الآلية.

نسخة هذا المستودع: ⁧ https://github.com/Azure-Samples/acr-build-helloworld-node

لقطة شاشة لزر نسخة المستودع (المميز) في GitHub

انسخ نسخة المستودع

بمجرد الانتهاء من نسخ المستودع، استنسخ نسختك، وأدخل الدليل الذي يحتوي على الاستنساخ المحلي الخاص بك.

استنساخ الريبو باستخدامgit، واستبدل < اسم المستخدم الخاص بك على >github باسم مستخدم GitHub الخاص بك:

git clone https://github.com/<your-github-username>/acr-build-helloworld-node

أدخل الدليل الذي يحتوي على التعليمات البرمجية للمصدر:

cd acr-build-helloworld-node

Bash shell

يتم تنسيق الأوامر في هذه السلسلة التعليمية لـ Bash shell. إذا كنت تفضل استخدام PowerShell أو Command Prompt أو واجهة أخرى، فقد تحتاج إلى ضبط تنسيق متغير متابعة الخط والبيئة وفقًا لذلك.

إعداد البيئة الخاصة بك لـ Azure CLI

إنشاء في Azure باستخدام مهام ACR

الآن بعد أن سحبت التعليمات البرمجية المصدر إلى جهازك، اتبع تلك الخطوات من أجل إنشاء سجل حاوية وإنشاء صورة الحاوية باستخدام مهام ACR.

لتسهيل تنفيذ أوامر العينة، تستخدم البرامج التعليمية في هذه السلسلة متغيرات بيئة الواجهة. نفذ الأمر التالي لتعيين ⁧ACR_NAME⁩ المتغير. استبدل <اسم التسجيل> باسم فريد لسجل الحاوية الجديد. ينبغي أن يكون اسم السجل فريدًا داخل Azure، وأن يحتوي على أحرف صغيرة فقط، ويحتوي على 5 إلى 50 حرفًا أبجديًا ورقميًا. تعتمد الموارد الأخرى التي تقوم بإنشائها في البرنامج التعليمي على هذا الاسم، لذلك ينبغي لك تعديل هذا المتغير الأول فقط.

ACR_NAME=<registry-name>

مع وجود متغير بيئة تسجيل الحاوية مملوءًا، ينبغي أن تتمكن الآن من نسخ ولصق ما تبقى من الأوامر في البرنامج التعليمي دون تحرير أي قيم. نفّذ الأوامر التالية لإنشاء مجموعة موارد وسجل حاوية.

RES_GROUP=$ACR_NAME # Resource Group name

az group create --resource-group $RES_GROUP --location eastus
az acr create --resource-group $RES_GROUP --name $ACR_NAME --sku Standard --location eastus

الآن، بعد أن كان لديك سجل، استخدم مهام ACR لإنشاء صورة حاوية من التعليمات البرمجية للعينة. نفّذ الأمر ⁧⁩إنشاء az acr⁧⁩ لتنفيذ ⁧⁩مهمة سريعة⁧⁩.

ملاحظة

يعتمد ملف Docker المستخدَم في المثال التالي على صورة حاوية قاعدة عامة من Docker Hub. لتحسين الموثوقية عند استخدام المحتوى العام، قم باستيراد الصورة وإدارتها في سجل حاوية Azure خاص، وتحديث Dockerfile الخاص بك لاستخدام الصورة الأساسية المُدارة بشكل خاص. تعرف على المزيد عن العمل مع الصور العامة.

az acr build --registry $ACR_NAME --image helloacrtasks:v1 --file /path/to/Dockerfile /path/to/build/context.

يكون الناتج من أمر ⁧⁩إنشاء az acr⁧⁩ مماثل لما يلي. يمكنك رؤية تحميل التعليمات البرمجية المصدر («السياق») إلى Azure، وتفاصيل ⁧docker build⁩ العملية التي تُنفذ بها مهمة ACR في السحابة. نظرا لاستخدام مهام ACR ⁧docker build⁩ في إنشاء صورك، لا يلزم إجراء أي تغييرات على ملفات Dockerfiles لبدء استخدام مهام ACR فورًا.

Packing source code into tar file to upload...
Sending build context (4.813 KiB) to ACR...
Queued a build with build ID: da1
Waiting for build agent...
2020/11/18 18:31:42 Using acb_vol_01185991-be5f-42f0-9403-a36bb997ff35 as the home volume
2020/11/18 18:31:42 Setting up Docker configuration...
2020/11/18 18:31:43 Successfully set up Docker configuration
2020/11/18 18:31:43 Logging in to registry: myregistry.azurecr.io
2020/11/18 18:31:55 Successfully logged in
Sending build context to Docker daemon   21.5kB
Step 1/5 : FROM node:15-alpine
15-alpine: Pulling from library/node
Digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
Status: Image is up to date for node:15-alpine
 ---> a56170f59699
Step 2/5 : COPY . /src
 ---> 88087d7e709a
Step 3/5 : RUN cd /src && npm install
 ---> Running in e80e1263ce9a
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN helloworld@1.0.0 No repository field.

up to date in 0.1s
Removing intermediate container e80e1263ce9a
 ---> 26aac291c02e
Step 4/5 : EXPOSE 80
 ---> Running in 318fb4c124ac
Removing intermediate container 318fb4c124ac
 ---> 113e157d0d5a
Step 5/5 : CMD ["node", "/src/server.js"]
 ---> Running in fe7027a11787
Removing intermediate container fe7027a11787
 ---> 20a27b90eb29
Successfully built 20a27b90eb29
Successfully tagged myregistry.azurecr.io/helloacrtasks:v1
2020/11/18 18:32:11 Pushing image: myregistry.azurecr.io/helloacrtasks:v1, attempt 1
The push refers to repository [myregistry.azurecr.io/helloacrtasks]
6428a18b7034: Preparing
c44b9827df52: Preparing
172ed8ca5e43: Preparing
8c9992f4e5dd: Preparing
8dfad2055603: Preparing
c44b9827df52: Pushed
172ed8ca5e43: Pushed
8dfad2055603: Pushed
6428a18b7034: Pushed
8c9992f4e5dd: Pushed
v1: digest: sha256:b038dcaa72b2889f56deaff7fa675f58c7c666041584f706c783a3958c4ac8d1 size: 1366
2020/11/18 18:32:43 Successfully pushed image: myregistry.azurecr.io/helloacrtasks:v1
2020/11/18 18:32:43 Step ID acb_step_0 marked as successful (elapsed time in seconds: 15.648945)
The following dependencies were found:
- image:
    registry: myregistry.azurecr.io
    repository: helloacrtasks
    tag: v1
    digest: sha256:b038dcaa72b2889f56deaff7fa675f58c7c666041584f706c783a3958c4ac8d1
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 15-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git: {}

Run ID: da1 was successful after 1m9.970148252s

من قُرب نهاية الإخراج، تُظهر مهام ACR التبعيات التي تم اكتشافها لصورتك. يُمكّن ذلك مهام ACR من أتمتة إنشاء الصورة على تحديثات الصور الأساسية، مثلما يحدث عند تحديث صورة أساسية باستخدام نظام التشغيل أو تصحيحات الإطار. يمكنك معرفة دعم مهام ACR لتحديثات الصورة الأساسية لاحقًا في هذه السلسلة التعليمية.

النشر إلى مثيلات حاوية Azure

تعمل مهام ACR تلقائيًا على دفع الصور التي تم إنشاؤها بنجاح إلى السجل بشكل افتراضي، ما يسمح لك بنشرها من خلال سجلك فورًا.

في هذا الجزء، يمكنك إنشاء Azure Key Vault، وإنشاء كيان خدمة، ثم نشر الحاوية إلى Azure Container Instances (ACI) باستخدام بيانات اعتماد أساس الخدمة.

تكوين مصادقة السجل

ينبغي أن تستخدم كل سيناريوهات الإنتاج ⁧⁩كيانات الخدمة⁧⁩ للوصول إلى سجل حاويات Azure. توفر لك كيانات الخدمة التحكم في الوصول المستند إلى الدور لصور الحاوية. فيمكنك على سبيل المثال تكوين كيان خدمة مع وصول السحب فقط إلى السجل.

إنشاء مخزن رئيسي

إذا لم يكن لديك مخزن في ⁧⁩Azure Key Vault⁧⁩، فأنشئ واحدًا باستخدام Azure CLI من خلال اتباع الأوامر التالية.

AKV_NAME=$ACR_NAME-vault

az keyvault create --resource-group $RES_GROUP --name $AKV_NAME

أنشئ كيان خدمة، وخزن بيانات الاعتماد

تحتاج الآن إلى إنشاء كيان خدمة وتخزين بيانات اعتمادها في المخزن الرئيسي.

استخدم الأمر ⁧⁩az ad sp create-for-rbac⁧⁩ لإنشاء كيان الخدمة، وتعيين ⁧⁩az keyvault secret set⁧⁩ لتخزين ⁧⁩كلمة مرور⁧⁩ كيان الخدمة في المخزن. استخدام الإصدار ⁧⁩2.25.0⁧⁩ من Azure CLI أو إصدار أحدث لتلك الأوامر:

# Create service principal, store its password in AKV (the registry *password*)
az keyvault secret set \
  --vault-name $AKV_NAME \
  --name $ACR_NAME-pull-pwd \
  --value $(az ad sp create-for-rbac \
                --name $ACR_NAME-pull \
                --scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
                --role acrpull \
                --query password \
                --output tsv)

--role⁩الوسيطة في الأمر السابق تكوين كيان الخدمة مع دور ⁧⁩acrpull⁧⁩ الذي يمنحه وصول السحب فقط إلى التسجيل. لمنح الدفع ووصول السحب، غيّر ⁧--role⁩ الوسيطة إلى ⁧⁩acrpush⁧⁩.

بعد ذلك، خزّن ⁧⁩appId⁧⁩ الخاص بكيان الخدمة في المخزن، وهو ⁧⁩اسم المستخدم⁧⁩ الذي تمرره إلىAzure Container Registry للمصادقة:

# Store service principal ID in AKV (the registry *username*)
az keyvault secret set \
    --vault-name $AKV_NAME \
    --name $ACR_NAME-pull-usr \
    --value $(az ad sp list --display-name $ACR_NAME-pull --query [].appId --output tsv)

لقد أنشأت Azure Key Vault وخزنت فيه سرين من أسرارك:

  • $ACR_NAME-pull-usr⁩معرف كيان الخدمة، للاستخدام بـ⁧⁩اسم المستخدم⁧⁩لتسجيل الحاوية.
  • $ACR_NAME-pull-pwd: كلمة المرور الرئيسية للخدمة، لاستخدامها كسجل للحاوية password.

يمكنك الآن الرجوع إلى تلك الأسرار بالاسم عندما تسحب أنت أو التطبيقات والخدمات الصور من التسجيل.

نشر حاوية باستخدام CLI Azure

الآن، بعد أن تُخزن بيانات اعتماد كيان الخدمة كأسرار Azure Key Vault، يمكن للتطبيقات والخدمات استخدامها للوصول إلى سجلك.

نفّذ الأمر التالي ⁧⁩az container create⁧⁩ لاستخدام مثيل حاوية. يستخدم الأمر بيانات اعتماد كيان الخدمة المُخزنة في Azure Key Vault للمصادقة على سجل الحاوية.

az container create \
    --resource-group $RES_GROUP \
    --name acr-tasks \
    --image $ACR_NAME.azurecr.io/helloacrtasks:v1 \
    --registry-login-server $ACR_NAME.azurecr.io \
    --registry-username $(az keyvault secret show --vault-name $AKV_NAME --name $ACR_NAME-pull-usr --query value -o tsv) \
    --registry-password $(az keyvault secret show --vault-name $AKV_NAME --name $ACR_NAME-pull-pwd --query value -o tsv) \
    --dns-name-label acr-tasks-$ACR_NAME \
    --query "{FQDN:ipAddress.fqdn}" \
    --output table

ينبغي ⁧--dns-name-label⁩أن تكون القيمة فريدة داخل Azure، لذا يقوم الأمر السابق بإلحاق اسم سجل الحاوية بتسمية اسم DNS الخاص بالحاوية. يُظهر الناتج من الأمر اسم المجال المؤهل تمامًا والخاص بالحاوية (FQDN)، على سبيل المثال:

FQDN
----------------------------------------------
acr-tasks-myregistry.eastus.azurecontainer.io

لاحظ FQDN الخاص بالحاوية، لأنك ستستخدمه في القسم التالي.

تحقق من التوزيع

لرؤية عملية بدء تشغيل الحاوية، استخدم الأمر ⁧⁩az container attach⁧⁩:

az container attach --resource-group $RES_GROUP --name acr-tasks

يُظهر⁧az container attach⁩الناتج أولاً حالة الحاوية مع سحب الصورة والبدء، ثم يربط STDOUT الخاص بوحدة التحكم المحلية وSTDERR بالوحدة الخاصة بالحاوية.

Container 'acr-tasks' is in state 'Running'...
(count: 1) (last timestamp: 2020-11-18 18:39:10+00:00) pulling image "myregistry.azurecr.io/helloacrtasks:v1"
(count: 1) (last timestamp: 2020-11-18 18:39:15+00:00) Successfully pulled image "myregistry.azurecr.io/helloacrtasks:v1"
(count: 1) (last timestamp: 2020-11-18 18:39:17+00:00) Created container
(count: 1) (last timestamp: 2020-11-18 18:39:17+00:00) Started container

Start streaming logs:
Server running at http://localhost:80

عند ظهور ⁧Server running at http://localhost:80⁩، انتقل إلى FQDN الخاصة بالحاوية في المتصفح الخاص بك لرؤية التطبيق قيد التشغيل. كان من المُفترض أن يظهر FQDN في إخراج الأمر ⁧az container create⁩ الذي نفذته في الجزء السابق.

نموذج للتطبيق قيد التشغيل في المتصفح

لفصل وحدة التحكم عن الحاوية، اضغط على ⁧Control+C⁩.

تنظيف الموارد

إيقاف مثيل الحاوية باستخدام الأمر ⁧⁩az container delete⁧⁩:

az container delete --resource-group $RES_GROUP --name acr-tasks

لمحو ⁧⁩كل⁧⁩ الموارد التي أنشأتها في هذا البرنامج التعليمي، بما في ذلك سجل الحاويات، والمخزن الرئيسي، وكيان الخدمة، أصدر الأوامر التالية. تُستخدم تلك الموارد في ⁧⁩البرنامج التعليمي المقبل⁧⁩ في هذه السلسلة، ومع ذلك، قد ترغب في الاحتفاظ بها إذا كنت تنتقل مباشرةً إلى البرنامج التعليمي التالي.

az group delete --resource-group $RES_GROUP
az ad sp delete --id http://$ACR_NAME-pull

الخطوات التالية

الآن بعد أن أجريت اختبارًا للحلقة الداخلية الخاصة بك مع مهمة سريعة، قم بتكوين ⁧⁩مهمة إنشاء⁧⁩ لتشغيل صور الحاوية عند الالتزام بالتعليمات البرمجية المصدر إلى مستودع Git: