Docker Compose لحاوية تطبيق MEAN Stack



Docker Compose هي أداة لتعريف وتشغيل عدة حاويات لتشغيل تطبيقات معقدة في Docker ، على سبيل المثال حاوية تطبيق MEAN.

في المدونات السابقة على Docker ، كنت قد قرأت عن صور Docker وحاويات Docker وما هي الحاجة إليها. إذا لم تكن قد قرأت عنها ، فأطلب منك القراءة ، قبل المتابعة مع هذه المدونة على Docker Compose.

بعد استكشاف الاحتمالات التي تأتي مع Docker ، من المؤكد أنه من المثير للغاية معرفة المزيد. أليس كذلك؟ حسنًا ، على الأقل كنت عندما دخلت في تحدٍ.





مقدمة إلى Docker Compose

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

نعم ، لقد قرأتها بشكل صحيح. تطبيق مكدس كامل. في البداية ، اعتقدت أن ذلك غير ممكن. ولكن بعد أن سمعت عن Docker Compose ، علمت أنه سيتم حل جميع مشاكلي.



يمكن استخدام Docker Compose لإنشاء حاويات منفصلة (واستضافتها) لكل مجموعة من الحزم في تطبيق مكدس MEAN. MEAN هو اختصار لـ MongoDB Express Angular & NodeJs. العرض التوضيحي الذي سأعرضه في هذه المدونة هو أيضًا حول نفس الموضوع.

باستخدام Docker Compose ، يمكننا استضافة كل من هذه التقنيات في حاويات منفصلة على نفس المضيف وجعلها تتواصل مع بعضها البعض. ستعرض كل حاوية منفذًا للتواصل مع الحاويات الأخرى.

سيتم الحفاظ على الاتصال ووقت تشغيل هذه الحاويات بواسطة Docker Compose.



لذلك قد تسأل ، كيف يتم إعداد هذه البنية التحتية بأكملها؟ حسنًا ، دعني أقدم لك شرحًا أكثر تفصيلاً.

ملف Dockerfile

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

في حالتنا ، لدينا تطبيق مكدس كامل يتكون من MongoDB و ExpressJS و Angular و NodeJS. يعتني MongoDB بقاعدة البيانات الخلفية ، بينما NodeJS و ExpressJS مخصصان للعرض الجانبي للخادم ، و Angular للواجهة الأمامية.

تطبيق MEAN Stack - Docker Compose - Edureka

نظرًا لوجود ثلاثة مكونات ، يتعين علينا تدوير الحاويات لكل مكون. علينا تدوير الحاويات بالطريقة التالية:

  1. الحاوية 1 - الزاوي
  2. الحاوية 2 - NodeJS و ExpressJS
  3. الحاوية 3 - MongoDB

إنشاء حاويات Docker

كخطوة أولى لإرساء التطبيق المتوسط ​​، دعنا نكتب ملف dockerfile لبناء كل مكون ، بدءًا من حاوية Angular. يجب أن يكون ملف dockerfile هذا موجودًا داخل دليل المشروع مع ملف 'package.json'. يحتوي 'package.json' على تفاصيل حول أي إصدار من التبعيات يجب استخدامه بواسطة 'NPM' لبناء التطبيق الزاوي.

1. Dockerfile للواجهة الأمامية

من العقدة: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache clean RUN npm install COPY. / usr / src / app EXPOSE 4200 CMD ['npm'، 'start']

كالعادة ، أول أمر لدينا هو سحب صورة أساسية ، ونحن نسحب صورة 'عقدة: 6' أساسية.

يتعلق الأمران التاليان بإنشاء دليل جديد '/ usr / src / app' داخل Docker Container لتخزين الرموز الزاويّة وجعل هذا دليل العمل داخل الحاوية.

نقوم بعد ذلك بنسخ ملف 'package.json' من دليل المشروع إلى داخل الحاوية.

ثم نقوم بتشغيل الأمر 'npm cache clean' الذي ينظف ذاكرة التخزين المؤقت npm.

بعد ذلك ، نقوم بتشغيل الأمر 'npm install' الذي يبدأ في تنزيل لوحات المرجل المطلوبة لاستضافة تطبيق Angular. يبدأ تنزيل ألواح الغلايات بناءً على إصدارات التبعيات المحددة في 'package.json'.

تشغيل الأمر 'RUN' التالي هو نسخ جميع الرموز والمجلدات الموجودة من دليل المشروع إلى داخل الحاوية.

يطلب الأمر أعلاه من الحاوية كشف رقم المنفذ 4200 للاتصال بخادم النهاية الخلفية لإرسال الطلبات المقدمة من المستخدمين الذين يصلون إلى عميل الواجهة الأمامية عبر واجهة مستخدم الويب.

أخيرًا الأمر الأخير هو 'RUN' الأمر لبدء 'npm'. يبدأ هذا في تنفيذ الأكواد لبناء تطبيق Angular الخاص بنا.

تطبيق Angular جاهز الآن ، ولكن لن تتم استضافته بشكل صحيح بسبب اعتماده على خادم خلفي وقاعدة بيانات. لذلك دعونا نذهب أبعد من ذلك ونكتب ملف عامل ميناء لتعبئة خادم النهاية الخلفية.

2. Dockerfile للنهاية الخلفية

حتى ملف dockerfile هذا سيكون موجودًا في دليل المشروع. سيحتوي هذا الدليل أيضًا على ملف 'package.json' لتحديد تبعيات خادم Express والمتطلبات الأخرى لـ NodeJS. ولكن الأهم من ذلك أنه يحتوي على كود المشروع لدعم الخادم الخلفي.

من العقدة: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache clean RUN npm install COPY. / usr / src / app EXPOSE 3000 CMD ['npm'، 'start']

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

3. قاعدة البيانات

قد تتساءل لماذا لم أذكر 'dockerfile For Database' في العنوان. والسبب هو أننا في الواقع ليس لدينا أي حاجة لإجراء التخصيص. يمكننا على الفور سحب صورة أساسية 'MongoDB' لتخزين بياناتنا وكشف رقم المنفذ الذي يمكن الوصول إليه من خلاله.

الآن سيكون السؤال الذي يدور في ذهنك ، أين سأفعل ذلك؟ حسنًا ، يمكننا فعل ذلك في ملف Docker Compose File.

Docker Compose File

Docker Compose File هو ملف YAML يحتوي على تفاصيل حول الخدمات والشبكات ووحدات التخزين لإعداد تطبيق Docker.

قم بتشغيل الأمر أدناه للعثور على إصدار Docker Engine الخاص بك.

عامل ميناء -v

سيؤدي تنفيذ الأمر إلى إرجاع الإصدار الذي يعمل على مضيفك. استنادًا إلى إصدار Docker Engine في مضيفك ، قم بتنزيل إصدار مناسب Docker Compose. يمكنك البحث عن الإصدار المناسب للتنزيل منه وثائق Docker الرسمية .

الفرق بين الدمية والشيف

منذ أن قمت بتشغيل Docker Engine الإصدار 17.05.0-ce ، فقد استخدمت Docker Compose الإصدار 3.

قم بتثبيت Docker Compose

لتنزيل Compose ، قم بتشغيل مجموعة الأوامر أدناه.

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o / usr / local / bin / docker- قم بتكوين sudo chmod + x / usr / local / bin / docker-compose

لاحظ أن رقم الإصدار في الأمر سيتغير بناءً على إصدار Docker Engine الذي تقوم بتشغيله.

فيما يلي الأوامر التي تعد جزءًا من ملف Docker Compose File الخاص بي.

الإصدار: '3.0' # تحديد إصدار docker-compose # تحديد الخدمات / الحاويات التي سيتم تشغيلها الخدمات: الزاوي: # اسم بناء الخدمة الأول: angular-app # حدد دليل منافذ Dockerfile: - '4200: 4200' # تحديد منفذ تعيين سريع: # اسم بناء الخدمة الثاني: Express-server # حدد دليل منافذ Dockerfile: - '3000: 3000' # تحديد روابط تعيين المنافذ: - قاعدة البيانات # ربط هذه الخدمة بقاعدة بيانات خدمة قاعدة البيانات # اسم صورة الخدمة الثالثة: mongo # حدد صورة لإنشاء حاوية من المنافذ: - '27017: 27017' # حدد إعادة توجيه المنفذ

أنا متأكد من أن الأوامر الواردة في الملف أعلاه لا معنى لها بالنسبة لك. لذا ، فلنحل هذه المشكلة.

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

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

يتم استخدام الكلمة الرئيسية 'بناء' للإشارة إلى أن ملف عامل التحميل لتدوير تلك الحاوية موجود في هذا الدليل. انتظر ، هل أنت محتار كيف؟

انه سهل. يجب تحديد المسار بعد 'البناء:'. في حالتنا ، 'angular-app' و 'express-server' هما مساران إلى دليلين يمكن الوصول إليهما من الدليل حيث يوجد ملف Docker Compose File. بالنسبة لحاوية قاعدة البيانات الخاصة بنا ، قلت ببساطة استخدام 'صورة: mongo' أساسية بدلاً من مسار إلى ملف عامل ميناء.

لكل من هذه الخدمات ، قمت أيضًا بتحديد أرقام المنافذ التي يمكن استخدامها لتلقي / إرسال الطلبات من الحاويات الأخرى (الخدمات). 4200 في حالة الزاوية ، 3000 في حالة التعبير السريع و 27017 في حالة المونغو.

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

الآن أخيرًا ، وصلنا إلى الانتهاء من إعداد Compose. لبدء Docker Compose وتدوير الحاويات الثلاث مع ثلاث خدمات ، نحتاج ببساطة إلى تنفيذ الأمرين التاليين من الدليل حيث يوجد Docker Compose File (ملف YAML):

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

يتم استخدام الأمر 'docker-compose build' لبناء / إعادة بناء الخدمات ، بينما يتم استخدام أمر 'docker-compose up' لإنشاء / بدء الحاويات. استمر! جربها بنفسك.

فيما يلي لقطات شاشة لصور Docker التي يتم بناؤها ثم تنفيذها. يمكنك ملاحظة أنه يتم إنشاء صورة Angular ثم يتم تمييزها باسم 'angular: latest'.

أيضًا ، تم إنشاء صورة لـ Express بالاسم والعلامة كـ 'express: latest'.

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

يوجد أدناه لقطة الشاشة التي تقول 'حزمة الويب: تم ​​تجميعها بنجاح' مما يعني أن Docker يتم تجميع الخدمات الثلاث في حاويات بنجاح.

الآن بعد أن تمت استضافة الحاويات ، يمكنك رؤية الخدمات النشطة على المنافذ الخاصة بها. اذهب اكتب أرقام المنافذ التالية في متصفح الويب الخاص بك للتفاعل مع واجهة المستخدم الرسومية لتطبيق MEAN.

المضيف المحلي: 4200 - تطبيق Angular (الواجهة الأمامية)
المضيف المحلي: 3000 - Express Server & NodeJS (الجهة الخلفية / جانب الخادم)
المضيف المحلي: 27017 - MongoDB (قاعدة بيانات)

أعجب حتى الآن؟ انتظر ، لأن Docker لم ينته بعد! يمكننا استخدام الأمر 'docker-compose scale =' x 'لزيادة / تقليل عدد عمليات النشر بسهولة. بمعنى آخر ، يمكننا إنشاء هذا العدد الكبير من الحاويات لخدمة ما. يوجد أدناه الأمر الكامل لتوسيع نطاق خدمة معينة إلى '5' حاويات:

مقياس تكوين عامل الإرساء = 5

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

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

تكوين عامل ميناء | تطبيق حاوية MEAN Stack | برنامج DevOps التعليمي

الآن بعد أن تعرفت على Docker ، تحقق من ملف من Edureka ، شركة تعليمية موثوقة عبر الإنترنت مع شبكة تضم أكثر من 250.000 متعلم راضٍ منتشرين في جميع أنحاء العالم تساعد الدورة التدريبية لشهادة Edureka Docker المتعلمين على اكتساب الخبرة في تنفيذ Docker وإتقانه.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات وسنعاود الاتصال بك.