‫تتضمن متطلبات هذا القسم فهم كيفية بدء الحاوية. ثم مفاهيم شبكات TCP / IP الأساسية ، مثل
‫الشبكات الفرعية وعناوين IP والمنافذ وجدران الحماية.
‫ليس عليك أن تعرف كل ذلك ، لكنه بالتأكيد سيجعل الأمر أسهل كثيرًا بالنسبة
‫لك لفهم هذا القسم الذي يركز على الأشياء المفاهيمية
‫، قبل أن ندخل في الواقع إلى مجموعة من عناصر سطر الأوامر في المحاضرة التالية.
‫أريد فقط أن أذكرك بالخيار -p في أوامر تشغيل الحاوية التي تعرض المنفذ
‫الموجود على جهازك.
‫في الواقع ، هناك الكثير مما يحدث في خلفية شبكات Docker التي سنتحدث عنها.
‫يحتوي Docker على هذا المفهوم الخاص بالبطاريات المضمنة ولكن القابلة للإزالة مما يعني بشكل أساسي أن الإعدادات الافتراضية
‫سهلة جدًا وشائعة للعمل بها ، ولكن يمكنك تغيير الكثير من الخيارات الموجودة أسفل الغطاء.
‫سوف نتحقق بسرعة في هذه المحاضرة من أمر منفذ الحاوية الذي يمنحك إخراجًا
‫سريعًا للمنافذ المفتوحة لتلك الحاوية على شبكتك.
‫ثم سنقوم بتفصيل بعض مفاهيم شبكات Docker والشبكات الافتراضية
‫وكيف تتدفق الحزم حول الشبكة.
‫وسننتهي برسم تخطيطي للشبكة يوضح كيف تتحدث الحاويات فيما بينها
‫وكيف يختلف ذلك عن -p في تعريضها للشبكة المادية.
‫عندما تبدأ حاوية بالفعل ، فأنت بالفعل في الخلفية تتصل بشبكة
‫Docker معينة. بشكل افتراضي ، هذه هي شبكة الجسر ، حيث سنقوم بالتحقق منها في غضون دقيقة. ثم تقوم كل واحدة من تلك الشبكات
‫التي قد تتصل بها بتوجيهها فعليًا عبر جدار حماية NAT ، وهو في الواقع برنامج Docker الخفي
‫لتكوين عنوان IP للمضيف على واجهته الافتراضية حتى تتمكن حاوياتك من الوصول إلى الإنترنت
‫أو إلى باقي أجزاء جهازك. الشبكة ثم نعود.
‫لكننا لا نحتاج في الواقع إلى استخدام -p عندما يكون لدينا حاويات محددة تريد
‫التحدث مع بعضنا البعض داخل مضيفنا.
‫على سبيل المثال ، إذا كان لديك تطبيق يحتوي على خادم تكميلي وحاوية PHP Apache ، فيجب أن تكون هاتان
‫الحاوياتان على نفس الشبكة ويمكنهما التحدث مع بعضهما البعض دون فتح منافذهما
‫فعليًا لبقية شبكتك الفعلية .
‫إذا كان لديك تطبيق آخر غير ذي صلة ، لنفترض أنه كان يستخدم Mongo و Node. js ، يمكنك إنشاء شبكة لذلك حتى
‫يتمكنوا من التحدث مع بعضهم البعض دون استخدام -p
‫لتعريضهم للشبكة. لكنهم لم يتمكنوا في الواقع من التحدث إلى الشبكة الأخرى
‫حيث قد يكون لديك تطبيق غير ذي صلة قيد التشغيل.
‫لكن الشيء هو أن كل تلك الإعدادات التي وصفتها قابلة للتغيير بالفعل.
‫وهذا يعطي مقولة جيدة يحب Docker استخدامها ... هذا هو البطاريات المضمنة ولكن قابلة للإزالة.
‫سترى أنه خلال هذه الدورة التدريبية ، توجد في كثير من الأحيان إعدادات افتراضية تعمل خارج
‫الصندوق.
‫ليس عليك حتى تحديدها. لقد لاحظت للتو أن الأشياء يتم تكوينها بطريقة معيارية
‫نوعًا ما.
‫لكن الكثير من هذه الخيارات قابلة للتكوين إما في وقت التشغيل أو حتى قابلة للتغيير بعد حدوثها. وسنرى بعضًا من ذلك يحدث هنا
‫عندما نتلاعب بالشبكات.
‫بعض الأشياء التي يمكنك تغييرها بالفعل هي إنشاء شبكات افتراضية متعددة ، ربما
‫واحدة لكل تطبيق ، أو شبكات مختلفة بناءً على متطلبات أمان مختلفة.
‫يمكنك في الواقع ، كما هو الحال في العالم المادي ، أن يكون لديك بطاقتي NIC فعليين على جهاز كمبيوتر حقيقي. يمكنك في الواقع أن يكون لديك شبكتان
‫ظاهريتان متصلتان بحاوية واحدة ، أو يمكنك بالفعل جعل الحاوية تتحدث مع
‫عدم وجود شبكات.
‫يمكنك تخطي أي من إعدادات الشبكة الافتراضية التي تخرج من الصندوق
‫وتستخدم
‫فعليًا - net = host ، وستفقد بعض مزايا الحاوية.
‫ولكن في بعض الحالات قد يكون ذلك مطلوبًا.
‫في وقت لاحق ، سنصل في الواقع إلى برامج تشغيل شبكة Docker. يوجد هذا النظام البيئي الكامل
‫للمكون الإضافي حول Docker الذي يوسع إمكانيات Docker إلى الكثير من أدوات الطرف الثالث.
‫لكن في هذه الحالة ، سنلقي نظرة على اثنين من برامج تشغيل شبكة Docker المختلفة
‫وكيف يمكنهم تغيير شبكاتنا ومنحنا قدرات جديدة.
‫هذا حقا مجرد خدش السطح.
‫هناك بالفعل مفاهيم للشبكات خلال هذه الدورة حيث سنتحدث عن مواضيع أكثر تقدمًا
‫للشبكات الخاصة متعددة المضيفات ومفاهيم مثل الواجهات الفرعية وما إلى ذلك.
‫ولكن في الوقت الحالي ، دعنا نتعمق في بعض عناصر سطر الأوامر.
‫كمراجعة سريعة
‫، دعنا نلقي نظرة على أوامر تشغيل الحاوية الخاصة بنا ... تشغيل حاوية عامل ميناء.
‫إذا كنت تتذكر عندما قمنا بتشغيل حاوية لأول مرة ، فقد استخدمنا -p لفضح المنفذ 80 من Nginx الخاص بنا.
‫أخذ هذا الجانب الأيسر ، وهو المنفذ المضيف ، ويوجه حركة المرور من هذا المنفذ إلى المنفذ
‫80 للحاوية.
‫إذا فعلنا مضيف ويب لميناء حاوية عامل الإرساء ، فسيظهر ذلك في الواقع بتنسيق لطيف وسهل أي المنافذ تقوم بإعادة
‫توجيه حركة المرور إلى تلك الحاوية من المضيف إلى الحاوية نفسها.
‫لم نتحدث عن عنوان IP للحاوية.
‫لذلك قد تفترض فقط أن الحاوية تستخدم نفس عنوان IP مثل المضيف. لكن بشكل افتراضي ، هذا ليس
‫صحيحًا.
‫يمكننا بسهولة الحصول على Docker IP لتلك الحاوية عن طريق فحصها وسنستخدم أمر
‫التنسيق ، أو الخيار حقًا ، والذي ستلاحظ أنه يحتوي بالفعل على تنسيق محدد جدًا لكيفية تصفية
‫العناصر الواردة.
‫يمكنك دائمًا استخدام الأمر grep الذي استخدمناه سابقًا لتصفية إخراج النص الخاص بك
‫، ولكن التنسيق ، التنسيق - format ، هو في الواقع أنظف ومتسق قليلاً. تقوم بعمل قوسين معقوفين ، وبعد ذلك بمجرد أن نتعود
‫على معرفة تنسيق ملف التكوين ، نعلم أن NetworkSettings. عنوان IP هو العقدة الفعلية لإخراج
‫JSON الذي نريد إلقاء نظرة عليه.
‫ثم مضيف الويب. عفوًا ، هذا يعني أنني لم أقم بتهجئتها بشكل صحيح.
‫أنا ف أ د د.
‫وهذا ليس ما كنت أتوقعه.
‫إذا كنت سأستخدم IP الخاص بمضيفي لأنني أعرف أجهزة Mac الخاصة بي على شبكتي المحلية ، وإذا قمت بإجراء ifconfig
‫على جهاز Mac الخاص بي ، فأنا أعلم فقط أن عنوان IP موجود على شبكتي المنزلية أو 1 9 2 1 6 8 الشبكة الفرعية.
‫من المثير للاهتمام أنهم ليسوا نفس الشبكة.
‫فلماذا هذا؟
‫دعنا نرى ما إذا كان سيكون أكثر منطقية إذا رسمتها.
‫إذا كان نظام التشغيل المضيف الخاص بي متصلاً بشبكتي ... هذه شبكتي ... الشبكة المادية. ثم هذه هي واجهة Ethernet
‫على الجهاز المضيف ، وفي حالتي ، يكون جهاز Mac الخاص بي.
‫يوجد جدار حماية صغير هناك يقوم بالعديد من الأشياء. يمنع كل حركة المرور الواردة الواردة من الشبكة بحيث
‫يتم حظر كل شيء افتراضيًا. أود أن أسميها جدار الحماية. أي حركة مرور تخرج
‫من حاوياتي ستكون NATed افتراضيًا.
‫إنه يتصرف كجدار حماية شائع جدًا على الشبكة.
‫ولكن هناك هذا المفهوم للشبكات الافتراضية ، وبشكل افتراضي
‫، سترى شبكة تسمى الجسر أو docker0.
‫عندما تبدأ حاوية جديدة ، سنسميها C1 ، هذه الحاوية متصلة بتلك الشبكة ، تلك الشبكة الافتراضية ،
‫وهذه الشبكة الافتراضية متصلة تلقائيًا بواجهة Ethernet الخاصة بك على مضيفك حتى تتمكن
‫من الخروج.
‫في حالتنا ، عندما أطلقنا Nginx هذا ، أعطيناه a -p 80:80. أخبرها ذلك هنا لفتح المنفذ 80 على واجهة Ethernet
‫الخاصة بي على جهاز Mac الخاص بي وإعادة توجيه أي شيء قادم إلى المنفذ 80 عبر تلك
‫الشبكة الافتراضية إلى المنفذ 80 في تلك الحاوية.
‫بشكل افتراضي ، عندما أقوم بإنشاء حاوية ثانية ، يتم وضعها على نفس شبكة الجسر.
‫يمكن لهاتين الحاوية التحدث بحرية ذهابًا وإيابًا على منافذها المكشوفة.
‫ما لم أحدد -p ، لن تصل أي حركة مرور قادمة إلى شبكاتي الداخلية هنا إلى
‫حاوياتي.
‫يمكنني في الواقع إنشاء المزيد من الشبكات الافتراضية وأطلق عليها ما أريد. سأسمي هذه الشبكة الواحدة
‫تطبيقي ، دعنا نقول. ودعونا نقول أنني قمت بتوصيل حاويتين هنا ... حصلت على MySQL.
‫ثم حصلت على أباتشي.
‫في MySQL ، لم أفتح
‫أي منافذ ، ولم أحدد a -p مطلقًا. لكن في واحدة من طراز
‫Apache ، أعطيتها a -p 8080: 80.
‫هذا يعني هنا على اليمين ، في واجهة Ethernet الخاصة بي على مضيفي ، سيبدأ الاستماع
‫على المنفذ 8080.
‫بمجرد وصول حركة المرور إلى مضيفي على المنفذ 8080 ، فإنها ستوجهها إلى أسفل إلى هذه الشبكة
‫الافتراضية الجديدة التي أنشأتها وإلى خادم Apache على المنفذ 80.
‫داخل هذه الشبكة الافتراضية ، يكون خادم Apache مجانيًا للتحدث إلى خادم MySQL عبر منفذ الاستماع
‫الخاص به.
‫عندما تفكر في الشبكات الافتراضية في Docker ، والمكان الذي تنتمي إليه الحاويات ، فكر في
‫كيفية وضع حاويات مختلفة بالقرب من بعضها البعض لأنها مرتبطة بتطبيقها.
‫كما ترون ، هذان المثالان ، إذا كان لدي حاوية واحدة وحاوية اثنان في أعلى مرتبة
‫شيء مختلف ، إذا لم يتحدثوا إلى الخدمات في هذه الشبكة أدناه ، فمن المنطقي الاحتفاظ
‫بها لهم على شبكات افتراضية منفصلة.
‫إذا كان عليهم التحدث مع بعضهم البعض ، فسيتعين عليهم المرور عبر منافذهم المنشورة
‫طوال الطريق للخروج والعودة.
‫للتذكير ، لا يمكنك الاستماع إلى أكثر من منفذ واحد لحاويات متعددة على أي واجهة على مضيفك.
‫لذلك ، لا يمكن أن يكون لديك حاويتان تستمعان على المنفذ 80 على مستوى المضيف.
‫واحد فقط يمكنه فعل ذلك.
‫إذا حاولت بدء حاوية أخرى ، فستخطئ بالفعل وتقول أن هناك شيئًا
‫آخر بالفعل على هذا المنفذ. هذا ليس قيد Docker. هذا مجرد قيود على كيفية عمل
‫شبكات IP عادةً.
‫مجرد تلخيص سريع لهذا القسم. لقد أمضينا الكثير من الوقت في الواقع على مفاهيم شبكات Docker
‫، بما في ذلك كشف المنافذ الموجودة على مضيفك للشبكة المادية باستخدام -p. تركز فكرة Docker على الافتراضات العقلية
‫حيث يسمونها البطاريات متضمنة ولكنها قابلة للإزالة.
‫كيف بالنسبة للتطوير المحلي والاختبار ، ربما يمكنك التغلب على الإعدادات الافتراضية ، ولكن كل شيء قابل للتغيير.
‫ثم تعرفنا على أمر منفذ الحاوية وهو طريقة سريعة للنظر إلى المنافذ المكشوفة
‫للحاويات الخاصة بك.
‫ثم قمنا بتفكيك الحزم التي تتحرك حول الشبكات الافتراضية ومدى ارتباطها بالشبكات الافتراضية
‫الأخرى ، وكيف تدخل وتخرج من جهاز Docker الخاص بك.
‫لذا ، فهذه كلها مفاهيم جيدة حقًا لفهمها عندما نقفز إلى عناصر CLI الفعلية في المحاضرة التالية.