البرنامج التعليمي: أتمتة بنيات صورة الحاوية عند تحديث صورة أساسية في سجل حاويات Azure

تدعم مهام ACR عمليات بنيات صورة الحاوية المؤتمتة عند تحديث الصورة الأساسية للحاوية، كما هو الحال عند تصحيح نظام التشغيل أو إطار عمل التطبيق في إحدى الصور الأساسية.

في هذا البرنامج التعليمي، تتعلم كيفية إنشاء مهمة ACR التي تؤدي وجود الإنشاء في السحابة عند دفع الصورة الأساسية للحاوية إلى السجل ذاته. يمكنك أيضًا تجربة برنامج تعليمي لإنشاء مهمة ACR تعمل على إنشاء صورة عندما يتم دفع صورة أساسية إلى سجل حاوية Azure آخر.

سوف تتعلم في هذا البرنامج التعليمي:

  • إنشاء صورة أساسية
  • إنشاء صورة تطبيق في السجل ذاته لتعقب الصورة الأساسية
  • تحديث الصورة الأساسية لتشغيل مهمة صور التطبيق
  • اعرض المهمة التي تم تشغيلها
  • تحقق من صورة التطبيق المحدثة

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

استكمل البرامج التعليمية السابقة

يفترض هذا البرنامج التعليمي أنك قمت بالفعل بتكوين بيئتك واستكملت الخطوات في أول سلسلتين من البرامج التعليمية، والتي تعلمت فيها ما يلي:

  • إنشاء سجل حاوية Azure
  • نسخة مستودع العينة
  • استنساخ تقرير العينة
  • إنشاء رمز الوصول الشخصي GitHub

إذا لم تكن قد فعلت ذلك بالفعل، فاستكمل الدروس التالية قبل المتابعة:

أنشئ صور حاوية في السحابة باستخدام مهام تسجيل حاوية Azure

أتمتة بنيات صور حاوية في السحابة التي تم إنشاؤها مع مهام تسجيل حاوية Azure

قم بتكوين البيئة

  • تتطلب هذه المقالة الإصدار 2.0.46، أو إصداراً أحدث من Azure CLI. في حال استخدام Azure Cloud Shell، يكون الإصدار الأخير مثبتًا بالفعل.

تعبئة متغيرات بيئة shell هذه بقيم مناسبة لبيئتك. هذه الخطوة غير مطلوبة بالضرورة، ولكن يجعل تنفيذ أوامر Azure CLI متعددة الخطوط في هذا البرنامج التعليمي أسهل قليلاً. إذا لم تملأ متغيرات البيئة هذه، فإنه يجب استبدال كل قيمة يدوياً أينما ظهرت في أوامر المثال.

ACR_NAME=<registry-name>        # The name of your Azure container registry
GIT_USER=<github-username>      # Your GitHub user account name
GIT_PAT=<personal-access-token> # The PAT you generated in the second tutorial

سيناريو تحديثات الصورة الأساسية

يعرفك هذا البرنامج التعليمي على سيناريو تحديث صورة أساسية يتم فيها الاحتفاظ بصورة أساسية وصورة تطبيق في سجل واحد.

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

  • Dockerfile-app: تطبيق ويب Node.js صغير يعرض صفحة ويب ثابتة تظهر إصدار Node.js الذي تستند إليه. تمت محاكاة سلسلة الإصدار: فهي تعرض محتويات متغير البيئة، NODE_VERSION، المحدد في الصورة الأساسية.

  • Dockerfile-base: الصورة التيDockerfile-app تحدد على أنها أساسها. إنه ذاته يعتمد على صورة Node، ويتضمن NODE_VERSION متغير البيئة.

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

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

إنشاء صورة أساسية

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

az acr build --registry $ACR_NAME --image baseimages/node:15-alpine --file Dockerfile-base .

إنشاء مهمة

بعد ذلك، إنشاء مهمة مع az acr task create:

az acr task create \
    --registry $ACR_NAME \
    --name baseexample1 \
    --image helloworld:{{.Run.ID}} \
    --arg REGISTRY_NAME=$ACR_NAME.azurecr.io \
    --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
    --file Dockerfile-app \
    --git-access-token $GIT_PAT

تتشابه هذه المهمة مع المهمة التي تم إنشاؤها في البرنامج التعليمي السابق. كما أنه يرشد مهام ACR لتشغيل بنية صورة عند دفع عمليات الالتزام إلى المستودع المحدد بواسطة --context. بينما Dockerfile المُستخدمة لإنشاء الصورة في البرنامج التعليمي السابق، ويحدد صورة قاعدة عامة (FROM node:15-alpine)، Dockerfile في هذه المهمة، Dockerfile-app، يحدد صورة أساسية في السجل ذاته:

FROM ${REGISTRY_NAME}/baseimages/node:15-alpine

يسهل هذا التكوين من محاكاة تصحيح إطار العمل في الصورة الأساسية في وقت لاحق في هذا البرنامج التعليمي.

أنشئ حاوية التطبيق

استخدام az acr task run لتشغيل المهمة يدويًا وإنشاء صورة التطبيق. تُعد هذه الخطوة ضرورية بحيث تتعقب المهمة تبعية صورة التطبيق على الصورة الأساسية.

az acr task run --registry $ACR_NAME --name baseexample1

بمجرد إتمام المهمة، لاحظ معرف التشغيل (على سبيل المثال، "da6") إذا كنت ترغب في إتمام الخطوة الاختيارية التالية.

اختياري: تشغيل حاوية التطبيق محلياً

إذا كنت تعمل على المستوى المحلي (وليس في Cloud Shell)، وكان لديك Docker مثبت، فشغل الحاوية لرؤية التطبيق المقدم في مستعرض ويب قبل إعادة إنشاء صورته الأساسية. إذا كنت تستخدم Cloud Shell، فتخطَّ هذا القسم (لا تدعم Cloud Shell az acr login أو docker run).

أولاً، المصادقة على سجل الحاويات الخاص بك باستخدام az acr login:

az acr login --name $ACR_NAME

شغل الحاوية على الصعيد المحلي docker run. استبدل <run-id> بمعرف التشغيل الموجود في الإخراج من الخطوة السابقة (على سبيل المثال، "da6"). يضع هذا المثال أسماء الحاوية myapp ويتضمن --rm المعلمة لإزالة الحاوية عند إيقافها.

docker run -d -p 8080:80 --name myapp --rm $ACR_NAME.azurecr.io/helloworld:<run-id>

انتقل إلى http://localhost:8080 في متصفحك، وسترى رقم الإصدار Node.js المقدم في صفحة الويب، على غرار ما يلي. في خطوة لاحقة، يمكنك تفريغ الإصدار عن طريق إضافة "a" إلى سلسلة الإصدار.

لقطة شاشة لتطبيق العينة في المتصفح

لإيقاف الحاوية وإزالتها، شغل الأمر التالي:

docker stop myapp

سرد البنيات

التالي، ضع قائمة بالمهام المُشغلة التي أكملتها مهام ACR للسجل الخاص بك، شغّل الأمر az acr task list-runs:

az acr task list-runs --registry $ACR_NAME --output table

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

RUN ID    TASK            PLATFORM    STATUS     TRIGGER    STARTED               DURATION
--------  --------------  ----------  ---------  ---------  --------------------  ----------
cax       baseexample1    linux       Succeeded  Manual     2020-11-20T23:33:12Z  00:00:30
caw       taskhelloworld  linux       Succeeded  Commit     2020-11-20T23:16:07Z  00:00:29
cav       example2        linux       Succeeded  Commit     2020-11-20T23:16:07Z  00:00:55
cau       example1        linux       Succeeded  Commit     2020-11-20T23:16:07Z  00:00:40
cat       taskhelloworld  linux       Succeeded  Manual     2020-11-20T23:07:29Z  00:00:27

تحديث الصورة الأساسية

يمكنك عندئذ محاكاة تصحيح إطار العمل في الصورة الأساسية. تحرير Dockerfile-base، وإضافة "a" بعد رقم الإصدار المحدد في NODE_VERSION:

ENV NODE_VERSION 15.2.1a

شغل مهمة سريعة لإنشاء صورة أساسية معدلة. دوّن مُعرف التشغيل في الإخراج.

az acr build --registry $ACR_NAME --image baseimages/node:15-alpine --file Dockerfile-base .

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

قائمة الإنشاء المحدثة

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

az acr task list-runs --registry $ACR_NAME --output table

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

Run ID    TASK            PLATFORM    STATUS     TRIGGER       STARTED               DURATION
--------  --------------  ----------  ---------  ------------  --------------------  ----------
ca11      baseexample1    linux       Succeeded  Image Update  2020-11-20T23:38:24Z  00:00:34
ca10      taskhelloworld  linux       Succeeded  Image Update  2020-11-20T23:38:24Z  00:00:24
cay                       linux       Succeeded  Manual        2020-11-20T23:38:08Z  00:00:22
cax       baseexample1    linux       Succeeded  Manual        2020-11-20T23:33:12Z  00:00:30
caw       taskhelloworld  linux       Succeeded  Commit        2020-11-20T23:16:07Z  00:00:29
cav       example2        linux       Succeeded  Commit        2020-11-20T23:16:07Z  00:00:55
cau       example1        linux       Succeeded  Commit        2020-11-20T23:16:07Z  00:00:40
cat       taskhelloworld  linux       Succeeded  Manual        2020-11-20T23:07:29Z  00:00:27

إذا كنت ترغب في تنفيذ الخطوة الاختيارية التالية لتشغيل الحاوية التي تم إنشاؤها حديثًا لرؤية رقم الإصدار المُحدث، فلاحظ قيمة RUN ID للبناء الذي تم تشغيله في تحديث الصورة (في الإخراج السابق، فإنه "ca11").

اختياريًا: شغل صورة تم إنشاؤها حديثًا

إذا كنت تعمل محلياً (وليس في Cloud Shell)، وكان لديك Docker مثبتاً، شغل صورة التطبيق الجديدة بمجرد اكتمال إنشائها. استبدال <run-id> باستخدام RUN ID الذي تلقيته في الخطوة السابقة. إذا كنت تستخدم Cloud Shell، فتخطَّ هذا القسم (لا تدعم Cloud Shell docker run).

docker run -d -p 8081:80 --name updatedapp --rm $ACR_NAME.azurecr.io/helloworld:<run-id>

انتقل إلى http://localhost:8081 في متصفحك، وسترى رقم الإصدار Node.js (بحرف «a») في صفحة الويب:

لقطة شاشة مُحدثة لتطبيق العينة في المتصفح

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

لإيقاف الحاوية وإزالتها، شغل الأمر التالي:

docker stop updatedapp

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

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

للحصول على سير عمل كامل لإدارة الصور الأساسية التي تنشأ من مصدر عام، راجع كيفية استهلاك المحتوى العام والحفاظ عليه باستخدام Azure Container Registry Tasks.

الآن، انتقل إلى البرنامج التعليمي التالي لمعرفة كيفية تشغيل المهام على جدول زمني محدد.