‫الآن بعد أن فهمت أساسيات إنشاء سرب متعدد العقد وإنشاء شبكات تراكب وخدمات Docker ، سنغطي
‫الشيء التالي الرائع حقًا حول Swarm ، وهو الأكوام. ليست أكوام من الفطائر ، ولكن
‫أكوام من الخدمات. في 1. 13 ، أضاف Docker هذه الميزة الرائعة حقًا
‫التي تضيف طبقة أخرى من التجريد فوق الأكوام. في الأساس هو إنشاء ملفات لإنتاج Swarm. الآن الأكوام تقبل إنشاء
‫الملفات.
‫يوجد في الداخل ما يمكن أن نسميه تعريفًا تصريحيًا ، حيث نذكر أن هذا هو ما أريد أن
‫تكون النتيجة النهائية.
‫ومن مهمة السرب معرفة كل ذلك. الآن ليست مجرد خدمات. إنها شبكات وأحجام
‫أيضًا.
‫ونظرة خاطفة صغيرة.
‫ستشمل في الواقع الأسرار ، والتي سنتحدث عنها في المحاضرات القليلة القادمة.
‫وصلنا إلى استخدام أمر جديد ، وهو Docker stack publish لاستيراد ملف Compose هذا وتشغيل الأمر الذي
‫وضعناه فيه.
‫المكدس يدير كل هذا.
‫لا يحتاج الأمر منا أن نذهب وننشئ شبكات أولاً ، أو نخلق مجلدات أولاً ، لكن يمكننا فعل ذلك تمامًا.
‫يمكننا استخدام شيء يسمى External في ملف Compose الخاص بنا لنقول مرحبًا ، هذه أشياء موجودة
‫بالفعل في سربتي. انطلق واستخدمها ، لا تهتم بإنشائها.
‫ولكن عادةً ما ينتهي بك الأمر بالحصول على مكدساتك تقوم بكل شيء من أجلك لأنه أسهل بهذه الطريقة.
‫سنحصل على بعض الميزات الجديدة في ملف Compose الخاص بنا ، لذلك سنبدأ بالميزات
‫التي تبدو مشابهة جدًا لما كانت لدينا من قبل. لكننا سنحصل على هذا المفتاح الجديد المنشور هناك ،
‫أو القاموس ، الذي يسمح لنا بتحديد الأشياء الخاصة بـ Swarm.
‫كم عدد النسخ المتماثلة التي نريدها؟
‫ماذا نريد أن نفعل عندما نتجاوز الفشل؟ كيف نريد القيام بتحديثات متجددة ، وكل تلك الأنواع
‫من الأشياء التي لا نهتم بها في آلة التطوير المحلية الخاصة بنا.
‫لكن هذا يأتي بسعر ، وهو أننا لا نستطيع تنفيذ أمر البناء بعد. قد يكون هذا شيئًا لن يحدث أبدًا
‫في Swarm لأن العقلية هنا هي أن البناء لا يجب أن يحدث على سرب الإنتاج
‫الخاص بك. البناء شيء يجب أن يفعله نظام CI الخاص بك.
‫ربما جنكينز أو شيء آخر مثل الكود.
‫بمجرد إنشاء صورك ووضعها في مستودعك ، ستكون هذه المكدس في الواقع هي التي
‫تسحب تلك الصور وتنشرها مع خيارات النشر.
‫الخبر السار هناك ، مع ذلك ، هو أنهم في الواقع يتفقون.
‫على جهازك المحلي ، سيتجاهل Compose فعليًا عند تشغيل أمر docker-compose.
‫سوف يتجاهل
‫في الواقع أي من معلومات النشر. سيقول في الواقع "مرحبًا ، لقد قمت بنشر المعلومات هنا.
‫لا يمكنني استخدامه حقًا لذا سأتجاهله. وبالمثل ، عندما
‫تكون في Swarm وتنشر مكدسًا جديدًا أو تحديثًا لمكدس ، سيقول في الواقع "مرحبًا
‫، لديك أوامر بناء هنا.
‫أنا لا أقوم ببناء لذا سأتجاهلهم وأستمر. الشيء الجميل هو أنك
‫لست مضطرًا لتغيير ملفك. سنرى لاحقًا كيف يمكننا بالفعل الحصول
‫على ملف Compose واحد يقوم بكل ما نحتاجه للقيام به في جانب التطوير وفي جانب نشر
‫الإنتاج.
‫إنه رائع جدًا.
‫أخيرًا ، لا تحتاج في الواقع إلى Docker Compose CLI ، الثنائي. هذا لا يجب أن يكون
‫في سربك. لأن الأمر الفعلي ، الإنشاء مرة أخرى ، ليس أداة إنتاج.
‫لم يكن مصممًا ليكون إنتاجًا.
‫تم تصميمه ليكون مطورًا وأداة مساعد مسؤول النظام.
‫إنه حقًا الأفضل للعمل المحلي على أجهزتنا.
‫السرب ، وهو في الأساس محرك Docker. يمكن لـ Docker Engine الآن قبول إنشاء
‫الملفات باستخدام أمر المكدس هذا. يقرأ ملفات Compose دون الحاجة إلى Docker Compose في أي مكان على الخادم.
‫دعنا نراجع بسرعة حقيقية عندما ننظر إلى الوراء في خدماتنا.
‫هذا ما ستبدو عليه خدمتنا.
‫سنقوم بإنشاء خدمة ...
‫لنفترض أنه Nginx. ولنفترض أننا حددنا ثلاث نسخ طبق الأصل منه.
‫لذلك ، ستنشئ بعد ذلك ثلاث مهام في المنسق ، وستجد تلك المهام خوادم أو عقدًا معينة
‫لوضعها عليها وستقوم بإنشاء حاويات.
‫في المداخن الجديدة ، نتحدث عن خدمات متعددة ، واحدة أو أكثر ، صحيح. يمكنك الحصول على العشرات من الخدمات
‫هناك. في ملف YAML الفردي هذا.
‫إنها تتصرف تمامًا مثل الخدمات التي كانت لدينا من قبل ، والآن فقط يمكننا عمل وحدات تخزين وشبكات متراكبة
‫في ملف Compose هذا. وينتج عن ذلك
‫ما نسميه المكدس. المكدس يتحكم في كل هذه الأشياء.
‫وهو في الواقع سيضع اسمه بشكل صحيح على جميع الكائنات بحيث يمكنك بسهولة
‫معرفة أي منها مرتبط بالمكدس. ستضع في الواقع تسميات هناك أيضًا ، والتي سنغطيها
‫لاحقًا ، وهي بيانات وصفية أكثر لتتمكن من تحديد المكدس الذي أتى منه هذا الشيء المعين.
‫لذلك هذا رائع حقا.
‫نصل الآن إلى استخدام ملف YAML للقيام بكل الأشياء التي لم نرغب في كتابتها
‫في أوامر الخدمة. لأن أوامر الخدمة كانت بالفعل صعبة وطويلة نوعًا ما. ثم انتهى بنا الأمر إلى إنشاء
‫نصوص Bash من أجل تشغيل تلك الأوامر ، وبعد ذلك أصبح الأمر مملاً ، أليس كذلك.
‫الآن ، بعد أن أصبح لدينا Swarm لمدة ثمانية أشهر ، نحصل الآن على ميزة المكدس هذه التي تدير تلك
‫الخدمات.
‫لاحظ أن المكدس مخصص لسرب واحد فقط.
‫حق؟ لا يمكنها فعل أسراب كثيرة.
‫سيتم تشغيله فقط على سرب واحد حتى يتمكن من التحكم في جميع العقد ونشر كل هذه الخدمات
‫والشبكات ووحدات التخزين.
‫يجب أن أقول أن هذا المخطط يمكن أن يحتوي في الواقع على شيء آخر ، وهو الأسرار ، لأن
‫المكدس يمكنه التحكم فيها أيضًا. سنرى ذلك في محاضرة لاحقة في هذا القسم. نعم.
‫دعونا نلقي نظرة على المداخن وكيف تعمل.
‫لقد عدت إلى سربتي المكونة من 3 عقد والتي بنيناها سابقًا. سأقوم بتكبير النافذة على العقدة 1 لأنني لا
‫أحتاج حقًا إلى العقدتين الأخريين.
‫على الأقل لست بحاجة إلى سطر أوامر ssh الخاص بهم.
‫سنستخدم مثال تطبيق التصويت الذي استخدمناه في المحاضرات السابقة لهذا القسم.
‫إذا كنت تتذكر تصميمنا لذلك ، فقد كان عبارة عن خمس خدمات مختلفة ، وكلها تعتمد على بعضها
‫البعض.
‫وأعطانا في النهاية موقعين مختلفين.
‫لقد مررت وأنا متأكد من أنك وضعت قائمة أفضل الخدمات مع جميع القيم والخيارات التي تحتاجها
‫وكانت مثالية ، أليس كذلك؟
‫أنا هنا لأخبرك أنه لم يعد هناك حاجة إلى ذلك الآن.
‫كان من المهم حقًا أن نستخدمها ولن يحتاج كل شيء إلى ملف مكدس.
‫ولكن الآن لدي ملف مكدس.
‫دعنا فقط نلقي نظرة خاطفة عليه سريعًا لأنك ستلاحظ أنه يشبه
‫إلى حد كبير ملف Compose لأنه كذلك. الشيء الرئيسي الحقيقي الوحيد الذي يجب عليك تغييره لأنه يجب أن يكون على الأقل الإصدار
‫3 أو أعلى.
‫أحدث إصدار الآن هو الإصدار 3. 1 ، لكنني متأكد من أن ذلك سيتغير مع استمراره
‫في التغيير والنضج.
‫لكنك تحتاج إلى الإصدار 3 من أجل استخدام التكديس.
‫ستلاحظ أن لدينا redis و db وتصويتنا وكل هذه الأشياء التي ربما تكون
‫مشابهة جدًا لك من عملك الخاص. ربما تكون على دراية بهذه الصور التي يحتاجون إليها ، والمنافذ
‫التي يحتاجون إليها مفتوحة وكل ذلك.
‫لكن في هذه الحالة ، ستلاحظ الانتشار.
‫يعد النشر هنا خيارًا جديدًا. سترى هنا أنني كنت أحدد عدد النسخ المتماثلة التي
‫أريدها ، وهو عدد نسخ تلك الصورة التي يجب تشغيلها في كل مرة.
‫وماذا يحدث عندما أقوم بالتحديث.
‫لذلك عندما أقوم بتحديث مكدس فعلي ، والذي سيقوم بعد ذلك بتحديثات الخدمة.
‫كيف أريد أن يتم طرح ذلك؟
‫حق؟
‫هل أرغب في النزول جميعًا في نفس الوقت؟ هل أريد فقط واحدة في كل مرة؟
‫كم تأخير بينهما؟
‫هناك كل أنواع الخيارات هنا.
‫نحن فقط نخدش السطح ، ولكن يمكنك أن ترى أن لدي سياسة إعادة التشغيل هنا أنه إذا
‫فشلت الحاوية ، فأعد تشغيلها تلقائيًا.
‫يمكنك أن ترى هنا أسفل قاعدة
‫البيانات ، لقد وضعت بالفعل قيودًا للتأكد من أنها على عقدة معينة.
‫لم نتحدث كثيرًا عن القيود حتى الآن ، ولكن هناك طرقًا لنا لتسمية
‫الكائنات ، أي الحاويات أو الصور أو أي شيء يمكننا إنشاؤه أو تدميره في Swarm أو في Docker نفسه.
‫يمكننا في الواقع تعيين تسميات لأي من هؤلاء ، بما في ذلك العقد ، والعقدة التي هي مدير تحصل على تسمياتها
‫الخاصة.
‫من السهل جدًا القيام بذلك لنقول ، مهلاً ، هذه الحاوية يجب أن تعمل على عقدة لها هذا
‫الدور المحدد.
‫مثال رائع هناك. أثناء قيامنا بالتمرير لأسفل ، لدينا بعض خيارات التوازي التي رأيناها من قبل.
‫خيار التأخير هذا رائع جدًا. إذا كان لديك نوع من وقت الإحماء عندما
‫يكون لديك حاويات تدور. ربما بدأوا ولكنهم لم يبدأوا البث المباشر لمدة 60 ثانية أو شيء من هذا القبيل.
‫يمكنك إضافة التأخيرات هناك. سننظر في الواقع إلى هؤلاء لاحقًا أثناء عمليات
‫نشر الإنتاج باللونين الأزرق والأخضر. في الوقت الحالي ، يمكنك أن ترى أن هذه كلها قياسية جدًا.
‫لدينا بالفعل المزيد من الخيارات هنا. يمكنك أن ترى في الواقع أنني أعين هذا تصنيفًا محددًا.
‫لدي نافذة ومحاولة قصوى لسياسة إعادة التشغيل.
‫لذلك إذا حاولت إعادة التشغيل ، واستمرت في الفشل ، فلن تحاول أكثر من ثلاث مرات.
‫دعونا التحقق من ذلك.
‫كل ما علي فعله هو نشر مكدس عامل الإرساء -c للتأليف. لذلك سأستخدم ملف Compose.
‫الآن سأسميها voteapp. وها نحن ذا. لم يخلق في الواقع كل شيء وقام بتدويره
‫بهذه السرعة.
‫كل ما فعلته هو إنشاء تلك الكائنات في المجدول ، والذي سيمر بعد ذلك بعملية إنشاء الخدمات
‫، والتي تقوم بعد ذلك بإنشاء المهام ، ثم إنشاء الحاويات.
‫يجب أيضًا إنشاء الشبكات كما سترى هنا. تذكر أنه كان لدينا الواجهة الأمامية
‫والخلفية ، لذا فقد أنشأها ، بالإضافة إلى شبكة افتراضية ، والتي كان ملف المكدس المحدد الذي كنت أستخدمه
‫شبكة افتراضية.
‫وبعد ذلك سترى هذا الخيار للمتخيل وهو خيار جديد لم نستخدمه من قبل.
‫سنرى ذلك خلال دقيقة.
‫لذلك دعونا نلقي نظرة على أمر Docker stack أكثر من ذلك بقليل.
‫سترى أنه يمكننا النشر. لقد فعلنا ذلك بالفعل.
‫ثم لدينا
‫ls و ps و rm والخدمات.
‫لذلك لا يحتوي هذا الأمر على الكثير من الميزات.
‫الأمر بسيط جدًا لأن جميع الوظائف موجودة بالفعل في ملف الإنشاء وفي الكائنات التي
‫يتم إنشاؤها بالفعل.
‫نظرًا لأننا قمنا بكل ذلك بالفعل ، يمكننا القيام بأشياء مثل ls ، والتي تظهر لنا جميع مكدساتنا.
‫إنها أمر أساسي جدًا. لدينا فقط واحد. ثم إذا قمت بعمل ملاحظة ، فهذا يظهر لي في الواقع ... عفوًا ، يجب أن
‫أحدد الاسم.
‫تصويت.
‫إنه يسمى voteapp.
‫يجب أن تحصل على هذا الحق.
‫نعم.
‫اسمحوا لي أن أدعم ذلك حتى تتمكن من رؤية ذلك بشكل أفضل قليلاً. هناك مباشرة.
‫هذه هي المهام الفعلية. ثم يمكنك معرفة العقدة التي يتم تشغيلها عليها.
‫إنها ليست الحاويات في الواقع. إنها في الواقع المهمة التي نراها هنا. لأنه إذا كانت الحاوية الفعلية
‫، فسنرى اسمًا كبيرًا طويلًا. لأنه إذا كنت تتذكر ، الخدمات التي أنشأناها سابقًا ، فقد كان لديهم
‫هذه الأسماء الطويلة حقًا إذا
‫ذهبنا بالفعل وقمنا بذلك docker ps. حق؟ إذا قمت بعمل حاوية docker container
‫ls ، أو docker ps ، فستحصل على هذه الأسماء الطويلة حقًا. وذلك لأنهم جميعًا يحصلون على المعرف الفريد العمومي (GUID) ،
‫لأنه يجب تسمية كل حاوية بشكل فريد.
‫هذه هي الطريقة التي يضمنون بها أنها فريدة دائمًا ولا تتعارض أبدًا.
‫ثم آخر واحد هنا هو خدمات
‫مكدس عامل الترسيم.
‫أنا أحب هذا أفضل ، في الواقع ، لأنه يظهر لي النسخ المتماثلة الخاصة بي.
‫إنه نوع من مثل
‫القيام بخدمة ls. يُظهر لي عدد النسخ المتماثلة التي بدأت حتى أعرف ما إذا كان لدي
‫العدد المناسب من الحاويات التي بدأت بالفعل. ثم إذا كنت أرغب في الغوص بشكل أعمق
‫، فيمكنني القيام بمكدس عامل الميناء PS. في الواقع ، نحصل على أسماء المهام هنا ونرى العقد التي يتم تشغيلها عليها.
‫يمنحك هذان معًا في الواقع صورة كاملة لكيفية تشغيل هذا التطبيق بأكمله.
‫إذا كنت أرغب في الغوص في الشبكات ، فيمكنني القيام بشبكة عامل
‫إرساء مثلما نفعل عادةً.
‫ويمكنك رؤية شبكات التراكب الثلاث الجديدة التي تم إنشاؤها لهذا التطبيق. ولاحظ أن اسم التطبيق
‫دائمًا في البداية. المكدس دائمًا يسبق اسم الخدمة.
‫لذلك سوف تتأكد كل مكدس من وجود اسمها في المقدمة.
‫ثم دعنا نذهب للتحقق من ذلك.
‫اسمحوا لي أن أحضر المتصفح الخاص بي.
‫حسنا.
‫يمكننا رؤيتهم على المنفذ 5000.
‫لقد قمت بتشغيل موقع التصويت.
‫أذهب إلى 5001.
‫لقد حصلت على موقع النتائج حتى أتمكن من الوصول إلى هذا ثم رؤية النتيجة.
‫ثم هذا الجديد الذي لدينا يسمى متخيل.
‫إنه في 8080. يعد برنامج Visualizer في الواقع أداة أنيقة جدًا لأغراض العرض التوضيحي.
‫هذا صنع في الواقع ... كل هذا تم بواسطة Docker ، بالمناسبة ، وهذه
‫كلها عبارة عن ريبو مفتوح المصدر يمكنك رؤيته في قسم الموارد في هذا القسم.
‫لذلك لدينا ألوان مختلفة لكل خدمة.
‫نتيجة voteapp خضراء.
‫ثم الأحمر هو نوع من الخردل ، والتصويت وردي. يمكنك أن ترى أن هناك تصويتان وهناك زيادتان.
‫إنه لأمر رائع أن تُظهر نوعًا ما ما يحدث عندما تتحرك الأشياء حول السرب.
‫إذا ذهبت بالفعل إلى ملفي وقمت بإجراء تغيير.
‫دعنا ننتقل إلى تطبيق التصويت ودعنا نقول إننا نريد تغيير النسخ المتماثلة إلى خمسة.
‫يمكننا الذهاب وتحديث الخدمة. لكن هذا نوع من AntiPattern. إذا دخلنا وكتبنا يدويًا ، أوامر في
‫الخدمة ، مثل تحديث خدمة عامل الإرساء ، فهذا
‫يعني أنه في المرة التالية التي أعيد فيها تطبيق ملف YAML هذا ، سيتم استبدال هذه التغييرات.
‫إذا سبق لك إجراء تشكيل سحابي في AWS أو أي إدارة تكوين أخرى ، فأنت تعلم أنه بمجرد استخدامك
‫لملف تكوين مثل هذا لإدارة البنية التحتية الخاصة بك ، فأنت تريد حقًا استخدام هذا الملف
‫دائمًا لأنه سيكون المصدر الحقيقة.
‫لذلك من المحتمل ، في الإنتاج ، أن يكون نوعًا من الملفات التي تحتفظ بها في Git Repository لديك للتحكم
‫في الإصدار ، ويمكنك التحكم في التغييرات ، وبهذه الطريقة يمكنك التراجع عن التغييرات.
‫في هذه الحالة ، سأقوم فقط بتغيير هذا الملف بسرعة كبيرة ، وسنقوم بتشغيل نفس الأمر ، نشر مكدس عامل
‫الإرساء.
‫لاحظ أنه ليس لدينا تحديث. لأننا سننشر على نفس المكدس وسوف ندرك
‫أنه موجود ، وأننا سنقوم بتحديثه بناءً على هذه التغييرات.
‫لتحديثه ، علينا التأكد من استخدامنا للاسم الصحيح.
‫إذاً فهو voteapp. ثم لاحظ أنها تقول تحديث الخدمات ، لكنها تدرك أنها بحاجة إلى تغييرها.
‫ثم إذا انتقلنا إلى المتخيل الخاص بنا ، يمكنك أن ترى أننا حصلنا عليه بالفعل.
‫نحن فقط بطيئين للغاية اليوم ، أليس كذلك.
‫نحن لسنا قادرين على مواكبة السرب. لدينا الآن خمسة من تطبيقات التصويت هذه قيد التشغيل بالفعل.
‫إذا استغرقوا بعض الوقت في الجري والانطلاق ، فسنرى في الواقع تغيراتهم هنا عند اتصالهم
‫بالإنترنت.
‫لكنه تطبيق ويب بسيط ، لذا سيبدأ بسرعة كبيرة.
‫تمام.
‫هذه مكدسات.
‫الآن دعنا نضيف الأسرار إلى مكدساتنا.