كيفية تكوين خيارات إنشاء حاوية لوحدات IoT Edge النمطية

ينطبق على:yes icon IoT Edge 1.1 IoT Edge 1.2 yes icon

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

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

تنسيق خيارات الإنشاء

يقبل بيان نشر IoT Edge إنشاء خيارات منسقة بتنسيق JSON. على سبيل المثال، خذ خيارات الإنشاء التي يتم تضمينها تلقائيا لكل وحدة نمطية من edgeHub:

"createOptions": {
  "HostConfig": {
    "PortBindings": {
      "5671/tcp": [
        {
          "HostPort": "5671"
        }
      ],
      "8883/tcp": [
        {
          "HostPort": "8883"
        }
      ],
      "443/tcp": [
        {
          "HostPort": "443"
        }
      ]
    }
  }
}

يستخدم مثال edgeHub هذا المعلمة HostConfig.PortBindings لتعيين المنافذ المكشوفة على الحاوية إلى منفذ على الجهاز المضيف.

إذا كنت تستخدم ملحقات Azure IoT Tools Visual Studio أو التعليمات البرمجية Visual Studio، فيمكنك كتابة خيارات الإنشاء بتنسيق JSON في الملف deployment.template.json. بعد ذلك، عند استخدام الملحق لإنشاء حل IoT Edge أو إنشاء بيان النشر، فإنه سيتم تقييد JSON لك بالتنسيق الذي يتوقعه وقت تشغيل IoT Edge. على سبيل المثال:

"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"

نصيحة واحدة لكتابة خيارات الإنشاء هي استخدام docker inspect الأمر. كجزء من عملية التطوير الخاصة بك ، قم بتشغيل الوحدة محليا باستخدام docker run <container name>. بمجرد أن تعمل الوحدة بالطريقة التي تريدها ، قم بتشغيل docker inspect <container name>. يقوم هذا الأمر بإخراج تفاصيل الوحدة النمطية بتنسيق JSON. ابحث عن المعلمات التي قمت بتكوينها، وانسخ JSON. على سبيل المثال:

Results of docker inspect edgeHub

السيناريوهات الشائعة

تتيح خيارات إنشاء الحاويات العديد من السيناريوهات ، ولكن إليك بعض السيناريوهات التي تظهر في أغلب الأحيان عند إنشاء حلول IoT Edge:

تعيين منفذ المضيف إلى منفذ الوحدة النمطية

إذا كانت الوحدة النمطية تحتاج إلى الاتصال بخدمة خارج حل IoT Edge، ولا تستخدم توجيه الرسائل للقيام بذلك، فأنت بحاجة إلى تعيين منفذ مضيف إلى منفذ وحدة نمطية.

تلميح

تعيين المنفذ هذا غير مطلوب للاتصال من وحدة إلى وحدة على نفس الجهاز. إذا كانت الوحدة النمطية A بحاجة إلى الاستعلام عن واجهة برمجة تطبيقات مستضافة على الوحدة النمطية B ، فيمكنها القيام بذلك دون أي تعيين منفذ. تحتاج الوحدة B إلى كشف منفذ في ملف docker الخاص بها ، على سبيل المثال: EXPOSE 8080. ثم يمكن للوحدة A الاستعلام عن واجهة برمجة التطبيقات باستخدام اسم الوحدة B ، على سبيل المثال: http://ModuleB:8080/api.

أولا ، تأكد من تعرض منفذ داخل الوحدة النمطية للاستماع إلى الاتصالات. يمكنك القيام بذلك باستخدام تعليمات EXPOSE في ملف dockerfile. على سبيل المثال، ⁧EXPOSE 8080⁩. يتم تعيين التعليمات الخاصة بالعرض افتراضيا لبروتوكول TCP إذا لم يتم تحديدها، أو يمكنك تحديد UDP.

ثم استخدم إعداد PortBindings في مجموعة HostConfig من حاوية Docker إنشاء خيارات لتعيين المنفذ المكشوف في الوحدة النمطية إلى منفذ على الجهاز المضيف. على سبيل المثال، إذا قمت بعرض المنفذ 8080 داخل الوحدة النمطية وتريد تعيين ذلك إلى المنفذ 80 للجهاز المضيف، فستبدو خيارات الإنشاء في الملف template.json مثل المثال التالي:

"createOptions": {
  "HostConfig": {
    "PortBindings": {
      "8080/tcp": [
        {
          "HostPort": "80"
        }
      ]
    }
  }
}

بمجرد التضييق لبيان النشر ، سيبدو نفس التكوين مثل المثال التالي:

"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"80\"}]}}}"

تقييد استخدام ذاكرة الوحدة النمطية ووحدة المعالجة المركزية

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

  • الذاكرة: حد الذاكرة بالبايت. على سبيل المثال، 268435456 بايت = 256 ميغابايت.
  • MemorySwap: إجمالي حد الذاكرة (الذاكرة + المبادلة). على سبيل المثال، 536870912 بايت = 512 ميغابايت
  • CpuPeriod: طول فترة وحدة المعالجة المركزية بالميكروثانية. القيمة الافتراضية هي 100000 لذلك ، على سبيل المثال ، قيمة 25000 تحد من حاوية إلى 25٪ من موارد وحدة المعالجة المركزية.

في تنسيق template.json، ستبدو هذه القيم مثل المثال التالي:

"createOptions": {
  "HostConfig": {
    "Memory": 268435456,
    "MemorySwap": 536870912,
    "CpuPeriod": 25000
  }
}

بمجرد أن يتم تشديدها لبيان النشر النهائي، ستبدو هذه القيم مثل المثال التالي:

"createOptions":"{\"HostConfig\":{\"Memory\":268435456,\"MemorySwap\":536870912,\"CpuPeriod\":25000}}"

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

لمزيد من الأمثلة على خيارات الإنشاء أثناء العمل، راجع عينات IoT Edge التالية: