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

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

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

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

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

بالنسبة إلى صورة 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، قم بتشغيل الأمر التالي:

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

اتبع الخطوات التالية لتكوين تطبيق الويب الخاص بك للسحب من 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 الخاص بك:

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

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

  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.

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

للاتصال والسحب من سجل داخل شبكة افتراضية أو محلي، سيحتاج تطبيقك إلى الاتصال بشبكة افتراضية باستخدام ميزة تكامل VNet. هذا هو أيضا حاجة ل Azure حاوية التسجيل مع نقطة نهاية خاصة. عند تكوين الشبكة ودقة DNS، يمكنك تمكين توجيه سحب الصورة عبر VNet عن طريق تعيين إعداد WEBSITE_PULL_IMAGE_OVER_VNET=trueالتطبيق:

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

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

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

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

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

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

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

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

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

في باور شيل:

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

تسمح خدمة التطبيق حاليا للحاوية الخاصة بك بعرض منفذ واحد فقط لطلبات HTTP.

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

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

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

في باور شيل:

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_PASSWORDفي متغيرات البيئة: DOCKER_REGISTRY_SERVER_URLو DOCKER_REGISTRY_SERVER_USERNAME. بسبب مخاطر الأمان، لا يتعرض أي من أسماء المتغيرات المحجوزة هذه للتطبيق.

بالنسبة إلى الحاويات المستندة إلى 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 الوحيد هو الدليل ، والذي يستخدم لتخزين سجلات الحاوية والتطبيق. سيستمر هذا المجلد دائما عند إعادة تشغيل التطبيق إذا تم تمكين تسجيل التطبيق باستخدام خيار " نظام الملفات" ، بشكل مستقل عن التخزين المستمر الذي يتم تمكينه أو تعطيله. بمعنى آخر ، لن يؤثر تمكين التخزين المستمر أو تعطيله على سلوك تسجيل التطبيق.

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

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

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

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

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

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

في باور شيل:

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

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

تقوم خدمة التطبيق بإنهاء طبقة النقل الآمنة/طبقة المقابس الآمنة (SSL) في النهايات الأمامية. وهذا يعني أن طلبات TLS/SSL لا تصل أبدا إلى تطبيقك. لست بحاجة إلى ذلك، ويجب ألا تنفذ أي دعم لطبقة النقل الآمنة/طبقة المقابس الآمنة في تطبيقك.

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

تخصيص حقن مفتاح الجهاز ASP.NET

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

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

الاتصال إلى الحاوية

يمكنك الاتصال بحاوية Windows مباشرة لمهام التشخيص عن طريق الانتقال إلى https://<app-name>.scm.azurewebsites.net/DebugConsole. وفيما يلي كيفية تنفيذ ذلك:

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

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

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

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

In Azure portal

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

من وحدة تحكم كودو

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

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

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

مع واجهة برمجة تطبيقات كودو

انتقل مباشرة للاطلاع على 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 على ذاكرة وصول عشوائي (RAM) بسعة 1 غيغابايت. يمكنك تغيير هذه القيمة من خلال توفير WEBSITE_MEMORY_LIMIT_MB إعداد التطبيق عبر Cloud Shell. في باش:

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

في باور شيل:

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

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

تخصيص عدد نوى الحوسبة

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

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

في باور شيل:

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

ملاحظة

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

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

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

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

تخصيص سلوك ping الصحي

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

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

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

في باور شيل:

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

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

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

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

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

تمكين SSH

SSH تمكن من الاتصال الآمن بين حاوية وعميل. لكي تدعم حاوية مخصصة SSH ، يجب إضافتها إلى صورة Docker نفسها.

تلميح

أضافت جميع حاويات Linux المضمنة في App Service تعليمات SSH في مستودعات الصور الخاصة بها. يمكنك الاطلاع على الإرشادات التالية باستخدام مستودعNode.js 10.14 لمعرفة كيفية تمكينه هناك. يختلف التكوين في الصورة المدمجة Node.js قليلا ، ولكنه نفسه من حيث المبدأ.

  • أضف ملف 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 ويجب أن يتضمن العناصر التالية:

    • Port يجب ضبطها على 2222.
    • Ciphers يجب أن تتضمن عنصرا واحدا على الأقل في هذه القائمة: aes128-cbc,3des-cbc,aes256-cbc.
    • MACs يجب أن تتضمن عنصرا واحدا على الأقل في هذه القائمة: hmac-sha1,hmac-sha1-96.
  • أضف ملف برنامج نصي ssh_setup لإنشاء مفاتيح SSH باستخدام ssh-keygen إلى المستودع الخاص بك.

    #!/bin/sh
    
    ssh-keygen -A
    
    #prepare run dir
    if [ ! -d "/var/run/sshd" ]; then
        mkdir -p /var/run/sshd
    fi
    
  • في Dockerfile، أضف الأوامر التالية:

    # Install OpenSSH and set the password for root to "Docker!". In this example, "apk add" is the install instruction for an Alpine Linux-based image.
    RUN apk add openssh \
         && echo "root:Docker!" | chpasswd 
    
    # Copy the sshd_config file to the /etc/ssh/ directory
    COPY sshd_config /etc/ssh/
    
    # Copy and configure the ssh_setup file
    RUN mkdir -p /tmp
    COPY ssh_setup.sh /tmp
    RUN chmod +x /tmp/ssh_setup.sh \
        && (sleep 1;/tmp/ssh_setup.sh 2>&1 > /dev/null)
    
    # Open port 2222 for SSH access
    EXPOSE 80 2222
    

    ملاحظة

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

  • في البرنامج النصي لبدء التشغيل للحاوية الخاصة بك، بدء تشغيل ملقم SSH.

    /usr/sbin/sshd
    

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

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

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

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

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

قم بتمكين التخزين المستمر عن طريق تعيين 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

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

الحاويات المتعددة قيد المعاينة حاليا. ميزات النظام الأساسي لخدمة التطبيقات التالية غير مدعومة:

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

خيارات إنشاء Docker

تعرض القوائم التالية خيارات تكوين إنشاء Docker المعتمدة وغير المعتمدة:

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

  • command
  • نقطة الدخول
  • البيئة
  • صورة
  • ports
  • إعادة التشغيل
  • services
  • وحدات التخزين

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

  • بناء (غير مسموح به)
  • depends_on (تم تجاهله)
  • الشبكات (تجاهل)
  • أسرار (تم تجاهلها)
  • منافذ أخرى غير 80 و 8080 (تم تجاهلها)

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

  • يجب أن يكون "الإصدار 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 ببساطة إلى أن المسار غير موجود، ولكنه يتيح لـ"خدمة التطبيقات" معرفة أن الحاوية سليمة وجاهزة للاستجابة للطلبات.

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

أو راجع موارد إضافية: