‫سيركز هذا القسم بشكل حصري على Docker Compose ، وهو مزيج
‫من أداة سطر الأوامر وملف التكوين. متطلبات هذا القسم هي أنك تحتاج حقًا إلى معرفة
‫الكثير من الأساسيات من الأقسام القليلة الماضية حول الصور والحاويات.
‫أثناء مرورنا بهذه الدورة التدريبية ، من المحتمل أن تبدأ في سماع أنني أشعر
‫بالحماس أكثر فأكثر لأن الأمور تتحسن باستمرار.
‫حق؟
‫عندما تتعلم مكونًا واحدًا ، فأنت تفكر ، "الرجل ، يتصاعد الأحجام والربط رائع حقًا. هذا سيوفر لي بعض الوقت.
‫أستطيع أن أتخيل كيف سأستخدم ذلك. بلاه بلاه بلاه بلاه.
‫بعد ذلك ، سأأتي بالشيء التالي الذي سيكون أفضل مما تعلمته للتو.
‫في هذه الحالة ، لا يمكن أن يكون الأمر أكثر صحة.
‫Docker Compose. إذا ما هو؟ ولماذا نهتم؟ لذا فإن عددًا قليلاً من خدمات البرامج تكون قائمة بذاتها حقًا.
‫عندما تفكر في الحاويات الخاصة بك ، فهي حل عملية واحدة ، ونادرًا ما نستخدم
‫حاوية واحدة فقط لحل مشكلة أو تقديم خدمة لعملائنا.
‫غالبًا ما تتطلب حاوياتنا حاويات أخرى مثل SQL أو قيمة أساسية. والتطبيقات الأخرى التي سنحتاجها للتشغيل في
‫حاويات ، مثل الوكلاء أو واجهات الويب أو عمال الواجهة الخلفية ، وما إلى ذلك.
‫ماذا لو كانت لدينا طريقة لربط كل هذه الأجزاء من حلنا معًا ، حيث لم
‫نكن بحاجة إلى تذكر جميع خيارات تشغيل عامل الإرساء ، ثم نقلها إلى شبكات افتراضية سرية
‫مع العلاقات بينها ، وكشف الجمهور فقط المنافذ ، ثم قم بتدويرها جميعًا وتمزيقها بأمر واحد.
‫حسنًا ، هذا Docker Compose.
‫قبل أن نتعمق ، نحتاج إلى توضيح أن هناك
‫جزأين لـ Docker Compose. الجزء الأول هو ملف YAML وهو سهل الفهم.
‫إنه مكتوب بلغة YAML ، وإذا لم تتعامل مع YAML مطلقًا ، فهذه لغة تكوين سهلة للغاية.
‫يكاد يكون الأمر سهلاً مثل ملف INI.
‫أعتقد في الواقع أنه أسهل لأنه يظهر التسلسل الهرمي.
‫سنغوص في ذلك. هذا الملف هو المكان الذي ستحدد فيه جميع الحاويات التي
‫تحتاج إلى تشغيلها ، والشبكات التي تحتاجها ، وأي وحدات تخزين قد تحتاجها ، ومتغيرات البيئة ، والصور ، وجميع أنواع خيارات التكوين
‫الأخرى.
‫ثم الجزء الثاني من Docker Compose هو أداة CLI ، وهي مكونة من عامل إرساء ، نستخدمها
‫بشكل طبيعي للمطور المحلي والاختبار فقط ، باستخدام ملف YAML الذي أنشأناه لتبسيط أوامر Docker الخاصة بنا.
‫دعنا نتحدث عن ملف Docker Compose هذا.
‫هناك بالفعل إصدارات للأشياء التي يمكنك وضعها في ملف الإنشاء. لذلك عندما تم إنشاء Docker Compose منذ سنوات ، كان يُطلق عليه
‫في الواقع "Fig" وكان يُفترض أنه الإصدار 1. في الواقع لم يدرج
‫حتى نسخة في الملف. نظرًا لأنه نضج وأضف ميزات جديدة إلى ما
‫يمكن أن يحتويه الملف ، مثل الشبكات ووحدات التخزين ، فقد أنشأوا بيان الإصدار ، وهو في
‫الواقع السطر الأول في الملف. يمكن استخدام هذا الملف بالفعل مع Docker Compose CLI ، والذي سنتحدث عنه
‫في غضون دقيقة.
‫هذا ، مرة أخرى ، بشكل أساسي لإدارة التطوير المحلي وتسهيل التنقل في بيئاتك
‫على جهازك المحلي.
‫الآن ، بدءًا من بداية عام 2017 ، لدينا الإصدار 1. 13 وأي شيء يتجاوز ذلك ، يمكن الآن استخدام هذه الملفات مباشرة
‫مع سطر أوامر عامل ميناء في الإنتاج مع سرب. بالطبع ، هناك مساعدة كبيرة في سطر
‫الأوامر باستخدام --help.
‫عندما ننظر إلى بعض الأمثلة ، اعلم أن ملف Docker Compose هو اسم افتراضي ، ولكن يمكنك
‫في الواقع استخدام أي اسم ملف تريده ، طالما أنه YAML مناسب وأنك تستخدم -f لتحديد الملف الذي تريده. إعادة
‫محاولة استخدامها.
‫إذا فتحت المحرر الخاص بي ونظرت إلى النموذج هنا ، أردت فقط إظهار بعض الخطوط العريضة لما يفترض
‫أن يبدو عليه.
‫لدينا قيمة الإصدار في البداية.
‫الإصدار الأحدث في الربع الأول من عام 2017 هو 3. 1.
‫لكنني دائمًا أجعلها على الأقل الإصدار 2. إذا لم تقم بإضافة هذا السطر هناك ، فمن المفترض دائمًا أن يكون الإصدار
‫1.
‫لكنني لا أوصي بذلك لأنك تفقد الكثير من الميزات.
‫لذلك عادةً ما أبدأ بالإصدار 2. ثم إذا كنت بحاجة إلى ميزات محددة من الإصدار 3 و 3. 1 ، انتهى بي الأمر
‫بكتابة رقم الإصدار هناك. سترى الأقسام الثلاثة الرئيسية الأخرى هي الخدمات
‫والأحجام والشبكات ، أليس كذلك؟
‫لذلك ، هذا هو التسلسل الهرمي.
‫تحت الخدمات ، يمكن أن يكون كل شيء مساحتين أو أربعة ، لكن يجب أن يكون متسقًا.
‫إذا بحثت للتو عن YAML على الإنترنت ، فستجد بعض المواقع التي ترشدك إلى تفاصيل كيفية
‫تنسيق هذا الملف.
‫إذا كنت تستخدم محررًا حديثًا ، فسوف يتحدث لغة YAML بالفعل ويعرف كيفية التعامل مع
‫هذه الملفات وتنسيقها.
‫عادة ، هنا ، لديك ، على الأقل ، خدمات ، وهي في الحقيقة مجرد حاويات.
‫السبب في أنهم يطلقون عليهم بالفعل خدمات هو أن كل حاوية تقوم بإنشائها هنا ، يمكن أن يكون لديك
‫بالفعل عدة حاويات من هذه الحاويات للتكرار. لذلك كانوا بحاجة إلى ابتكار كلمة
‫مختلفة.
‫أعتقد أن الخدمات رائعة لأن هذا هو ما تفعله أساسًا. حق؟
‫عادةً ما تقدم كل حاوية أو حاويات متطابقة تستخدمها خدمة لشيء
‫ما.
‫تحت اسم الخدمة ، ومرة أخرى يمكنك تسميتها بأي شيء تريده.
‫لا يجب أن يكون اسم الصورة أو لا يجب أن يكون أي شيء مرتبط به على الإطلاق.
‫قد يكون Barney هو اسم الخدمة ، لكنه سيكون اسم DNS ، الذي سنكتشفه لاحقًا ، مستخدمًا
‫داخل شبكات Docker الخاصة بك.
‫على غرار ما يحدث عند إعطاء --name لأمر Docker run.
‫لقد أوضحت هنا أنه يمكننا تحديد الصورة اختياريًا. يمكننا تحديد الأمر البديل
‫للتشغيل. إذا أردنا الكتابة فوق الأمر الفعلي الذي تم تحديده في الصورة عند تشغيله
‫، فيمكننا القيام بذلك هنا.
‫في الأساس ، كل الأشياء التي نقوم بها من أمر Docker run ، يمكننا حفظها هنا. لأن هذا هو ما يدور حوله هذا الأمر حقًا
‫، وهو أخذ كل العمل من تذكر كل الأشياء المختلفة في أمر تشغيل عامل الإرساء لتلك الأشياء
‫التي تقوم بتشغيلها باستمرار.
‫إذا كانت لديك بيئات التطوير الخاصة بك ، أو أدواتك الخاصة ، فربما لا ترغب في كتابة
‫هذه الأوامر مرارًا وتكرارًا. ويمكن لبرامج shell النصية أن تفعل الكثير فقط.
‫حق؟
‫لذلك ، سيحل هذا الملف بالفعل محل برنامج نصي شل الذي من شأنه أتمتة أوامر تشغيل عامل الإرساء.
‫هذه طريقة أفضل بكثير للقيام بذلك.
‫من الأسهل قراءتها وأفضل توثيقها.
‫ستلاحظ أن المساحات هنا مسموح بها.
‫يمكنك الحصول على مسافات في التعليقات أينما تريد.
‫إذا كانت لديك خدمات متعددة ، فما عليك سوى التأكد من أنها أسماء فريدة.
‫ثم الأجزاء الأخرى التي نحددها هي وحدات التخزين والشبكات. ومرة أخرى ، هذه اختيارية أيضًا.
‫إنها في الأساس نفس القواعد كما لو كنت تعمل من سطر الأوامر.
‫إذا احتجت في أي وقت إلى استخدام إنشاء وحدة تخزين عامل الإرساء أو إنشاء شبكة عامل الإرساء أوامر ، ومرة أخرى
‫، لن تضطر دائمًا إلى ذلك.
‫الأمر يعتمد فقط على حالتك.
‫يمكنك وضعها هنا أيضًا.
‫لنلق نظرة على العالم الحقيقي ، مثال بسيط.
‫تتذكر في القسم الأخير ، كان لدينا محاضرة حيث استخدمنا Jekyll سريعًا جدًا لعمل مثال على
‫ربط الربط.
‫هذا ما سيبدو عليه ملف الإنشاء لأمر docker run هذا ، وسترى أنني قمت بتحديد
‫الصورة هنا.
‫لقد أطلق عليها اسم Jekyll.
‫لقد أعطيته حجمًا. ستلاحظ بدلاً من استخدام pwd ، أن Compose يفهم النقطة بالفعل
‫، مما يعني أن هذا هو دليل العمل الحالي الذي أستخدمه.
‫ما عليك سوى استخدام هذا الدليل الذي أقوم بتشغيل ملف الإنشاء منه. ثم المنافذ أو الخيار -p.
‫ستلاحظ بعض الأشياء الصغيرة حول YAML ، حيث عندما يكون هناك خيار واحد فقط لشيء
‫ما ، مثل وجود صورة واحدة فقط لكل خدمة ، فعادة ما يكون تنسيق مفتاح وقيمة مثل هذا.
‫إذا كانت قائمة بالعناصر ، مثل وحدات التخزين والمنافذ حيث يمكن أن يكون لديك عدة عناصر ، فستلاحظ أن
‫ملف الإنشاء عادةً ما يحتوي على صيغة الجمع. بدلاً من الحجم ، إنها أحجام. وبدلاً من المنفذ ، فهو المنافذ.
‫وبعد ذلك سيكون هناك تنسيق قائمة بعلامة -.
‫إذا قفزنا إلى مثال آخر سريع حقيقي.
‫سترى أنه في هذا ، هذا في الواقع
‫نموذج لإعداد WordPress حيث لديك خدمة قاعدة البيانات هنا والتي تشغل حاوية
‫قاعدة بيانات.
‫ثم تظهر حاوية خادم الويب WordPress في الأعلى.
‫ستلاحظ شيئًا مختلفًا في هذا الأمر وهو أننا نستخدم متغيرات البيئة
‫، والتي ستكون مماثلة لـ a -e في سطر الأوامر. ولكن بدلاً من تنسيق القائمة حيث
‫لدينا - ، هذا ، مرة
‫أخرى ، مفتاح وبيان قيمة آخر.
‫في هذا التنسيق ، لا نستخدم - ، بل نقوم فقط بإدراج المفتاح والقيمة.
‫إذا كنت بحاجة إلى إضافة واحدة أخرى ، فسأفعل ذلك هنا. سيتم تمرير كل هذه في الحاوية ، عند
‫تشغيلها ، باستخدام سطر أوامر الإنشاء.
‫ثم أخيرًا ، لدينا مثال آخر. هذا هو أكثر تعقيدا قليلا. إنها في الواقع واحدة
‫كنت أعمل عليها مؤخرًا لإعداد مجموعة خوادم مكونة من ثلاث قواعد بيانات خلف خادم ويب Ghost.
‫Ghost هو في الواقع نظام مدونة مشابه لـ WordPress. سترى أن لدي متغيرات بيئة متعددة
‫لكل واحدة من هذه الحاويات.
‫لقد حصلت على حاوية الأشباح الخاصة بي في الأعلى. ثم لدي بالفعل هذا الشيء المعروف باسم
‫SQL Proxy ، والذي يقع أمام خوادم MySQL ويعمل كموازن تحميل وحل تجاوز الفشل.
‫ثم لدي كل من خادمي MySQL. ستلاحظ خيارًا آخر هنا يقول ، "يعتمد على"
‫، ويعتمد على خيار شائع جدًا.
‫فهي تساعد بشكل أساسي في تكوين فهم العلاقة بين هذه الخدمات. إنه يعرف أنه إذا كنت بحاجة إلى بدء تشغيل
‫Ghost one ، فعندئذ أحتاج أيضًا إلى بدء تشغيل Ghost واحد أيضًا.
‫يمكنك أن ترى هنا أن شبحي يعتمد في الواقع على هؤلاء. سوف ندخل في تفاصيل كيفية عمل ذلك
‫في المحاضرات اللاحقة.
‫لكن في الوقت الحالي ، من المحتمل أن يكون هناك الكثير من الأمور التي يجب استيعابها ، وكل هذه الأوامر المختلفة وما إلى ذلك
‫، لكن ثق في أن Docker لديه بعض الوثائق الرائعة حقًا على موقعه على الويب. إذا كنت تبحث فقط عن ملف Docker Compose على Google
‫، فمن المحتمل أن تجد هذا مع أول زوجين من الضربات.
‫سيكون تحت المستندات. عامل ميناء. com ، كالعادة ، وسيكون
‫توثيقًا حول كل خيار مفتاح وقيمة صغير لديك.
‫سترى يعتمد على ما ذكرته للتو. سترى البيئة هنا حيث تعرض طرقًا مختلفة لوضع
‫متغيرات البيئة. ما هو عظيم في هذا التوثيق هو أنه يقدم لك
‫الكثير من الأمثلة.
‫أنا شخصياً في هذا الموقع كل يوم ، تمامًا كما لو كنت في صفحة خيارات أوامر تشغيل عامل الإرساء أو صفحة خيارات
‫أمر الإنشاء.
‫أنا أشير إليها باستمرار لأن هناك بصراحة العديد من الميزات في الوقت الحاضر ولا يمكنني
‫تذكرها جميعًا.
‫لذلك احتفظ بها بالقرب من الإشارات المرجعية الخاصة بي.
‫الآن بعد أن أصبح لدينا فكرة عامة عن الشكل الذي قد يبدو عليه تنسيق ملف الإنشاء ، دعنا ننتقل
‫إلى سطر الأوامر ونتعرف على أداة Docker Compose CLI.