قم لتكوين حاوية مخصصة لخدمة تطبيقات Azure

توضح هذه المقالة كيفية تكوين حاوية مخصصة للتشغيل على Azure App Service.

يوفر هذا الدليل المفاهيم والإرشادات الرئيسية لتعبئة تطبيقات Windows في حاويات في App Service. يجب على مستخدمي Azure App Service الجدد اتباع التشغيل السريع للحاوية المخصصة والبرنامج التعليمي أولا.

يوفر هذا الدليل المفاهيم والإرشادات الرئيسية لتعبئة تطبيقات Linux في حاويات في App Service. إذا كانت جديدة على Azure App Service، فاتبع التشغيل السريع للحاوية المخصصة والبرنامج التعليمي أولا. هناك أيضًا التشغيل السريع للتطبيق متعدد الحاويات والبرنامج التعليمي. لحاويات sidecar (معاينة)، راجع البرنامج التعليمي: تكوين حاوية sidecar للحاوية المخصصة في Azure App Service (معاينة).

إشعار

لم يعد كيان الخدمة مدعوما لمصادقة سحب صورة حاوية Windows. الطريقة الموصى بها هي استخدام الهوية المدارة لكل من حاويات Windows وLinux

الصور الأصلية المدعومة

بالنسبة إلى صورة Windows المخصصة، يجب عليك اختيار الصورة الأصلية الصحيحة (الصورة الأساسية) لإطار العمل الذي تريده:

يستغرق تنزيل صورة أصلية بعض الوقت أثناء بدء تشغيل التطبيق. ومع ذلك، يمكنك تقليل وقت بدء التشغيل باستخدام إحدى الصور الأصلية التالية التي سبق تخزينها مؤقتاً في Azure App Service:

تغيير صورة Docker لحاوية مخصصة

لتغيير حاوية مخصصة حالية من صورة Docker الحالية إلى صورة جديدة، استخدم الأمر التالي:

az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name <docker-hub-repo>/<image>

استخدام صورة من سجل خاص

لاستخدام صورة من سجل خاص، مثل Azure Container Registry، شغّل الأمر التالي:

az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name <image-name> --docker-registry-server-url <private-repo-url> --docker-registry-server-user <username> --docker-registry-server-password <password>

بالنسبة إلى اسم المستخدم> وكلمة <المرور>، قم بتوفير بيانات اعتماد تسجيل الدخول لحساب السجل الخاص بك.<

استخدام الهوية المدارة لسحب الصورة من Azure Container Registry

استخدم الخطوات التالية لتكوين تطبيق الويب الخاص بك للسحب من Azure Container Registry (ACR) باستخدام الهوية المدارة. تستخدم الخطوات الهوية المدارة المعينة من قبل النظام، ولكن يمكنك استخدام الهوية المدارة المعينة من قبل المستخدم أيضا.

  1. تمكين الهوية المدارة المعينة من قبل النظام لتطبيق الويب باستخدام az webapp identity assign الأمر:

    az webapp identity assign --resource-group <group-name> --name <app-name> --query principalId --output tsv
    

    استبدل <app-name> بالاسم الذي استخدمته في الخطوة السابقة. إخراج الأمر (تمت تصفيته بواسطة --query الوسيطتين و --output ) هو معرف الخدمة الأساسي للهوية المعينة.

  2. احصل على معرّف المورد لـ Azure Container Registry الخاص بك:

    az acr show --resource-group <group-name> --name <registry-name> --query id --output tsv
    

    استبدل <registry-name> باسم سجلك. إخراج الأمر (تمت تصفيته بواسطة --query الوسيطتين و --output ) هو معرف المورد الخاص ب Azure Container Registry.

  3. منح إذن الهوية المدارة للوصول إلى سجل الحاوية:

    az role assignment create --assignee <principal-id> --scope <registry-resource-id> --role "AcrPull"
    

    استبدل القيم التالية:

    • <principal-id> مع معرف الخدمة الأساسي من az webapp identity assign الأمر
    • <registry-resource-id>مع معرف سجل الحاوية من الأمر az acr show

    لمزيد من المعلومات حول هذه الأذونات، راجع ما هو عنصر تحكم الوصول المستند إلى دور Azure.

  4. قم بتكوين التطبيق الخاص بك لاستخدام الهوية المدارة لسحب من Azure Container Registry.

    az webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUseManagedIdentityCreds": true}'
    

    استبدل القيم التالية:

    • <app-name> مع اسم تطبيق الويب الخاص بك.

    تلميح

    إذا كنت تستخدم وحدة تحكم PowerShell لتشغيل الأوامر، تحتاج إلى إلغاء السلاسل في الوسيطة --generic-configurations في هذه الخطوة والخطوة التالية. على سبيل المثال: --generic-configurations '{\"acrUseManagedIdentityCreds\": true'

  5. (اختياري) إذا كان تطبيقك يستخدم هوية مدارة معينة من قبل المستخدم، فتأكد من تكوين الهوية على تطبيق الويب ثم قم بتعيين الخاصية acrUserManagedIdentityID لتحديد معرف العميل الخاص بها:

    az identity show --resource-group <group-name> --name <identity-name> --query clientId --output tsv
    

    استبدل <identity-name> الهوية المدارة المعينة من قبل المستخدم واستخدم الإخراج <client-id> لتكوين معرف الهوية المدارة المعين من قبل المستخدم.

    az  webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUserManagedIdentityID": "<client-id>"}'
    

لقد تم تعيينك جميعا، ويستخدم تطبيق الويب الآن هوية مدارة للسحب من Azure Container Registry.

استخدام صورة من سجل محمي بالشبكة

للاتصال والسحب من سجل داخل شبكة ظاهرية أو محلية، يجب أن يتكامل تطبيقك مع شبكة ظاهرية (VNET). مطلوب أيضا تكامل VNET ل Azure Container Registry مع نقطة نهاية خاصة. عند تكوين دقة الشبكة وDNS، يمكنك تمكين توجيه سحب الصورة عبر الشبكة الظاهرية vnetImagePullEnabled عن طريق تكوين إعداد الموقع:

az resource update --resource-group <group-name> --name <app-name> --resource-type "Microsoft.Web/sites" --set properties.vnetImagePullEnabled [true|false]

لا أرى الحاوية المحدثة

إذا قمت بتغيير إعدادات حاوية Docker للإشارة إلى حاوية جديدة، فقد يستغرق الأمر بضع دقائق قبل أن يخدم التطبيق طلبات HTTP من الحاوية الجديدة. أثناء سحب الحاوية الجديدة وبدء تشغيلها، تستمر App Service في تقديم الطلبات من الحاوية القديمة. فقط عند بدء تشغيل الحاوية الجديدة واستعدادها لتلقي الطلبات، تبدأ خدمة التطبيقات في إرسال الطلبات إليها.

كيفية تخزين صور الحاوية

في المرة الأولى التي تشغّل فيها صورة Docker مخصصة في App Service، تعمل App Service docker pull وتسحب جميع طبقات الصور. يتم تخزين هذه الطبقات على القرص، كما لو كنت تستخدم Docker محلياً. في كل مرة يتم فيها إعادة تشغيل التطبيق، تقوم App Service بـ docker pull، ولكنها تسحب الطبقات التي تغيرت فقط. إذا لم تكن هناك تغييرات، تستخدم App Service الطبقات الموجودة على القرص المحلي.

إذا غير التطبيق مثيلات الحساب لأي سبب من الأسباب، مثل زيادة مستويات التسعير وخفضها، يجب أن تسحب App Service جميع الطبقات مرة أخرى. وينطبق الشيء نفسه إذا قمت بتوسيع النطاق لإضافة المزيد من المثيلات. هناك أيضا حالات نادرة قد تتغير فيها مثيلات التطبيق دون عملية تغيير الحجم.

تكوين رقم المنفذ

بشكل افتراضي، تفترض App Service أن الحاوية المخصصة تستمع إلى المنفذ 80. إذا كانت الحاوية تنصت إلى منفذ مختلف، اضبط إعداد التطبيق WEBSITES_PORT في تطبيق App Service. يمكنك ضبطه عبر Cloud Shell. في Bash:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_PORT=8000

في PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_PORT"="8000"}

تسمح App Service حالياً لحاويتك بكشف منفذ واحد فقط لطلبات HTTP.

تكوين متغيرات البيئة

قد تستخدم الحاوية المخصصة متغيرات البيئة التي تحتاج إلى توفير خارجي. يمكنك تمريرها عبر Cloud Shell. في Bash:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings DB_HOST="myownserver.mysql.database.azure.com"

في PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"DB_HOST"="myownserver.mysql.database.azure.com"}

عند تشغيل تطبيقك، يتم إدخال إعدادات تطبيق App Service في العملية كمتغيرات بيئة تلقائياً. يمكنك التحقق من متغيرات بيئة الحاوية باستخدام عنوان URL https://<app-name>.scm.azurewebsites.net/Env.

إذا كان تطبيقك يستخدم صوراً من سجل خاص أو من Docker Hub، يتم حفظ بيانات الاعتماد للوصول إلى المستودع في متغيرات البيئة: DOCKER_REGISTRY_SERVER_URL وDOCKER_REGISTRY_SERVER_USERNAME وDOCKER_REGISTRY_SERVER_PASSWORD. بسبب المخاطر الأمنية، لا يتم عرض أي من أسماء المتغيرات المحجوزة هذه للتطبيق.

بالنسبة للحاويات المستندة إلى IIS أو .NET Framework (الإصدار 4.0 أو الأحدث)، يتم إدخالها في System.ConfigurationManager كإعدادات تطبيق .NET وسلاسل الاتصال تلقائياً بواسطة App Service. بالنسبة لجميع اللغات أو إطار العمل الأخرى، يتم توفيرها كمتغيرات بيئة للعملية، مع إحدى البادئات المقابلة التالية:

  • APPSETTING_
  • SQLCONTR_
  • MYSQLCONTR_
  • SQLAZURECOSTR_
  • POSTGRESQLCONTR_
  • CUSTOMCONNSTR_

يعمل هذا الأسلوب لكل من تطبيقات الحاوية الواحدة أو التطبيقات متعددة الحاويات، حيث يتم تحديد متغيرات البيئة في ملف docker-compose.yml.

استخدام التخزين المشترك المستمر

يمكنك استخدام الدليل C:\home في نظام ملفات الحاوية المخصصة لاستمرار الملفات عبر عمليات إعادة التشغيل ومشاركتها عبر المثيلات. يتم توفير الدليل C:\home لتمكين الحاوية المخصصة من الوصول إلى التخزين المستمر.

عند تعطيل التخزين المستمر، لا تستمر عمليات الكتابة إلى C:\home الدليل عبر عمليات إعادة تشغيل التطبيق أو عبر مثيلات متعددة. عند تمكين التخزين المستمر، تستمر جميع عمليات الكتابة إلى الدليل C:\home ويمكن الوصول إليها من قبل جميع مثيلات تطبيق موسع. بالإضافة إلى ذلك، تتم الكتابة فوق أي محتويات داخل دليل C:\home الحاوية بواسطة أي ملفات حالية بالفعل على التخزين المستمر عند بدء تشغيل الحاوية.

الاستثناء الوحيد هو الدليل C:\home\LogFiles، الذي يستخدم لتخزين الحاوية وسجلات التطبيقات. يستمر هذا المجلد دائما عند إعادة تشغيل التطبيق إذا تم تمكين تسجيل التطبيق باستخدام خيار نظام الملفات، بشكل مستقل عن التخزين المستمر الذي يتم تمكينه أو تعطيله. بمعنى آخر، لا يؤثر تمكين التخزين المستمر أو تعطيله على سلوك تسجيل التطبيق.

بشكل افتراضي، يتم تعطيل التخزين المستمر على حاويات Windows المخصصة. لتمكينه، اضبط WEBSITES_ENABLE_APP_SERVICE_STORAGE قيمة إعداد التطبيق على true عبر Cloud Shell. في Bash:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=true

في PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=true}

يمكنك استخدام الدليل \home في نظام ملفات الحاوية المخصصة لاستمرار الملفات عبر عمليات إعادة التشغيل ومشاركتها عبر المثيلات. يتم توفير الدليل /home لتمكين الحاوية المخصصة من الوصول إلى التخزين المستمر. يساهم حفظ البيانات داخل /home الحصة النسبية لمساحة التخزين المضمنة في خطة App Service.

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

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

يوصى بكتابة البيانات إلى /home أو مسار تخزين Azure المحمل. البيانات المكتوبة خارج هذه المسارات غير ثابتة أثناء إعادة التشغيل ويتم حفظها في مساحة قرص المضيف المدارة بواسطة النظام الأساسي منفصلة عن الحصة النسبية لتخزين ملفات خطط خدمة التطبيقات.

بشكل افتراضي، يتم تمكين التخزين المستمر على حاويات Linux المخصصة. لتعطيله، اضبط قيمة WEBSITES_ENABLE_APP_SERVICE_STORAGEإعداد التطبيق علىfalse عبر Cloud Shell. في Bash:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=false

في PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=false}

إشعار

يمكنك أيضاً تكوين تخزينك المستمر.

الكشف عن جلسة عمل HTTPS

تنهي App Service TLS/SSL في الأطراف الأمامية. وهذا يعني أن طلبات TLS/SSL لا تصل أبداً إلى تطبيقك. لا تحتاج إليه، ولا يجب عليك تنفيذ أي دعم لـ TLS/SSL في تطبيقك.

توجد الأطراف الأمامية داخل مراكز بيانات Azure. إذا كنت تستخدم TLS/SSL مع تطبيقك، يتم دائما تشفير نسبة استخدام الشبكة عبر الإنترنت بأمان.

تخصيص إدخال مفتاح جهاز ASP.NET

أثناء بدء الحاوية، يتم إدخال المفاتيح التي تم إنشاؤها تلقائياً في الحاوية كمفاتيح الجهاز لروتين التشفير ASP.NET. يمكنك العثور على هذه المفاتيح في حاويتك عن طريق البحث عن متغيرات البيئة التالية: MACHINEKEY_Decryption، MACHINEKEY_DecryptionKey، MACHINEKEY_ValidationKey، MACHINEKEY_Validation.

قد تقوم المفاتيح الجديدة في كل إعادة تشغيل بإعادة تعيين ASP.NET نماذج المصادقة وحالة العرض، إذا كان تطبيقك يعتمد عليها. لمنع إعادة إنشاء المفاتيح تلقائياً، اضبطها يدوياً كإعدادات تطبيق App Service.

الاتصال بالحاوية

يمكنك الاتصال بحاوية Windows مباشرة لمهام التشخيص عن طريق التنقل إلى https://<app-name>.scm.azurewebsites.net/ خيار SSH واختياره. يتم إنشاء جلسة SSH مباشرة مع الحاوية الخاصة بك حيث يمكنك تشغيل الأوامر داخل الحاوية الخاصة بك.

  • يعمل بشكلٍ منفصل عن المستعرض الرسم بياني الوارد أعلاه، والذي يظهر فقط الملفات في التخزين المشترك الخاص بك.
  • في تطبيق موسع، يتم توصيل جلسة SSH بأحد مثيلات الحاوية. يمكنك تحديد مثيل مختلف من القائمة المنسدلة المثيل في قائمة Kudu العلوية.
  • لا يستمر أي تغيير تجريه على الحاوية من داخل جلسة SSH عند إعادة تشغيل التطبيق (باستثناء التغييرات في التخزين المشترك)، لأنه ليس جزءا من صورة Docker. لاستمرار التغييرات، مثل إعدادات التسجيل وتثبيت البرامج، اجعلها جزءاً من Dockerfile.

الوصول إلى سجلات التشخيص

تسجل App Service الإجراءات التي يقوم بها مضيف Docker والأنشطة من داخل الحاوية. يتم شحن السجلات من مضيف Docker (سجلات النظام الأساسي) بشكلٍ افتراضي، ولكن يجب تمكين سجلات التطبيق أو سجلات خادم الويب من داخل الحاوية يدوياً. لمزيد من المعلومات، راجع تمكين تسجيل التطبيق وتمكين تسجيل خادم الويب.

هناك عدة طرق للوصول إلى سجلات Docker:

في مدخل Microsoft Azure

يتم عرض سجلات Docker في المدخل، في صفحة إعدادات الحاوية لتطبيقك. يتم اقتطاع السجلات، ولكن يمكنك تنزيل جميع السجلات التي تحدد تنزيل.

من Kudu

انتقل إلى https://<app-name>.scm.azurewebsites.net/DebugConsole مجلد LogFiles وحدده لمشاهدة ملفات السجل الفردية. لتنزيل دليل LogFiles بأكمله، حدد أيقونة "Download" إلى يسار اسم الدليل. يمكنك أيضاً الوصول إلى هذا المجلد باستخدام عميل FTP.

في محطة SSH الطرفية، لا يمكنك الوصول إلى C:\home\LogFiles المجلد بشكل افتراضي بسبب عدم تمكين التخزين المشترك المستمر. لتمكين هذا السلوك في وحدة تحكم terminal، عليك تمكين التخزين المشترك المستمر.

إذا حاولت تنزيل سجل Docker قيد الاستخدام حاليا باستخدام عميل FTP، فقد تتلقى خطأ بسبب تأمين الملف.

باستخدام واجهة برمجة تطبيقات Kudu

انتقل مباشرةً إلى https://<app-name>.scm.azurewebsites.net/api/logs/docker لمشاهدة بيانات التعريف لسجلات Docker. قد ترى أكثر من ملف سجل واحد مدرجا، وتتيح لك الخاصية href تنزيل ملف السجل مباشرة.

لتنزيل جميع السجلات معاً في ملف ZIP واحد، عليك الوصول إلى https://<app-name>.scm.azurewebsites.net/api/logs/docker/zip.

تخصيص ذاكرة الحاوية

بشكل افتراضي، تحتوي جميع حاويات Windows المنشورة في Azure App Service على حد ذاكرة تم تكوينه. يسرد الجدول التالي الإعدادات الافتراضية لكل App Service Plan SKU.

SKU خطة App Service حد الذاكرة الافتراضي لكل تطبيق بالميغابايت
P1v3 1024
P1Mv3 1024
P2v3 1536
P2Mv3 1536
P3v3 2048
P3Mv3 2048
P4Mv3 2560
P5Mv3 3072

يمكنك تغيير هذه القيمة من خلال توفير WEBSITE_MEMORY_LIMIT_MB إعداد التطبيق عبر Cloud Shell. في Bash:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_MEMORY_LIMIT_MB=2000

في PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_MEMORY_LIMIT_MB"=2000}

يتم تعريف القيمة بالميغابايت ويجب أن تكون أقل ومساوية لإجمالي الذاكرة الفعلية للمضيف. على سبيل المثال، في خطة App Service مع RAM بسعة 8 غيغابايت، يجب ألا يتجاوز الإجمالي التراكمي WEBSITE_MEMORY_LIMIT_MB لجميع التطبيقات 8 غيغابايت. يمكن العثور على معلومات حول مقدار الذاكرة المتوفرة لكل طبقة تسعير في أسعار App Service، في قسم خطة خدمة Premium v3.

تخصيص عدد الذاكرات الأساسية للحساب

بشكل افتراضي، يتم تشغيل حاوية Windows بجميع النوى المتاحة لطبقة التسعير التي اخترتها. قد تحتاج إلى تقليل عدد الذاكرات الأساسية التي تستخدمها فتحة التقسيم المرحلي، على سبيل المثال. لتقليل عدد الذاكرات الأساسية المستخدَمة من قبل الحاوية، اضبط إعداد التطبيق WEBSITE_CPU_CORES_LIMIT على العدد المفضل من الذاكرات الأساسية. يمكنك ضبطه عبر Cloud Shell. في Bash:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --slot staging --settings WEBSITE_CPU_CORES_LIMIT=1

في PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_CPU_CORES_LIMIT"=1}

إشعار

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

تحقق من الرقم المعدل عن طريق فتح جلسة SSH من المدخل أو عبر مدخل Kudu (https://<app-name>.scm.azurewebsites.net/webssh/host) والكتابة في الأوامر التالية باستخدام PowerShell. كل أمر يخرج رقم.

Get-ComputerInfo | ft CsNumberOfLogicalProcessors # Total number of enabled logical processors. Disabled processors are excluded.
Get-ComputerInfo | ft CsNumberOfProcessors # Number of physical processors.

قد تكون المعالجات متعددة النوى أو معالجات تشعبية. يمكن العثور على معلومات حول مقدار الذاكرة المتوفرة لكل طبقة تسعير في أسعار App Service، في قسم خطة خدمة Premium v3.

تخصيص سلوك اختبار اتصال السلامة

تعتبر App Service أن الحاوية قد بدأت بنجاح عند بدء تشغيل الحاوية والاستجابة إلى اختبار الاتصال HTTP. يحتوي طلب اختبار الاتصال للسلامة على العنوان User-Agent= "App Service Hyper-V Container Availability Check". إذا بدأت الحاوية ولكنها لا تستجيب ل ping بعد فترة معينة من الوقت، فإن App Service تسجل حدثا في سجل Docker، قائلة إن الحاوية لم تبدأ.

إذا كان تطبيقك كثيف الموارد، فقد لا تستجيب الحاوية إلى اختبار اتصال HTTP في الوقت المناسب. للتحكم في الإجراءات عند فشل عمليات اختبار اتصال HTTP، اضبط إعداد التطبيق CONTAINER_AVAILABILITY_CHECK_MODE. يمكنك ضبطه عبر Cloud Shell. في Bash:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings CONTAINER_AVAILABILITY_CHECK_MODE="ReportOnly"

في PowerShell:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"CONTAINER_AVAILABILITY_CHECK_MODE"="ReportOnly"}

يعرض الجدول التالي القيم المحتملة:

القيمة‬ الأوصاف
اصلاح إعادة تشغيل الحاوية بعد ثلاث عمليات تحقق متتالية من التوفر
ReportOnly القيمة الافتراضية. لا تعيد تشغيل الحاوية ولكن تبلغ في سجلات Docker للحاوية بعد ثلاثة فحوصات توفر متتالية.
قباله لا تتحقق من التوفر.

دعم حسابات الخدمة المُدارة للمجموعة

حسابات الخدمة المدارة للمجموعة (gMSAs) غير مدعومة حالياً في حاويات Windows في App Service.

تمكين SSH

يُستخدم Secure Shell (SSH)بشكل شائع لتنفيذ الأوامر الإدارية عن بُعد من محطة خط الأوامر. لتمكين ميزة وحدة تحكم SSH لمدخل Azure مع حاويات مخصصة، يلزم اتباع الخطوات التالية:

  1. إنشاء ملف قياسي sshd_config مع محتويات المثال التالي ووضعه على دليل جذر مشروع التطبيق:

    Port 			2222
    ListenAddress 		0.0.0.0
    LoginGraceTime 		180
    X11Forwarding 		yes
    Ciphers aes128-cbc,3des-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr
    MACs hmac-sha1,hmac-sha1-96
    StrictModes 		yes
    SyslogFacility 		DAEMON
    PasswordAuthentication 	yes
    PermitEmptyPasswords 	no
    PermitRootLogin 	yes
    Subsystem sftp internal-sftp
    

    إشعار

    يقوم هذا الملف بتكوين OpenSSH ويجب أن يتضمن العناصر التالية للامتثال لميزة SSH لمدخل Microsoft Azure:

    • Port الضبط على 2222.
    • Ciphers يتضمن عنصراً واحداً على الأقل في هذه القائمة: aes128-cbc,3des-cbc,aes256-cbc.
    • MACs يتضمن عنصراً واحداً على الأقل في هذه القائمة: hmac-sha1,hmac-sha1-96.
  2. إنشاء برنامج نصي لنقطة الإدخال بالاسم entrypoint.sh (أو تغيير أي ملف نقطة إدخال موجود) وإضافة الأمر لبدء خدمة SSH، جنبا إلى جنب مع أمر بدء تشغيل التطبيق. يوضح المثال التالي بدء تشغيل تطبيق Python. استبدل الأمر الأخير وفقا للغة/مكدس المشروع:

    #!/bin/sh
    set -e
    service ssh start
    exec gunicorn -w 4 -b 0.0.0.0:8000 app:app
    
  3. أضف إلى Dockerfile الإرشادات التالية وفقا لتوزيع الصورة الأساسية. تنسخ هذه الإرشادات الملفات الجديدة، وتثبيت خادم OpenSSH، وتعيين الأذونات المناسبة وتكوين نقطة الإدخال المخصصة، وعرض المنافذ المطلوبة من قبل التطبيق وخادم SSH، على التوالي:

    COPY entrypoint.sh ./
    
    # Start and enable SSH
    RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get install -y --no-install-recommends openssh-server \
        && echo "root:Docker!" | chpasswd \
        && chmod u+x ./entrypoint.sh
    COPY sshd_config /etc/ssh/
    
    EXPOSE 8000 2222
    
    ENTRYPOINT [ "./entrypoint.sh" ] 
    

    إشعار

    يجب أن تكون كلمة مرور الجذر تماما Docker! كما تستخدمها App Service للسماح لك بالوصول إلى جلسة SSH مع الحاوية. لا يسمح هذا التكوين بالاتصالات الخارجية بالحاوية. لا يمكن الوصول إلى المنفذ 2222 من الحاوية إلا داخل شبكة الجسر لشبكة ظاهرية خاصة ولا يمكن للمهاجم الوصول إليه على الإنترنت.

  4. أعد إنشاء صورة Docker وادفعها إلى السجل، ثم اختبر ميزة Web App SSH على مدخل Microsoft Azure.

تتوفر المزيد من معلومات استكشاف الأخطاء وإصلاحها في مدونة Azure App Service: تمكين SSH على Linux Web App للحاويات

الوصول إلى سجلات التشخيص

يمكنك الوصول إلى سجلات وحدة التحكم المنشأة من داخل الحاوية.

أولًا، قم بتشغيل تسجيل الحاويات عن طريق تشغيل الأمر التالي:

az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem

استبدل <app-name> و<resource-group-name> بالأسماء المناسبة لتطبيق الويب الخاص بك.

بمجرد تشغيل تسجيل الحاويات، قم بتشغيل الأمر التالي لمشاهدة تدفق السجل:

az webapp log tail --name <app-name> --resource-group <resource-group-name>

وفي حال عدم رؤية سجلات وحدة التحكم على الفور، فتحقق مجددًا في غضون 30 ثانية.

لإيقاف دفق السجل في أي وقت، اكتب Ctrl+C.

يمكنك أيضًا فحص ملفات السجل من المتصفح الموجود في https://<app-name>.scm.azurewebsites.net/api/logs/docker.

تكوين التطبيقات متعددة الحاويات

استخدام التخزين المستمر في Docker Compose

تحتاج التطبيقات متعددة الحاويات مثل WordPress إلى تخزين مستمر للعمل بشكلٍ صحيح. لتمكينه، يجب أن يشير تكوين Docker Compose إلى موقع تخزين خارج حاويتك. لا تستمر مواقع التخزين داخل الحاوية في التغييرات بعد إعادة تشغيل التطبيق.

تمكين التخزين المستمر عن طريق تعيين WEBSITES_ENABLE_APP_SERVICE_STORAGE إعداد التطبيق، باستخدام الأمر az webapp config appsettings set في Cloud Shell.

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE

في ملف docker-compose.yml، عيّن الخيار volumes على ${WEBAPP_STORAGE_HOME}.

WEBAPP_STORAGE_HOMEهو متغير بيئة في خدمة التطبيق تم تعيينه للتخزين الدائم لتطبيقك. على سبيل المثال:

wordpress:
  image: <image name:tag>
  volumes:
  - "${WEBAPP_STORAGE_HOME}/site/wwwroot:/var/www/html"
  - "${WEBAPP_STORAGE_HOME}/phpmyadmin:/var/www/phpmyadmin"
  - "${WEBAPP_STORAGE_HOME}/LogFiles:/var/log"

قيود المعاينة

الحاويات المتعددة حالياً في الإصدار الأولي. ميزات النظام الأساسي ل App Service التالية غير مدعومة:

  • المصادقة / التخويل
  • الهويات المُدارة
  • CORS
  • تكامل الشبكة الظاهرية غير مدعوم لسيناريوهات Docker Compose
  • يبلغ حد Docker Compose في Azure App Services حالياً 4000 حرفاً في الوقت الحالي.

خيارات Docker Compose

تظهر القوائم التالية خيارات تكوين Docker Compose المدعومة وغير المدعومة:

الخيارات المدعومة

خيارات غير معتمدة

  • إنشاء (غير مسموح به)
  • depends_on (تم تجاهله)
  • الشبكات (تم تجاهلها)
  • البيانات السرية (تم تجاهلها)
  • منافذ أخرى غير 80 و8080 (تم تجاهلها)
  • متغيرات البيئة الافتراضية مثل $variable and ${variable} على عكس في docker

قيود بناء الجملة

  • يجب أن يكون "الإصدار x.x" دائماً عبارة YAML الأولى في الملف
  • يجب أن يستخدم مقطع المنافذ الأرقام المقتبسة
  • يجب اقتباس مقطع وحدة تخزين الصورة > ولا يمكن أن يكون لديه تعريفات الأذونات
  • يجب ألا يحتوي مقطع وحدات التخزين على قوس متعرج فارغ بعد اسم وحدة التخزين

إشعار

يتم تجاهل أي خيارات أخرى غير مدعاة بشكلٍ صريح في المعاينة العامة.

robots933456 في السجلات

قد تشاهد الرسالة التالية في سجلات الحاوية:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

يمكنك تجاهل هذه الرسالة بأمان. /robots933456.txt هو مسار عنوان URL وهمي يستخدم "خدمة التطبيقات" للتحقق من إمكانية تقديم الحاوية "طلبات". يُشير رد 404 ببساطة إلى أن المسار غير موجود، ولكنه يتيح لـ"خدمة التطبيقات" معرفة أن الحاوية سليمة وجاهزة للاستجابة للطلبات.

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

أو، راجع المزيد من الموارد: