كيفية استخدام عامل ميناء على Raspberry Pi الخاص بك

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

إذا كان لديك Raspberry Pi لفترة من الوقت ، فمن المحتمل أن تستمر في تثبيت المزيد والمزيد من البرامج عليه. Home Assistant ، Zwave2Mqtt ، Node-RED ، Rhasspy ... كل هذا يسير على ما يرام ، حتى تقوم بتحديث جميع برامجك إلى إصدار جديد ، وفجأة يتوقف أحد برامجك عن العمل ويعطي رسالة خطأ غامضة.

ماذا حدث؟ السيناريو الشائع هو التالي. يستخدم البرنامجان A و B الإصدار 1.0 من المكتبة C. وفي الوقت نفسه ، تم إصدار الإصدار 2.0 من المكتبة C ، وهو غير متوافق مع C 1.0. تتم إعادة كتابة البرنامج A لاستخدام المكتبة C 2.0 ، في حين أن مطوري البرنامج B ليسوا بهذه السرعة وسوف يلتزمون بالمكتبة C 1.0 لفترة من الوقت. تقوم بتحديث البرنامج A والذي يقوم بتثبيت مكتبة C 2.0. لكن يمكن لـ Raspbian تثبيت إصدار واحد فقط من المكتبة. نتيجة لذلك ، توقف البرنامج B فجأة عن العمل ، لأنه غير متوافق مع المكتبة C 2.0.

في الممارسة العملية ، تقوم توزيعات Linux بكل ما في وسعها لتجنب هذا النوع من المواقف ، لكن هذا يحدث. في بعض الأحيان بطرق أكثر دقة ، لذلك ليس من الواضح دائمًا سبب المشكلة.

01 ما هو عامل ميناء؟

يُسهل Docker على المطورين توزيع التطبيقات بحيث يمكنك تشغيلها على أي نظام Linux. يمكن العثور على هذه التطبيقات في شكل صورة على Docker Hub. مثل هذه الصورة هي في الأساس نموذجًا لنظام Linux بسيطًا ، والذي يمكنك تشغيله أعلى Raspbian في شكل حاوية.

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

02 تثبيت Docker

نفترض أن لديك Raspbian مثبتًا ، ويكفي الإصدار Lite. ثم قم بتسجيل الدخول عبر ssh لتنفيذ الأوامر في هذه الدورة التدريبية الأساسية. أولاً ، قم بتثبيت Docker بالأمر:

curl -sSL //get.docker.com | ش

ثم أعط المستخدم بي (الذي قمت بتسجيل الدخول به) الوصول إلى Docker ، لذلك لا تقوم بتشغيل جميع أوامر Docker باستخدام الأمر سودو يجب أن يؤدي:

sudo usermod pi -aG docker

تسجيل الخروج مع الخروج ثم تسجيل الدخول مرة أخرى. الآن ينتمي المستخدم بي للمجموعة عامل ميناء.

03 أهلاً بالعالم

يجب أن تكون الآن قادرًا على تشغيل حاوية Docker الأولى:

تشغيل عامل ميناء - rm hello-world

سيقوم هذا الأمر بتشغيل Docker container hello-world. تُظهر هذه الحاوية في مخرجاتها ما يحدث بالضبط: لم يتم العثور على الصورة في Raspberry Pi ثم يتم تنزيلها بواسطة Docker من Docker Hub. ثم ينشئ Docker حاوية بناءً على هذه الصورة ويقوم بتشغيل البرنامج فيها. حسب الخيار -جمهورية مقدونيا يتم تنظيف الحاوية بعد إغلاق البرنامج. أنت تعلم الآن أن Docker مثبت ويعمل بشكل صحيح.

مغرور

سنقوم ببساطة بتثبيت Docker على Raspbian في هذا البرنامج التعليمي الأساسي ، ولكن أنظمة التشغيل الأخرى ممكنة أيضًا إذا كنت مهتمًا بـ Docker على Raspberry Pi. على سبيل المثال ، هناك Hypriot: نظام تشغيل لـ Raspberry Pi تم تحسينه لاستخدام Docker. سيكون عليك بعد ذلك فقط تثبيت هذه الصورة على بطاقة micro-SD الخاصة بـ Raspberry Pi الخاص بك ويمكنك البدء فورًا في استخدام Docker. Hypriot مثير للاهتمام بشكل خاص إذا كنت تقوم فقط بتشغيل حاويات Docker على Raspberry Pi ولا شيء آخر.

04 إنشاء الحاويات

تتم أساسيات العمل مع حاويات Docker باستخدام الأمر عامل ميناءكما أوضحنا في الخطوة السابقة. عادةً مع Docker ، لا تريد تشغيل حاوية وإغلاقها على الفور ، ولكن اتركها تعمل. لذلك نحن لا نستخدم الخيار --rm. بالإضافة إلى ذلك ، تريد تشغيل هذه الحاوية في الخلفية ، دون رؤية الإخراج على الشاشة طوال الوقت. الخيار .

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

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

docker run -d --name whoami -p 8888: 80 المحتوي / whoami

إذا سارت الأمور على ما يرام ، فسترى بعد فترة سلسلة طويلة من الأرقام السداسية العشرية (مثل 5122c935ce5178751a59699d2c5605c607700bd04e5f57a6c18de434ae53956e). هذا هو معرف الحاوية. إذا كنت تتصفح الآن في متصفح الويب الخاص بك إلى // IP: 8888 مع بدلاً من IP عنوان IP الخاص بـ Raspberry Pi الخاص بك ، سترى صفحة ويب تم إنشاؤها بواسطة خادم الويب في الحاوية.

05 اعرض حاوياتك

بمجرد بدء تشغيل عدد قليل من الحاويات مثل هذه ، تبدأ الإدارة في أن تصبح مهمة. بادئ ذي بدء ، من المفيد معرفة الحاويات قيد التشغيل:

عامل ميناء ملاحظة

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

في العمود الموانئ ترى المنافذ المستخدمة. على سبيل المثال ، يوجد whoami أمام الحاوية الخاصة بنا 0.0.0.0:8888->80/tcp. هذا يعني أنه سيتم إعادة توجيه منفذ tcp 8888 على Raspberry Pi إلى منفذ tcp 80 على الحاوية. في العمود الأخير ، ترى اسم الحاوية ، والذي يمكنك استخدامه في أوامر Docker الأخرى.

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

عامل ميناء فحص الحاوية

وأخيرًا ، إذا كنت تريد عرض سجلات الحاوية ، فقم بتشغيل أحد هذين الأمرين:

حاوية سجلات عامل الإرساء

سجلات عامل الإرساء -f حاوية

مع الخيار -F اتبع السجلات في الوقت الفعلي حيث تقوم الحاوية بإنشائها.

06 إدارة الحاويات والصور الخاصة بك

إذا كنت تريد إيقاف حاوية قيد التشغيل أو بدء تشغيلها أو إعادة تشغيلها ، فيمكنك القيام بذلك بسهولة باستخدام هذه الأوامر على التوالي:

توقف عامل ميناء الحاويات

حاوية إطلاق عامل ميناء

إعادة تشغيل عامل ميناء الحاويات

إذا كنت تريد إيقاف حاوية مؤقتًا (سيتم تجميد جميع البرامج الموجودة فيها مؤقتًا) ، قم بتشغيل هذا الأمر:

عامل ميناء وقفة الحاوية

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

عامل ميناء إلغاء الإيقاف المؤقت للحاوية

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

في العمود خلقت انظر منذ متى تم تنزيل هذه الصورة. لتحديث هذه الصورة ، قم بتشغيل الأمر التالي:

عامل ميناء سحب الاحتواء / whoami: الأحدث

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

لكن حاوية whoami الحالية لا تزال تستخدم الصورة القديمة. لترقية هذا ، توقف (عامل ميناء توقف whoami) وحذف (عامل ميناء rm wohami) تقوم بإنشاء الحاوية ، وإعادة إنشاء الحاوية باستخدام أمر Docker run من القسم 4.

لتنظيف

إذا قمت بتحديث صور Docker بانتظام لتشغيل أحدث إصدار في حاوية ، فستظل الصور القديمة كما هي. يمكن أن تمتلئ بطاقة micro-SD الخاصة بـ Raspberry Pi بسعة لا تزيد عن بضع عشرات من الجيجابايت بسرعة ، خاصةً إذا كنت تقوم بتشغيل حاويات كبيرة. على سبيل المثال ، الحاويات مثل تلك الموجودة في Home Assistant و Rhasspy يزيد حجمها عن غيغابايت. يعمل Docker الآن مع نظام بحيث لا يتم تنزيل وتخزين الجيجابايت الكاملة مرة أخرى مع التحديث ، ولكن بعد العديد من التحديثات ، تستمر مساحة التخزين المطلوبة في الزيادة. مع الأمر عامل ميناء rmi IMAGE_ID حذف صورة بناءً على المعرف الذي تحدده في إخراج الأمر صور عامل ميناء يجد. يعرف Docker أيضًا الأمر تقليم صورة عامل ميناء الذي يزيل جميع الصور التي لا تستخدمها الحاوية. ل تقليم نظام عامل ميناء قم أيضًا بإزالة الحاويات الموقوفة والشبكات التي لا تستخدمها حاوية واحدة على الأقل وملفات ذاكرة التخزين المؤقت.

07 الحجم

لم تستخدم حاوية whoami على سبيل المثال أي بيانات أو بيانات تكوين. ولكن يمكنك مشاركة دليل على Raspberry Pi باستخدام حاوية Docker حتى يتمكن من الوصول إلى البيانات منه. يدعو عامل ميناء مثل هذا الدليل المشترك وحدة تخزين.

إذا كنت ستعمل مع حاويات متعددة على Raspberry Pi الخاص بك ، فمن المستحسن أن تضع كل الدلائل الخاصة بهم معًا. قم بإنشاء دليل لذلك ، على سبيل المثال مع:

mkdir -p / home / pi / container / nginx / data

ثم ضع في المجلد حاويات / nginx / بيانات ملف index.html مع صفحة html.

بعد ذلك ، يمكنك الآن بدء حاوية باستخدام nginx (خادم ويب) تشارك معه هذا الدليل:

docker run -d --name nginx -p 8080: 80 -v / home / pi / container / nginx / data: / usr / share / nginx / html: ro nginx

ثم تبدأ الحاوية مع خادم الويب وتحمل الدليل / home / pi / container / nging / data على Raspberry Pi في الحاوية الموجودة في الموقع / usr / share / nginx / html، مع أذونات القراءة فقط (ريال عماني لتقف على القراءة فقط). إذا كنت تتصفح الآن إلى IP: 8080 هل تحصل على ملف html index.html لترى.

08 Docker Compose

لقد بدأنا حتى الآن حاويات Docker يدويًا باستخدام الأمر تشغيل عامل ميناء. ولكن إذا كنت تقوم بتشغيل عدد قليل من حاويات Docker وترغب في تغيير تكوينها بانتظام ، فمن الأفضل اتباع نهج مختلف: وضع كل شيء في ملف تكوين واحد. هذا ينطبق مع Docker Compose.

للقيام بذلك ، قم أولاً بتثبيت حزمة مدير حزمة Python ثم Docker Compose (وهو برنامج Python) باستخدام هذه الأوامر:

sudo apt install python3-pip

sudo pip3 قم بتثبيت عامل الإرساء

يمكنك الآن تكوين عدة حاويات Docker في ملف واحد عامل ميناء يؤلف iml ليصنع. للقيام بذلك ، أنشئ ملف Docker Compose باستخدام:

nano docker-compose.yml

ضع التكوين التالي لمثال حاويات whoami و nginx:

الإصدار: '3.7'

خدمات:

من أنا:

الصورة: المحتوية / whoami

اسم الحاوية: whoami

إعادة التشغيل: دائمًا

ميناء:

- 8888:80

nginx:

الصورة: nginx

اسم الحاوية: nginx

إعادة التشغيل: دائمًا

ميناء:

- 8080:80

الصوت:

- / home / pi / حاويات / nginx / data: / usr / share / nginx / html: ro

09 يامل

احفظ الملف باستخدام Ctrl + O واخرج من nano باستخدام Ctrl + X. هذا ملف YAML (بملحق .yml). YAML (اختصار متكرر "YAML ليس لغة ترميز") هو تنسيق ملف لتعريف بيانات التكوين بطريقة يمكن قراءتها. يمكن العثور على مزيد من المعلومات على الموقع الرسمي.

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

يمكنك أيضًا العثور على كل هذه المعلومات في سطور الأوامر باستخدام تشغيل عامل ميناء، ولكن في ملف Docker Compose هذا ، يكون الأمر أكثر تنظيماً قليلاً.

10 العمل مع Docker Compose

بمجرد أن يكون لديك ملف عامل ميناء يؤلف iml يمكنك بسهولة إنشاء وتشغيل الحاويات المحددة فيه:

عامل ميناء يؤلف د

بعد ذلك ، يمكنك إدارة هذه الحاويات باستخدام أمر docker ، لكن docker-compose نفسه يحتوي أيضًا على الكثير من الخيارات المخصصة لإدارة الحاويات التي أنشأتها باستخدام Docker Compose. هذه هي الطريقة التي تقوم بتنظيف كل شيء باستخدام الأمر التالي ، سيتم إيقاف وحذف جميع الحاويات المحددة:

عامل ميناء يؤلف

يمكنك أيضًا متابعة سجلات جميع الحاويات باستخدام:

docker-compose logs -f

تعرض كل حاوية رسائل السجل الخاصة بها بلون مختلف. يحتوي Docker Compose أيضًا على نغمة مألوفة لإيقاف جميع الحاويات وبدء تشغيلها وإعادة تشغيلها:

عامل ميناء يؤلف توقف

بدء تكوين عامل ميناء

عامل ميناء يؤلف إعادة التشغيل

قم بتحديث جميع الحاويات في ملف Docker Compose باستخدام الأمرين التاليين:

عامل ميناء يؤلف سحب

عامل ميناء يؤلف إعادة التشغيل

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

تقليم صورة عامل ميناء

11 وما بعدها

يمكنك العثور على صور Docker للعديد من التطبيقات على Docker Hub. ستجد أيضًا على LinuxServer.io العشرات من صور Docker التي يحتفظ بها متطوعون. تتم صيانة هذه الصور وتوثيقها جيدًا ، وتستخدم جميعها نهجًا وبنية تحتية أساسية مماثلة.

حاول أن تقصر نفسك على صور Docker "الرسمية" ، التي يوفرها المشروع نفسه ، أو صور من جهات موثوقة مثل LinuxServer.io. لأنه من حيث المبدأ يمكن لأي شخص نشر صور Docker على Docker Hub ، لكن لا يتم تحديثها دائمًا.

بنية المعالج الصحيحة

من المهم أن تقوم بتنزيل صور Docker لبنية المعالج الصحيحة. يحتوي Raspberry Pi على معالج ARM ، وهو غير متوافق مع معالجات Intel أو AMD الموجودة في أجهزة الكمبيوتر. يتم نشر العديد من صور Docker لتنزيل الإصدار الصحيح تلقائيًا لبنية المعالج الخاص بك. في Docker Hub ، ستجد البنى المدعومة ضمن صفحة صورة Docker المطلوبة. بالنسبة إلى Raspbian ، يكون هذا هو arm32v7 أو arm / v7 أو armhf. إذا تلقيت رسالة الخطأ عند بدء تشغيل حاوية Docker: خطأ تنسيق exec ربما قمت بتنزيل صورة لهندسة المعالج الخاطئة. إذا حدث ذلك ، فستحتاج إلى تنزيل صورة بعلامة مختلفة. على سبيل المثال ، يوزع مشروع MotionEye صورته Docker الرسمية بعلامتين محتملتين: أنت تعمل ccrisan / Motioneye: master-amd64 على المعالجات المتوافقة مع Intel و ccrisan / motioneye: master-armhf على Raspberry Pi.

المشاركات الاخيرة

$config[zx-auto] not found$config[zx-overlay] not found