ترحيل البرامج المخصصة إلى Azure App Service باستخدام حاوية مخصصة
توفر Azure App Service مكدسات تطبيقات محددة مسبقا على Windows مثل ASP.NET أو Node.js، تعمل على IIS. تعمل بيئة Windows المكونة مسبقاً على تأمين نظام التشغيل من:
- الوصول الإداري.
- إكمال عمليات تثبيت البرامج.
- تغييرات التي تطرأ على ذاكرة التخزين المؤقت للتجميع العمومي.
لمزيدٍ من المعلومات، راجع وظائف نظام التشغيل على خدمة Azure App Service.
يمكنك نشر صورة Windows مكونة خصوصاً من Visual Studio لإجراء تغييرات نظام التشغيل التي يحتاجها تطبيقك. هكذا من السهل ترحيل التطبيق المحلي الذي يتطلب تكوين نظام التشغيل والبرامج المخصص. يوضح هذا البرنامج التعليمي كيفية ترحيل تطبيق ASP.NET الذي يستخدم خطوطا مخصصة مثبتة في مكتبة الخطوط Windows إلى App Service. تقوم بنشر صورة Windows مكونه خصيصا من Visual Studio إلى Azure Container Registry، ثم قم بتشغيله في App Service.
المتطلبات الأساسية
لإكمال هذا البرنامج التعليمي:
- التسجيل في حساب Docker Hub
- تثبيت Docker أو Windows.
- تبديل Docker لتشغيل حاويات Windows.
- تثبيت Visual Studio 2022 باستخدام ASP.NET وتطوير الويب وأحجام عمل التطوير الخاصة بـ Azure. إذا قمت بتثبيت Visual Studio 2022 بالفعل:
- ثبّت آخر التحديثات في Visual Studio بتحديد تعليمات>التحقق من وجود تحديثات.
- أضِف أحمال العمل في Visual Studio من خلال تحديد "Tools">"Get Tools and Features".
قم بإعداد التطبيق مَحَلِّيّاً
تنزيل العينة
في هذه الخطوة، يمكنك إعداد مشروع .NET المحلي.
- تحميل نموذج المشروع.
- استخلاص (فك ضغط) ملف custom-font-win-container-master.zip.
يحتوي نموذج المشروع على تطبيق ASP.NET بسيط والذي يستخدم خط مخصص مثبت في مكتبة خطوط Windows. ليس من الضروري تثبيت هذه الخطوط. ومع ذلك، العينة هي مثال على تطبيق متكامل مع نظام التشغيل الرئيسي. لترحيل مثل هذا التطبيق إلى App Service، يمكنك إما إعادة تكييف التعليمات البرمجية الخاصة بك لإزالة التكامل، أو ترحيلها كما هي في حاوية Windows مخصصة.
قم بتثبيت الأدوات
في Windows Explorer، انتقل إلى custom-font-win-container-master/CustomFontSample، انقر بزر الماوس الأيمن فوق FrederickatheGreat-Regular.ttf،وحدد تثبيت.
هذا الخط متاح للجمهور من خطوط Google.
تشغيل التطبيق
قم بفتح ملف custom-font-win-container/CustomFontSample.sln في Visual Studio.
اكتب Ctrl+F5
لتشغيل التطبيق دون تصحيح الأخطاء. يتم عرض التطبيق في المستعرض الافتراضي الخاص بك.
اعتباراً لأنه يستخدم خطاً مثبتاً، لا يمكن تشغيل التطبيق في بيئة الاختبار المعزولة App Service. ومع ذلك، يمكنك نشره باستخدام حاوية Windows بدلا من ذلك، لأنه يمكنك تثبيت الخط في حاوية Windows.
تكوين حاوية Windows
في Solution Explorer، انقر بزر الماوس الأيمن فوق مشروع CustomFontSample وحدد إضافة>Container Orchestration Support.
حدد إعداد Docker >موافق.
تم إعداد مشروعك الآن لتشغيله في حاوية Windows. Dockerfile
تتم إضافة إلى مشروع CustomFontSample، ويضاف مشروع docker-compose إلى الحل.
من Solution Explorer، افتح Dockerfile.
تحتاج إلى استخدام صورة أصل معتمدة. قم بتغيير الصورة الأصل عن طريق استبدال FROM
السطر الذي يحتوي التعليمات البرمجية التالية:
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019
في نهاية الملف، أضف السطر التالي واحفظ الملف:
RUN ${source:-obj/Docker/publish/InstallFont.ps1}
يمكنك العثور على InstallFont.ps1 في مشروع CustomFontSample. إنه برنامج نصي بسيط يقوم بتثبيت الخط. يمكنك العثور على إصدار أكثر تعقيدا من البرنامج النصي في معرض PowerShell.
إشعار
للقيام باختبار حاوية Windows محلياً، تأكد من بدء تشغيل Docker على الجهاز المحلي.
نشر في Azure Container Registry
يمكن Azure Container Registry تخزين الصور الخاصة بك لنشر حاوية. يمكنك تكوين App Service لاستخدام الصور المستضافة في Azure Container Registry.
فتح معالج النشر
في Solution Explorer، انقر بزر الماوس الأيمن فوق مشروع CustomFontSample وحدد نشر.
قم بإنشاء التسجيل والنشر
في معالج النشر، حدد تسجيل الحاوية>إنشاء نشر سجل حاويات Azure >جديد.
قم بالتسجيل بحساب Azure
في مربع الحوار قم بإنشاء سجل حاويات Azure جديد، وحدد إضافة حساب،وقم بتسجيل الدخول إلى اشتراك Azure. إذا كنت قد سجلت الدخول بالفعل، فحدد الحساب الذي يحتوي على الاشتراك المطلوب من القائمة المنسدلة.
قم بتكوين التسجيل
قم بتكوين سجل حاوية جديدة استنادا إلى القيم المقترحة في الجدول التالي. عند الانتهاء، حدّد «إنشاء».
الإعدادات | القيمة المقترحة | لمزيد من المعلومات |
---|---|---|
بادئة DNS | قم بالاحتفاظ باسم التسجيل الذي تم إنشاؤه أو تغييره إلى اسم فريد آخر. | |
مجموعة الموارد | حدد New، واكتب myResourceGroup، وحدد OK. | |
SKU | أساسي | مستويات التسعير |
موقع التسجيل | أوروبا الغربية |
تم فتح إطار محطة طرفية وتعرض تطور نشر الصورة. انتظر حتى يكتمل التوزيع.
تسجيل الدخول إلى Azure
قم بتسجيل الدخول إلى بوابة Azure.
أنشئ تطبيق ويب
من القائمة اليسري، حدد إنشاء مورد>> تطبيق الويب للحاويات.
قم بتكوين أساسيات التطبيق
في علامة التبويب الأساسيات قم بتكوين الإعدادات وفقاً للجدول التالي ثم انقر على Next: Docker.
الإعدادات | القيمة المقترحة | لمزيد من المعلومات |
---|---|---|
الاشتراك | تأكد من تحديد الاشتراك الصحيح. | |
مجموعة الموارد | حدد Create new، واكتب myResourceGroup، وحدد OK. | |
الاسم | اكتب اسم فريد. | عنوان URL لتطبيق الويب هو https://<app-name>.azurewebsites.net ، حيث <app-name> هو اسم التطبيق الخاص بك. |
نشر | حاوية Docker | |
نظام تشغيل | Windows | |
المنطقة | أوروبا الغربية | |
خطة Windows | حدد Create new، واكتب myAppServicePlan، وحدد OK. |
يجب أن تبدو علامة تبويب الأساسيات كما يلي:
تكوين حاوية Windows
في علامة التبويب Docker، قم بتكوين حاوية Windows المخصصة كما هو موضح في الجدول التالي، وحدد مراجعة + إنشاء.
الإعدادات | القيمة المقترحة |
---|---|
مصدر الصورة | سجل حاوية Azure |
التسجيل | حدد التسجيل الذي أنشأته سابقا. |
الصورة | customfontsample |
العلامات | الأحدث |
إنشاء التطبيق بالكامل
حدد Create وانتظر Azure لتقوم بإنشاء الموارد المطلوبة منك.
استعرض التطبيق
عند اكتمال عملية Azure، يتم عرض مربع إعلام.
حدد الانتقال إلى المورد.
في صفحة التطبيق، حدد الرابط الموجود أسفل URL.
يتم فتح صفحة مستعرض جديدة إلى الصفحة التالية:
انتظر بضع دقائق وحاول مرة أخرى، حتى تحصل على الصفحة الرئيسية مع الخط الجميل الذي تتوقعه:
تهانينا! لقد قمت بترحيل تطبيق ASP.NET إلى خدمة تطبيقات Azure في حاوية Windows.
مراجعة سجلات بدء تشغيل الحاوية
قد يستغرق تحميل حاوية Windows القليل من الوقت. للاطلاع على التقدم، انتقل إلى عنوان URL الآتي عن طريق استبدال <app-name> باسم تطبيقك.
https://<app-name>.scm.azurewebsites.net/api/logstream
تبدو السجلات المتدفقة كما يلي:
14/09/2018 23:16:19.889 INFO - Site: fonts-win-container - Creating container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest.
14/09/2018 23:16:19.928 INFO - Site: fonts-win-container - Create container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest succeeded. Container Id 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:23.405 INFO - Site: fonts-win-container - Start container succeeded. Container: 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Configuring container
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container start-up and configuration completed successfully
تستخدم Azure App Service تقنية حاوية Docker لاستضافة الصور المدمجة والصور المخصصة. لمراجعة قائمة من الصور المضمنة، شغّل أمر Azure CLI، 'az webapp list-runtimes --os linux'. إذا كانت هذه الصور لا تلبي احتياجاتك، يمكنك إنشاء ونشر صورة مخصصة.
إشعار
يجب أن تستهدف الحاوية بنية x86-x64، ARM64 غير مدعوم.
في هذا البرنامج التعليمي، تتعلم كيفية:
- اضغط على الصورة لإظهار Azure Container Registry
- نشر الصورة المخصصة لـ App Service
- تكوين متغيرات البيئة
- سحب الصورة إلى App Service باستخدام هوية مدارة
- الوصول إلى سجلات التشخيص
- تمكين CI/CD من Azure Container Registry إلى App Service
- قم بالاتصال بالحاوية عن طريق استخدام SSH
إكمال هذا البرنامج التعليمي يفرض تكاليف صغيرة في حسابك على Azure من أجل سجل الحاويات ويمكن أن تتكبد تكاليف إضافية لاستضافة الحاوية لفترة أطول من شهر.
قم بإعداد بيئتك الأولية
يتطلب هذا البرنامج التعليمي الإصدار 2.0.80 أو الأحدث من CLI Azure. إذا كنت تستخدم Azure Cloud Shell، فإن أحدث إصدار مثبت بالفعل.
- أن يكون لديك حساب Azure باشتراك نشط. أنشئ حساباً مجاناً.
استخدم بيئة Bash في Azure Cloud Shell. لمزيد من المعلومات، راجع التشغيل السريع ل Bash في Azure Cloud Shell.
إذا كنت تفضل تشغيل أوامر مرجع CLI محلياً قم بتثبيت CLI Azure. إذا كنت تعمل على نظام تشغيل Windows أو macOS، ففكر في تشغيل Azure CLI في حاوية Docker. لمزيد من المعلومات، راجع كيفية تشغيل Azure CLI في حاوية Docker.
إذا كنت تستخدم تثبيت محلي، يُرجى تسجيل الدخول إلى Azure CLI مستخدمًا أمر az login. لإنهاء عملية المصادقة، اتبع الخطوات المعروضة في جهازك. للحصول على خيارات أخرى لتسجيل دخول، راجع تسجيل الدخول باستخدام Azure CLI.
عندما يُطلب منك، قم بتثبيت ملحق Azure CLI عند الاستخدام لأول مرة. لمزيد من المعلومات بشأن الامتدادات، راجع استخدام امتدادات مع Azure CLI.
يُرجى تشغيل إصدار az للوصول إلى الإصدار والمكتبات التابعة التي تم تثبيتها. للتحديث لآخر إصدار، يُرجى تشغيل تحديث az.
- تثبيت Docker، والتي تستخدمها لبناء صور Docker. قد يتطلب منك تثبيت Docker إعادة تشغيل جهاز كمبيوتر.
بعد تثبيت Docker أو تشغيل Azure Cloud Shell، افتح نافذة طرفية وتحقق من تثبيت docker:
docker --version
نسخ أو تنزيل عينة التطبيق
يمكنك الحصول على عينة لهذا البرنامج التعليمي عن طريق استنساخها أو تحميلها من git .
استنساخ باستخدام git
نسخ مستودع العينة:
git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input
تأكد من تضمين الوسيطة --config core.autocrlf=input
لضمان نهايات الأسطر المناسبة في الملفات المستخدمة داخل الحاوية Linux:
ثم، انتقل إلى المجلد:
cd docker-django-webapp-linux
قم بالتحميل من GitHub
بدلا من استخدام استنساخ git ، يمكنك زيارة https://github.com/Azure-Samples/docker-django-webapp-linux ، حدد استنساخ، ثم حدد تنزيل ZIP.
فك ملف ZIP في مجلد اسمه docker-django-webapp-linux.
ثم، افتح نافذة المحطة الطرفية في المجلدdocker-django-webapp-linux.
(اختياري) فحص ملف Docker
الملف في النموذج المسمى Dockerfile الذي يصف صورة docker ويحتوي على إرشادات التكوين:
FROM tiangolo/uwsgi-nginx-flask:python3.6
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt --no-cache-dir
ADD . /code/
# ssh
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
&& apt-get install -y --no-install-recommends dialog \
&& apt-get update \
&& apt-get install -y --no-install-recommends openssh-server \
&& echo "$SSH_PASSWD" | chpasswd
COPY sshd_config /etc/ssh/
COPY init.sh /usr/local/bin/
RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000 2222
#CMD ["python", "/code/manage.py", "runserver", "0.0.0.0:8000"]
ENTRYPOINT ["init.sh"]
- تقوم المجموعة الأولى من الأوامر بتثبيت متطلبات التطبيق في البيئة.
- المجموعة الثانية من الأوامر إنشاء ملقم SSH للاتصال الآمن بين الحاوية والمضيف.
- السطر الأخير،
ENTRYPOINT ["init.sh"]
، استدعاء لبدء تشغيل خدمةinit.sh
SSH وخادم Python.
إنشاء الصورة واختبارها محليا
إشعار
Docker Hub لديه حصص على عدد عمليات السحب المجهولة لكل IP وعدد عمليات السحب الموثقة لكل مستخدم حر (انظر نقل البيانات). إذا لاحظت أن عمليات السحب من Docker Hub محدودة، فحاول docker login
إذا لم تكن قد سجلت الدخول بالفعل.
قم بتشغيل الأمر التالي لإنشاء صورة:
docker build --tag appsvc-tutorial-custom-image .
اختبر أن البناء يعمل عن طريق تشغيل حاوية Docker محليا:
docker run -it -p 8000:8000 appsvc-tutorial-custom-image
يحدد هذا
docker run
الأمر المنفذ باستخدام-p
الوسيطة متبوعا باسم الصورة.-it
يتيح لك إيقافها معCtrl+C
.تلميح
إذا كنت تعمل على Windows وترى الخطأ standard_init_linux.go:211: exec user process caused "no such file or directory"، يحتوي الملف init.sh على نهايات سطر CR-LF بدلاً من نهايات LF المتوقعة. يحدث هذا الخطأ إذا كنت تستخدم git لنسخ مستودع العينة ولكن حذف
--config core.autocrlf=input
المعلمة. في هذه الحالة، استنسخ المستودع مرة أخرى مع الوسيطة '--config'. قد تشاهد الخطأ أيضا إذا قمت بتحرير init.sh وحفظته مع نهايات CRLF. في هذه الحالة، قم بحفظ الملف مرة أخرى مع نهايات LF فقط.استعرض
http://localhost:8000
للتحقق من أن تطبيق الويب والحاوية يعملان بشكل صحيح.
ط. إنشاء هوية مُدارة يعينها المستخدم
يمكن لخدمة التطبيقات إما استخدام هوية مدارة افتراضية أو هوية مدارة معينة من قبل المستخدم للمصادقة مع سجل حاوية. في هذا البرنامج التعليمي، ستستخدم هوية مدارة يعينها المستخدم.
أنشئ مجموعة موارد باستخدام أمر az group create:
az group create --name msdocs-custom-container-tutorial --location westeurope
يمكنك تغيير
--location
القيمة لتحديد منطقة قريبة منك.إنشاء هوية مدارة في مجموعة الموارد.
az identity create --name myID --resource-group msdocs-custom-container-tutorial
2. إنشاء سجل حاويات
قم بإنشاء سجل حاوية باستخدام
az acr create
الأمر واستبدل<registry-name>
باسم فريد للسجل الخاص بك. يجب أن يحتوي الاسم على أحرف وأرقام فقط، ويجب أن يكون فريدا عبر جميع Azure.az acr create --name <registry-name> --resource-group msdocs-custom-container-tutorial --sku Basic --admin-enabled true
--admin-enabled
تتيح لك المعلمة دفع الصور إلى السجل باستخدام مجموعة من بيانات الاعتماد الإدارية.استرداد بيانات الاعتماد الإدارية عن طريق تشغيل
az acr show
الأمر :az acr credential show --resource-group msdocs-custom-container-tutorial --name <registry-name>
يوفر إخراج JSON من هذا الأمر اثنين من كلمات المرور مع اسم المستخدم الخاص بالتسجيل.
3. دفع نموذج الصورة إلى Azure Container Registry
في هذا القسم، يمكنك دفع الصورة إلى Azure Container Registry، والتي سيتم استخدامها بواسطة App Service لاحقا.
من المحطة الطرفية المحلية حيث قمت بإنشاء نموذج الصورة، استخدم
docker login
الأمر لتسجيل الدخول إلى سجل الحاوية:docker login <registry-name>.azurecr.io --username <registry-username>
استبدل
<registry-name>
<registry-username>
وبالقيم من الخطوات السابقة. عند مطالبتك، اكتب إحدى كلمات المرور من الخطوة السابقة.يمكنك استخدام نفس اسم التسجيل في كافة الخطوات المتبقية من هذا القسم.
عند نجاح تسجيل الدخول، ضع علامة على صورة Docker المحلية إلى السجل:
docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
استخدم
docker push
الأمر لدفع الصورة إلى التسجيل:docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
قد يستغرق تحميل الصورة في المرة الأولى بضع دقائق لأنها تتضمن الصورة الأساسية. التحميلات اللاحقة عادة ما تكون أسرع.
أثناء الانتظار، يمكنك إكمال الخطوات الموجودة في القسم التالي لتكوين App Service للنشر من التسجيل.
4. تخويل الهوية المدارة للسجل الخاص بك
لا تملك الهوية المدارة التي قمت بإنشائها تخويل لسحبها من سجل الحاوية حتى الآن. في هذه الخطوة، يمكنك تمكين التخويل.
استرداد المعرف الأساسي للهوية المدارة:
principalId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query principalId --output tsv)
استرداد معرف المورد لسجل الحاوية:
registryId=$(az acr show --resource-group msdocs-custom-container-tutorial --name <registry-name> --query id --output tsv)
منح إذن الهوية المدارة للوصول إلى سجل الحاوية:
az role assignment create --assignee $principalId --scope $registryId --role "AcrPull"
لمزيد من المعلومات حول هذه الأذونات، راجع ما هو عنصر تحكم الوصول المستند إلى دور Azure.
5. أنشئ تطبيق الويب
إنشاء خطة خدمة التطبيقات باستخدام
az appservice plan create
الأمر:az appservice plan create --name myAppServicePlan --resource-group msdocs-custom-container-tutorial --is-linux
تتوافق خطة خدمة التطبيقات مع الجهاز الافتراضي الذي يستضيف تطبيق الويب. افتراضيا، يستخدم الأمر السابق مستوى تسعير B1 وهو غير مكلف ومجاني للشهر الأول. يمكنك التحكم في الطبقة باستخدام
--sku
المعلمة.إنشاء تطبيق ويب باستخدام
az webapp create
الأمر:az webapp create --resource-group msdocs-custom-container-tutorial --plan myAppServicePlan --name <app-name> --deployment-container-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
استبدله
<app-name>
باسم لتطبيق الويب، والذي يجب أن يكون فريدا عبر كل Azure. استبدله أيضا<registry-name>
باسم التسجيل من القسم السابق.تلميح
يمكنك استرداد إعدادات الحاوية في تطبيق الويب في أي وقت باستخدام الأمر
az webapp config container show --name <app-name> --resource-group msdocs-custom-container-tutorial
. يتم تحديد الصورة في الخاصيةDOCKER_CUSTOM_IMAGE_NAME
. عند نشر تطبيق الويب من خلال قوالب Azure DevOps أو Azure Resource Manager، يمكن أن تظهر الصورة أيضا في خاصية باسمLinuxFxVersion
. كلا الخاصيتان يخدمان نفس الغرض. إذا كان كلاهما موجودا في تكوين تطبيق الويب،LinuxFxVersion
يأخذ الأسبقية.
6. تكوين تطبيق الويب
في هذه الخطوة، يمكنك تكوين تطبيق الويب كما يلي:
- تستمع حاوية العينة على المنفذ 8000 لطلبات الويب، ويمكنك تكوين التطبيق لإرسال الطلبات إلى المنفذ 8000.
- اطلب من تطبيقك استخدام الهوية المدارة لسحب الصور من سجل الحاوية.
- تكوين النشر المستمر من سجل الحاوية (أو كل دفع صورة إلى السجل سيؤدي إلى تشغيل تطبيقك لسحب الصورة الجديدة). هذا الجزء غير مطلوب لتطبيق الويب الخاص بك للسحب من سجل الحاوية الخاص بك، ولكن يمكنه إعلام تطبيق الويب الخاص بك عند دفع صورة جديدة إلى السجل. بدونها، يجب تشغيل سحب صورة يدويا عن طريق إعادة تشغيل تطبيق الويب.
استخدم
az webapp config appsettings set
لتعيينWEBSITES_PORT
متغير البيئة كما هو متوقع بواسطة رمز التطبيق:az webapp config appsettings set --resource-group msdocs-custom-container-tutorial --name <app-name> --settings WEBSITES_PORT=8000
استبدل
<app-name>
بالاسم الذي استخدمته في الخطوة السابقة.لمزيد من المعلومات حول متغير البيئة هذا، راجع readme في مستودع GitHub للعينة.
تمكين الهوية المدارة المعينة من قبل المستخدم في تطبيق الويب باستخدام
az webapp identity assign
الأمر :id=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query id --output tsv) az webapp identity assign --resource-group msdocs-custom-container-tutorial --name <app-name> --identities $id
استبدل
<app-name>
بالاسم الذي استخدمته في الخطوة السابقة.قم بتكوين تطبيقك للسحب من Azure Container Registry باستخدام الهويات المدارة.
appConfig=$(az webapp config show --resource-group msdocs-custom-container-tutorial --name <app-name> --query id --output tsv) az resource update --ids $appConfig --set properties.acrUseManagedIdentityCreds=True
استبدل
<app-name>
بالاسم الذي استخدمته في الخطوة السابقة.قم بتعيين معرف العميل الذي يستخدمه تطبيق الويب الخاص بك للسحب من Azure Container Registry. هذه الخطوة غير مطلوبة إذا كنت تستخدم الهوية المدارة المعينة من قبل النظام.
clientId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query clientId --output tsv) az resource update --ids $appConfig --set properties.AcrUserManagedIdentityID=$clientId
تمكين CI/CD في App Service.
cicdUrl=$(az webapp deployment container config --enable-cd true --name <app-name> --resource-group msdocs-custom-container-tutorial --query CI_CD_URL --output tsv)
CI_CD_URL
هو عنوان URL الذي تنشئه لك App Service. يجب أن يقوم التسجيل الخاص بك URL هذا لإعلام App Service بحدوث دفعة للصورة. إنها لا تخلق في الواقع webhook لك.إنشاء webhook في سجل الحاويات الخاص بك باستخدام CI_CD_URL التي حصلت عليها من الخطوة الأخيرة.
az acr webhook create --name appserviceCD --registry <registry-name> --uri $cicdUrl --actions push --scope appsvc-tutorial-custom-image:latest
لاختبار ما إذا تم تكوين خطاف الويب الخاص بك بشكل صحيح، قم باختبار اتصال خطاف الويب، ومعرفة ما إذا كنت تحصل على استجابة 200 OK.
eventId=$(az acr webhook ping --name appserviceCD --registry <registry-name> --query id --output tsv) az acr webhook list-events --name appserviceCD --registry <registry-name> --query "[?id=='$eventId'].eventResponseMessage"
تلميح
لمشاهدة كافة المعلومات حول كافة أحداث webhook قم بإزالة
--query
المعلمة.إذا كنت تقوم بتدفق سجل الحاوية، يجب أن تشاهد الرسالة بعد تنفيذ الأمر ping على webhook:
Starting container for site
لأن webhook يؤدي إلى إعادة تشغيل التطبيق.
السابعة. استعرض التطبيق
لاختبار التطبيق، استعرض للوصول إلى https://<app-name>.azurewebsites.net
، واستبدله <app-name>
باسم تطبيق الويب الخاص بك.
في أول وصول، قد يستغرق التطبيق بعض الوقت للرد لأن خدمة التطبيقات يجب أن تسحب الصورة بالكامل من هذا التسجيل. إذا انتهت مهلة المتصفح، قم فقط بتحديث الصفحة. بمجرد سحب الصورة الأولية، سيتم تشغيل الاختبارات المتتابعة بشكل أسرع بكثير.
الثامن. الوصول إلى سجلات التشخيص
أثناء انتظارك لسحب App Service للصورة، من المجدي أن ترى بالضبط ما تقوم به App Service عن طريق بث سجلات الحاوية إلى المحطة الطرفية.
تشغيل تسجيل الحاويات:
az webapp log config --name <app-name> --resource-group msdocs-custom-container-tutorial --docker-container-logging filesystem
قم بتمكين تدفق التسجيل:
az webapp log tail --name <app-name> --resource-group msdocs-custom-container-tutorial
وفي حال عدم رؤية سجلات وحدة التحكم على الفور، فتحقق مجددًا في غضون 30 ثانية.
يمكنك أيضا فحص ملفات السجل من المستعرض في
https://<app-name>.scm.azurewebsites.net/api/logs/docker
.لإيقاف تسجيل التدفق في أي وقت، اكتب
Ctrl+C
.
التاسع. قم بتعديل رمز التطبيق وإعادة النشر
في هذا القسم، يمكنك إجراء تغيير على رمز تطبيق الويب، وإعادة إنشاء الصورة، ثم دفعها إلى سجل الحاوية. ثم يقوم App Service بسحب الصورة المحدثة تلقائيا من التسجيل لتحديث تطبيق الويب قيد التشغيل.
في مجلد docker-django-webapp-linux المحلي، افتح app/templates/app/index.html.
تغيير عنصر HTML الأول لمطابقة التعليمات البرمجية التالية.
<nav class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <a class="navbar-brand" href="#">Azure App Service - Updated Here!</a> </div> </div> </nav>
احفظ تغييراتك.
تغيير إلى مجلد docker-django-webapp-linux وإعادة بناء الصورة:
docker build --tag appsvc-tutorial-custom-image .
تحديث علامة الصورة هذه إلى الأحدث:
docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
استبدل
<registry-name>
باسم سجلك.قم بدفع الصورة إلي السجل:
docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
بمجرد اكتمال دفع الصورة، يقوم خطاف الويب بإعلام App Service عن الدفع، ويحاول App Service سحب الصورة المحدثة لذلك. انتظر بضع دقائق، ثم تحقق من نشر التحديث عن طريق الاستعراض إلى
https://<app-name>.azurewebsites.net
.
X. قم بالاتصال بالحاوية عن طريق استخدام SSH
تمكن SSH من الاتصال الآمن بين حاوية وعميل. لتمكين اتصال SSH إلى الحاوية الخاصة بك، يجب تكوين الصورة المخصصة الخاصة بك لذلك. بمجرد تشغيل الحاوية، يمكنك فتح اتصال SSH.
تكوين الحاوية لـ SSH
يحتوي نموذج التطبيق المستخدم في هذا البرنامج التعليمي بالفعل على التكوين الضروري في Dockerfile، والذي يقوم بتثبيت خادم SSH وتعيين بيانات اعتماد تسجيل الدخول أيضا. هذا القسم إعلامي فقط. للاتصال بالحاوية، تخط إلى القسم التالي.
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
&& apt-get install -y --no-install-recommends dialog \
&& apt-get update \
&& apt-get install -y --no-install-recommends openssh-server \
&& echo "$SSH_PASSWD" | chpasswd
إشعار
لا يسمح هذا التكوين بالاتصالات الخارجية بالحاوية. SSH متاح فقط من خلال موقع Kudu/SCM. تمت مصادقة موقعKudu/SCM باستخدام حساب Azure الخاص بك. root:Docker! لا ينبغي أن تتغير SSH. سيستخدم SCM/KUDU بيانات اعتماد Azure Portal. سيؤدي تغيير هذه القيمة إلى حدوث خطأ عند استخدام SSH.
كما يقوم Dockerfile بنسخ الملف sshd_config إلى المجلد /etc/ssh/ويعرض المنفذ 2222 على الحاوية:
COPY sshd_config /etc/ssh/
# ...
EXPOSE 8000 2222
المنفذ 2222 هو منفذ داخلي يمكن الوصول إليه فقط بواسطة حاويات ضمن bridge network خاصة بشبكة اتصال ظاهرية خاصة.
وأخيرا، يبدأ البرنامج النصي المدرج init.shملقم SSH.
#!/bin/bash
service ssh start
فتح اتصال SSH بالحاوية
استعرض وقم بالدخول إلى
https://<app-name>.scm.azurewebsites.net/webssh/host
حساب Azure الخاصة بك. استبدل<app-name>
باسم تطبيق الويب.بمجرد تسجيل الدخول، تتم استعادة توجيهك إلى صفحة معلومات لتطبيق الويب. حدد SSH في أعلى الصفحة لفتح واجهات الأوامر واستخدام الأوامر.
على سبيل المثال، يمكنك فحص العمليات قيد التشغيل داخله باستخدام
top
الأمر.
الحادي عشر. تنظيف الموارد
قد تتحمل الموارد التي أنشأتها في هذه المقالة تكاليف مستمرة. لتنظيف الموارد، تحتاج إلى حذف مجموعة الموارد التي تحتوي عليها:
az group delete --name msdocs-custom-container-tutorial
الخطوات التالية
ما تعلمته:
- نشر صورة مخصصة إلى تسجيل حاوية خاصة
- نشر الصورة المخصصة لـ App Service
- تحديث التطبيق وإعادة نشره
- الوصول إلى سجلات التشخيص
- قم بالاتصال بالحاوية عن طريق استخدام SSH
- اضغط على الصورة لإظهار Azure Container Registry
- نشر الصورة المخصصة لـ App Service
- تكوين متغيرات البيئة
- سحب الصورة إلى App Service باستخدام هوية مدارة
- الوصول إلى سجلات التشخيص
- تمكين CI/CD من Azure Container Registry إلى App Service
- قم بالاتصال بالحاوية عن طريق استخدام SSH
في البرنامج التعليمي التالي، ستتعلم كيفية تأمين تطبيقك باستخدام مجال وشهادة مخصصين.
أو، يمكنك التحقق من الموارد الأخرى: