ترحيل البرامج المخصصة إلى 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 بالنقر على أدوات>الحصول على أدوات وميزات.
قم بإعداد التطبيق مَحَلِّيّاً
تنزيل العينة
في هذه الخطوة، يمكنك إعداد مشروع .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.
تشغيل التطبيق
افتح الملف المخصص-الخط-الفوز-الحاوية-رئيسي/CustomFontSample.sln في Visual Studio.
اكتب Ctrl+F5 لتشغيل التطبيق دون تصحيح الأخطاء. يتم عرض التطبيق في المتصفح الافتراضي الخاص بك.
نظرا لأن التطبيق يستخدم خطا مثبتا، يتعذر تشغيل التطبيق في وضع الحماية لخدمة التطبيقات. ومع ذلك، يمكنك نشره باستخدام حاوية 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. إنه برنامج نصي بسيط يقوم بتثبيت الخط. يمكنك العثور على إصدار أكثر تعقيدا من البرنامج النصي في Script Center.
ملاحظة
لاختبار حاوية Windows محليا، تأكد من بدء تشغيل Docker على جهازك المحلي.
نشر في Azure Container Registry
يمكن Azure Container Registry تخزين الصور الخاصة بك لنشر حاوية. يمكنك تكوين App Service لاستخدام الصور المستضافة في Azure Container Registry.
فتح معالج النشر
في Solution Explorer، انقر بزر الماوس الأيمن فوق مشروع CustomFontSample وحدد نشر.
قم بإنشاء التسجيل والنشر
في معالج النشر، حدد تسجيل الحاوية>إنشاء نشر سجل حاويات Azure>جديد.
قم بالتسجيل بحساب Azure
في مربع الحوار قم بإنشاء سجل حاويات Azure جديد، وحدد إضافة حساب، وقم بتسجيل الدخول إلى اشتراك Azure. إذا كنت قد سجلت الدخول بالفعل، فحدد الحساب الذي يحتوي على الاشتراك المطلوب من القائمة المنسدلة.
قم بتكوين التسجيل
قم بتكوين سجل حاوية جديدة استنادا إلى القيم المقترحة في الجدول التالي. عند الانتهاء، حدّد «إنشاء».
| الإعداد | القيمة المقترحة | للحصول على مزيدٍ من المعلومات |
|---|---|---|
| بادئة DNS | قم بالاحتفاظ باسم التسجيل الذي تم إنشاؤه أو تغييره إلى اسم فريد آخر. | |
| مجموعة الموارد | حدد جديد، واكتب myResourceGroup، وحدد موافق. | |
| SKU | أساسي | مستويات الأسعار |
| موقع التسجيل | غرب أوروبا |
تم فتح إطار محطة طرفية وتعرض تطور نشر الصورة. انتظر حتى يكتمل النشر.
تسجيل الدخول إلى Azure
سجّل الدخول إلى مدخل Azure على https://portal.azure.com.
أنشئ تطبيق ويب
من القائمة اليسري، حدد إنشاء مورد>>تطبيق الويب للحاويات.
قم بتكوين أساسيات التطبيق
في علامة التبويب أساسيات، قم بتكوين الإعدادات وفقا للجدول التالي، ثم حدد التالي: Docker.
| الإعداد | القيمة المقترحة | للحصول على مزيدٍ من المعلومات |
|---|---|---|
| الاشتراك | تأكد من تحديد الاشتراك الصحيح. | |
| مجموعة الموارد | حدد إنشاء جديد، واكتب myResourceGroup، وحدد موافق. | |
| الاسم | اكتب اسم فريد. | عنوان URL لتطبيق الويب يوجد https://<app-name>.azurewebsites.net ، حيث يوجد اسم التطبيق الخاص <app-name> بك. |
| نشر | حاويات Docker | |
| نظام تشغيل | Windows | |
| المنطقة | غرب أوروبا | |
| خطة Windows | حدد إنشاء جديد، واكتب myAppServicePlan، وحدد موافق. |
يجب أن تبدو علامة تبويب الأساسيات كما يلي:
تكوين حاوية Windows
في علامة التبويب Docker، قم بتكوين حاوية Windows المخصصة كما هو موضح في الجدول التالي، وحدد مراجعة + إنشاء.
| الإعداد | القيمة المقترحة |
|---|---|
| مصدر الصورة | سجل حاوية Azure |
| السجل | حدد التسجيل الذي أنشأته سابقا. |
| صورة | customfontsample |
| علامة | الأحدث |
إنشاء التطبيق بالكامل
حدد إنشاء وانتظر Azure لإنشاء الموارد المطلوبة.
استعرض التطبيق
عند اكتمال عملية Azure، يتم عرض مربع إعلام.
حدد Go to resource.
في صفحة التطبيق، حدد الرابط ضمن عنوان URL.
يتم فتح صفحة مستعرض جديدة إلى الصفحة التالية:
انتظر بضع دقائق وحاول مرة أخرى، حتى تحصل على الصفحة الرئيسية مع الخط الجميل الذي تتوقعه:
تهانينا! لقد قمت بترحيل تطبيق ASP.NET إلى خدمة تطبيقات Azure في حاوية Windows.
انظر سجلات بدء تشغيل الحاوية
قد يستغرق تحميل حاوية Windows بعض الوقت. للاطلاع على التقدم، انتقل إلى عنوان URL التالي عن طريق استبدال <اسم> التطبيق باسم تطبيقك.
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'. إذا كانت هذه الصور لا تلبي احتياجاتك، يمكنك إنشاء ونشر صورة مخصصة.
في هذا البرنامج التعليمي، تتعلم كيفية:
- اضغط على الصورة لإظهار 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. لمزيد من المعلومات، راجع تشغيل سريع لـ Azure Cloud Shell - Bash.
إذا كنت تفضل تشغيل أوامر مرجع 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 ، افتح نافذة طرفية وتحقق من تثبيت عامل الإرث:
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.
ثم افتح نافذة طرفية في المجلد thedocker-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.shSSH وخادم 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 في "عدم وجود مثل هذا الملف أو الدليل"، يحتوي ملف init.sh على نهايات أسطر CR-LF بدلا من نهايات LF المتوقعة. يحدث هذا الخطأ إذا كنت تستخدم git لنسخ مستودع العينة ولكن حذف
--config core.autocrlf=inputالمعلمة. في هذه الحالة، استنسخ المستودع مرة أخرى مع الوسيطة '--config'. قد تشاهد الخطأ أيضا إذا قمت بتحرير init.sh وحفظته مع نهايات CRLF. في هذه الحالة، قم بحفظ الملف مرة أخرى مع نهايات LF فقط.استعرض
http://localhost:8000للتحقق من أن تطبيق الويب والحاوية يعملان بشكل صحيح.
قم بإنشاء مجموعة موارد
في هذا القسم والأقسام التالية، يمكنك إعداد الموارد في Azure التي تدفع إليها الصورة ثم تنشر حاوية إلى Azure App Service. يمكنك البدء بإنشاء مجموعة موارد تريد جمع كافة الموارد فيها.
أنشئ مجموعة موارد باستخدام أمر az group create:
az group create --name myResourceGroup --location westeurope
يمكنك تغيير --location القيمة لتحديد منطقة قريبة منك.
ادفع الصورة لـ Azure Container Registry
في هذا القسم، يمكنك دفع الصورة إلى Azure Container Registry التي من خلالها يمكن لـ App Service نشرها.
تشغيل
az acr createالأمر لإنشاء Azure Container Registry:az acr create --name <registry-name> --resource-group myResourceGroup --sku Basic --admin-enabled trueقم باستبدال
<registry-name>باسم مناسب للسجل الخاص بك. يجب أن يحتوي الاسم على أحرف وأرقام فقط، ويجب أن يكون فريدا عبر Azure بأكمله.تشغيل
az acr showالأمر لاسترداد بيانات الاعتماد الخاصة بالسجل:az acr credential show --resource-group myResourceGroup --name <registry-name>يوفر إخراج JSON من هذا الأمر اثنين من كلمات المرور مع اسم المستخدم الخاص بالتسجيل.
استخدم
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 للنشر من التسجيل.
استخدم
az acr repository listالأمر للتحقق من نجاح الدفع:az acr repository list -n <registry-name>يجب أن يظهر الإخراج اسم الصورة.
قم بتكوين App Service لنشر الصورة من التسجيل
لنشر حاوية في Azure App Service، يمكنك أولا إنشاء تطبيق ويب على App Service، ثم توصيل تطبيق الويب بسجل الحاوية. عند بدء تشغيل تطبيق الويب، تسحب خدمة التطبيقات الصورة تلقائيا من التسجيل.
إنشاء خطة خدمة التطبيقات باستخدام
az appservice plan createالأمر:az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --is-linuxتتوافق خطة خدمة التطبيقات مع الجهاز الافتراضي الذي يستضيف تطبيق الويب. افتراضيا، يستخدم الأمر السابق مستوى تسعير B1 وهو غير مكلف ومجاني للشهر الأول. يمكنك التحكم في الطبقة باستخدام
--skuالمعلمة.إنشاء تطبيق ويب باستخدام
az webpp createالأمر:az webapp create --resource-group myResourceGroup --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 appsettings setلتعيينWEBSITES_PORTمتغير البيئة كما هو متوقع بواسطة رمز التطبيق:az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WEBSITES_PORT=8000استبدل
<app-name>بالاسم الذي استخدمته في الخطوة السابقة.لمزيد من المعلومات حول متغير البيئة هذا، راجع readme في مستودع GitHub للعينة.
تمكين الهوية المدارة المعينة من قبل النظام لتطبيق الويب باستخدام
az webapp identity assignالأمر:az webapp identity assign --resource-group myResourceGroup --name <app-name> --query principalId --output tsvاستبدل
<app-name>بالاسم الذي استخدمته في الخطوة السابقة. إخراج الأمر (تم تصفيته بواسطة--queryوسائط--outputو) هو أساس الخدمة للهوية المعينة التي ستستخدمها قريبا.تتيح لك الهوية المدارة منح أذونات لتطبيق الويب للوصول إلى موارد Azure الأخرى دون الحاجة إلى أي بيانات اعتماد محددة.
استرداد معرف الاشتراك الخاص بك مع
az account showالأمر الذي تحتاجه في الخطوة التالية:az account show --query id --output tsvمنح إذن الهوية المدارة للوصول إلى سجل الحاوية:
az role assignment create --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/<registry-name> --role "AcrPull"استبدل القيم التالية:
<principal-id>مع معرف الخدمة الأساسي منaz webapp identity assignالأمر.<registry-name>مع اسم سجل الحاوية الخاص بك.<subscription-id>مع معرف الاشتراك الذي تم استرداده منaz account showالأمر.
لمزيد من المعلومات حول هذه الأذونات، راجع ما هو عنصر تحكم الوصول المستند إلى دور Azure.
قم بتكوين التطبيق الخاص بك لاستخدام الهوية المدارة لسحب من Azure Container Registry.
az resource update --ids /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/<app-name>/config/web --set properties.acrUseManagedIdentityCreds=Trueاستبدل القيم التالية:
<subscription-id>مع معرف الاشتراك الذي تم استرداده منaz account showالأمر.<app-name>مع اسم تطبيق الويب الخاص بك.
تلميح
إذا كان التطبيق يستخدم هوية مدارة معينة من قبل المستخدم،قم بتعيين خاصية إضافية
AcrUserManagedIdentityIDلتحديد معرف العميل الخاص به:clientId=$(az identity show --resource-group <group-name> --name <identity-name> --query clientId --output tsv) az resource update --ids /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/<app-name>/config/web --set properties.AcrUserManagedIdentityID=$clientId
قم بشر الصور واختبار التطبيق
يمكنك إكمال هذه الخطوات بمجرد دفع الصورة إلى سجل الحاوية ويتم توفير App Service بالكامل.
استخدم
az webapp config container setالأمر لتحديد سجل الحاوية والصورة لنشرها علي تطبيق الويب:az webapp config container set --name <app-name> --resource-group myResourceGroup --docker-custom-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest --docker-registry-server-url https://<registry-name>.azurecr.ioاستبدل
<app-name>اسم تطبيق الويب الخاص بك واستبدله في<registry-name>مكانين باسم السجل الخاص بك.- عند استخدام تسجيل آخر غير Docker Hub (كما يظهر هذا المثال)،
--docker-registry-server-urlيجب تنسيقه كما هوhttps://متبوعا باسم المجال المؤهل بالكامل للتسجيل. - الرسالة، "لم يتم توفير بيانات اعتماد للوصول إلى Azure Container Registry. في محاولة للبحث عن ..." إلى أن Azure يستخدم الهوية المدارة للتطبيق للمصادقة باستخدام سجل الحاوية بدلا من طلب اسم مستخدم وكلمة مرور.
- إذا واجهت الخطأ، "AttributeError: كائن 'NoneType' ليس له سمة 'محجوز'"، فتأكد من صحة كائنك
<app-name>.
تلميح
يمكنك استرداد إعدادات الحاوية في تطبيق الويب في أي وقت باستخدام الأمر
az webapp config container show --name <app-name> --resource-group myResourceGroup. يتم تحديد الصورة في الخاصيةDOCKER_CUSTOM_IMAGE_NAME. عند نشر تطبيق الويب من خلال قوالب Azure DevOps أو Azure Resource Manager، يمكن أن تظهر الصورة أيضا في خاصية باسمLinuxFxVersion. كلا الخاصيتان يخدمان نفس الغرض. إذا كان كلاهما موجودا في تكوين تطبيق الويب،LinuxFxVersionيأخذ الأسبقية.- عند استخدام تسجيل آخر غير Docker Hub (كما يظهر هذا المثال)،
az webapp config container setعند اكتمال الأمر، يجب أن يكون تطبيق الويب قيد التشغيل في الحاوية الموجودة في App Service.لاختبار التطبيق، استعرض للوصول إلى
https://<app-name>.azurewebsites.net، واستبدله<app-name>باسم تطبيق الويب الخاص بك. عند الوصول الأول، قد يستغرق التطبيق بعض الوقت للرد لأن App Service يجب أن تسحب الصورة بأكملها من السجل. إذا انتهت مهلة المتصفح، قم فقط بتحديث الصفحة. بمجرد سحب الصورة الأولية، سيتم تشغيل الاختبارات المتتابعة بشكل أسرع بكثير.
الوصول إلى سجلات التشخيص
أثناء انتظارك ل App Service لسحب الصورة ، من المفيد معرفة ما تفعله App Service بالضبط عن طريق بث سجلات الحاوية إلى جهازك الطرفي.
تشغيل تسجيل الحاويات:
az webapp log config --name <app-name> --resource-group myResourceGroup --docker-container-logging filesystemقم بتمكين تدفق التسجيل:
az webapp log tail --name <app-name> --resource-group myResourceGroupإذا لم تشاهد سجلات وحدة التحكم على الفور، فتحقق مرة أخرى في غضون 30 ثانية.
يمكنك أيضا فحص ملفات السجل من المستعرض في
https://<app-name>.scm.azurewebsites.net/api/logs/docker.لإيقاف تدفق السجل في أي وقت، اكتب
Ctrl+C.
قم بتكوين مسار التوزيع المستمر
يمكن لتطبيق App Service الخاص بك الآن سحب صورة الحاوية بشكل آمن من سجل الحاويات الخاص بك. ومع ذلك، فإنه لا يعرف متى يتم تحديث هذه الصورة في التسجيل الخاص بك. في كل مرة تدفع فيها الصورة المحدثة إلى التسجيل، يجب أن تقوم بتشغيل سحب صورة يدويا عن طريق إعادة تشغيل تطبيق App Service. في هذه الخطوة، يمكنك تمكين CI/CD، بحيث يتم إعلام خدمة التطبيق بصورة جديدة وتشغيل السحب تلقائيا.
تمكين CI/CD في App Service.
az webapp deployment container config --enable-cd true --name <app-name> --resource-group myResourceGroup --query CI_CD_URL --output tsvCI_CD_URLهو عنوان URL الذي تنشئه لك App Service. يجب أن يستخدم السجل عنوان URL هذا لإعلام App Service بحدوث دفعة صورة. إنها لا تخلق في الواقع webhook لك.إنشاء webhook في سجل الحاويات الخاص بك باستخدام CI_CD_URL التي حصلت عليها من الخطوة الأخيرة.
az acr webhook create --name appserviceCD --registry <registry-name> --uri '<ci-cd-url>' --actions push --scope appsvc-tutorial-custom-image:latestلاختبار ما إذا تم تكوين webhook بشكل صحيح، ping webhook ومعرفة ما إذا كان يمكنك الحصول على استجابة 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 يؤدي إلى إعادة تشغيل التطبيق. نظرا لأنك لم تقم بإجراء أي تحديثات على الصورة ، فلا يوجد شيء جديد يمكن أن تسحبه خدمة التطبيقات.
قم بتعديل رمز التطبيق وإعادة النشر
في هذا القسم، يمكنك إجراء تغيير على رمز تطبيق الويب، وإعادة إنشاء الصورة، ثم دفعها إلى سجل الحاوية. ثم يقوم 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عند اكتمال دفع الصورة، يقوم خطاف الويب بإعلام خدمة التطبيقات بالدفعة، وتحاول خدمة التطبيقات سحب الصورة المحدثة. انتظر بضع دقائق، ثم تحقق من نشر التحديث عن طريق الاستعراض إلى
https://<app-name>.azurewebsites.net.
قم بالاتصال بالحاوية عن طريق استخدام 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 myResourceGroup
الخطوات التالية
ما تعلمته:
- نشر صورة مخصصة إلى تسجيل حاوية خاصة
- نشر الصورة المخصصة لـ App Service
- تحديث التطبيق وإعادة نشره
- الوصول إلى السجلات التشخيصية
- قم بالاتصال بالحاوية عن طريق استخدام SSH
- اضغط على الصورة لإظهار Azure Container Registry
- نشر الصورة المخصصة لـ App Service
- تكوين متغيرات البيئة
- سحب الصورة إلى App Service باستخدام هوية مدارة
- الوصول إلى السجلات التشخيصية
- تمكين CI/CD من Azure Container Registry إلى App Service
- قم بالاتصال بالحاوية عن طريق استخدام SSH
في البرنامج التعليمي التالي، يمكنك التعرف على كيفية تعيين اسم DNS مخصص إلى التطبيق الخاص بك.
أو، تحقق من الموارد الأخرى:
