‫ستتمحور هذه المحاضرة حول إضافة صورة إلى ملفات Compose الخاصة بك بحيث تضمن
‫تلقائيًا أن لديك صورة جاهزة للذهاب
‫عند تشغيل أوامر الإنشاء. مثل المحاضرين الآخرين في هذا القسم
‫، تحتاج حقًا إلى أن يكون لديك فكرة جيدة عن Docker container ووظيفة سطر أوامر Docker image.
‫هناك شيء آخر يمكن أن يقدمه لك تطبيق Compose وهو إنشاء صورك في وقت التشغيل. سيبحث في الواقع في ذاكرة التخزين المؤقت للصور
‫، وإذا كان يحتوي على خيارات إنشاء فيه ، فسوف يقوم ببناء تلك الصورة عند استخدام الأمر up.
‫لن تبني الصورة في كل مرة.
‫سوف يبنيها فقط إذا لم تجدها.
‫ستحتاج إما إلى استخدام docker compose build لإعادة بناء صورك إذا قمت بتغييرها
‫، أو يمكنك استخدام docker compose up --build.
‫سنرى ذلك في الواقع في غضون دقيقة.
‫يعد هذا أمرًا رائعًا حقًا عند استخدام Compose محليًا ولديك صور تريد إنشاءها. ربما لا تريد استخدام
‫وحدة التخزين. تريد فعلاً نسخ الملفات في الصورة أو شيء من هذا القبيل.
‫قد يكون أمر البناء الخاص بك معقدًا إلى حد ما. قد تحتوي على بعض متغيرات البيئة المخصصة
‫أو بناء الوسائط.
‫بالمناسبة ، بناء الحجج ، لم نتحدث عنها. هذا في الحقيقة مجرد متغيرات البيئة المتوفرة
‫فقط أثناء الإنشاءات. يمكنك إلقاء نظرة على المستندات. عامل ميناء. com على Dockerfiles
‫وسيتحدث عن بناء الحجج في العمق.
‫هنا ، سنلقي نظرة على مثال لكيفية استخدامك لذلك محليًا.
‫أنا في دليل تكوين العينة 3. يمكنك أن ترى هنا أن لدي ملف Docker Compose مبني
‫مسبقًا هنا.
‫لدي بالفعل ملف Dockerfile يسمى nginx. ملف Dockerfile. ثم تكوين nginx مشابه لما كان لدينا
‫سابقًا ، حيث نستخدم Nginx بالفعل كوكيل عكسي لموقعنا على الويب.
‫إذا انتقلنا إلى Docker Compose ، يمكنك أن ترى كيف صممت هذا الحل.
‫لقد حصلت بالفعل على خدمتين.
‫أحدهما هو وكيل Nginx كما كان من قبل ، والآخر هو خادم الويب Apache كما كان من قبل.
‫لكن هناك شيئين مختلفين.
‫بدلاً من أن أحدد الصورة الافتراضية لـ Nginx ، أقوم بالفعل ببناء صورة مخصصة.
‫يمكنك أن ترى هنا أنني قدمت بالفعل بعض الحجج حيث أخبرها أن Dockerfile الذي يحتاج
‫إلى استخدامه هو ملف Dockerfile المسمى خصيصًا.
‫أريده أن يبني ملف Docker هذا في هذا الدليل الحالي الموجود فيه. أريد تسمية تلك الصورة عند
‫إنشائها ، nginx
‫-custom. ستقوم بتخزين ذلك في ذاكرة التخزين المؤقت المحلية الخاصة بي. ثم هناك في الأسفل ، لدينا خادم
‫ويب يقوم بتشغيل Apache.
‫ما فعلته هنا هو أنني قمت بالفعل بتثبيت بعض ملفات مصدر HTML التي لدي في خادم Apache.
‫لذا فإن السيناريو هنا هو ربما أنا مطور
‫ويب ، ولدي موقع ويب ثابت هنا ، أسفل
‫دليل HTML هذا ولا داعي للقلق بشأنه كثيرًا.
‫إنه فقط يستخدم قالب تمهيد صغير.
‫سأقوم بتحرير ذلك محليًا ، في المحرر الخاص بي هنا ، لكنني أعرف عندما أذهب إلى الإنتاج
‫بهذا ، سيكون في الواقع خلف وكيل Nginx.
‫لذا ، أريد محاكاة بيئة الإنتاج هذه قدر الإمكان ، محليًا ، فقط للتأكد من التخلص
‫من أي أخطاء أو مشاكل. في هذه الحالة ، أريد Nginx
‫هذا ، وأنا أعلم أن تهيئة Nginx هذه هي التي سيستخدمونها على
‫خادم الإنتاج ، لذا سأستخدمها هنا.
‫هذا هو في الواقع نفس تكوين Nginx كما كان من قبل.
‫عندما أقوم بتشغيل أمر إنشاء عامل الإرساء ، فسوف يتحقق أولاً من اسم هذه الصورة
‫في ذاكرة التخزين المؤقت الخاصة بي. إذا لم يتم العثور عليه ، فسيستخدم أوامر البناء هذه هنا
‫للبحث عن Dockerfile ثم إنشاء صورتي. يمكنك أن ترى من Dockerfile هذا ، إنه بسيط جدًا في الواقع.
‫سيستخدم فقط إصدارًا محددًا من Nginx ثم يقوم بنسخ ملف بتنسيق.
‫سيحصل على بقية المعلومات الخاصة به من تهيئة Nginx من Docker Hub ثم سيتم
‫نسخها في تكوين Nginx الخاص بي.
‫إذا كنت تتذكر في مثال سابق ، فقد قمنا بالفعل بإجراء عملية ربط ربط للحصول على تهيئة Nginx هذه من خلال ملف
‫الإنشاء الخاص بنا.
‫في هذه الحالة ، نريدها فقط أن تبني الصورة بأكملها.
‫لا نحتاج حقًا إلى تغيير تكوين الوكيل هذا ، لذلك لا أحتاج حقًا إلى تثبيته حتى أتمكن من
‫تغييره طوال الوقت.
‫أنا فقط أريدها أن تعمل. حق؟ لذا ، سأقوم ببنائه. دعها تجلس في ذاكرة التخزين المؤقت للصور. بمجرد بنائه في المرة
‫الأولى ، لن يحتاج إلى إعادة بنائه كثيرًا.
‫لذا سأغادر هناك.
‫ثم عندما أقوم بالتحرير والتطوير على موقع الويب الخاص بي ، سأحصل على هذا التكوين
‫حتى أتمكن من إجراء تعديلات مباشرة. إذا عدنا إلى هنا وقمت بتأليف عامل الرصيف
‫، فلنستعرض ما حدث.
‫لقد أنشأت الشبكة لأول مرة.
‫هذا شيء طبيعي. يفعل ذلك.
‫ثم يُرى في الواقع أن خدمة الوكيل لا تحتوي على الصورة التي تبحث عنها. لذلك ستقوم ببناء
‫ذلك.
‫لذلك فهي تقوم بسحب Dockerfile وبناءه تمامًا كما يفعل أمر بناء عامل الإرساء العادي.
‫ثم يقدم لي هذه النصيحة المفيدة لإخباري أنه بنى الصورة هذه المرة لأنه لم يتمكن من العثور
‫عليها.
‫ولكن في المستقبل ، إذا كنت بحاجة إلى تغيير تلك الصورة ، فسوف أحتاج إلى استخدام إنشاء عامل الإرساء
‫أو تكوين عامل الميناء - أوامر البناء. الآن بعد أن حصلت على الصورة ،
‫يمكنها بالفعل إنشاء الحاويات. ثم يبدأ خادم الويب الخاص بي وخادم الوكيل الخاص بي.
‫إذا كان كل شيء يعمل بشكل صحيح ، يجب أن أتمكن من الحصول على مضيف محلي. لقد قام بسحب القالب الافتراضي الخاص بي هنا ، وهو نموذج
‫تمهيد التشغيل في الواقع.
‫يبدو أن كل شيء يعمل.
‫في الواقع ، أذهب إلى هنا وأستطيع أن أرى جميع سجلاتي تظهر ومن الواضح أن هناك الكثير من الأصول. هناك إدخال سجل لكل واحد
‫وسيذهب من خلال الوكيل وعبر خادم الويب.
‫نظرًا لأنني ربطت هذا الدليل بالتحرير ، يمكنني في الواقع العودة إلى المحرر الخاص بي. بصفتي مطور ويب ، يمكنني الدخول وربما ، كما
‫تعلم ، تعديل شيء ما على موقع الويب. ربما سأدخل عنوان بدء التشغيل
‫، والذي يجب أن يكون هذا العنوان الصغير في الأعلى هنا.
‫سأحفظ هذا الملف فقط. ثم إذا قمت بالتحديث ، فسيتم تحديث موقع الويب الخاص بي بسبب هذا الربط مرة أخرى.
‫هذا مثال رائع على إعداد مطور شائع جدًا حيث تحتاج إلى إنشاء بعض الصور المخصصة
‫محليًا.
‫تحتاج أيضًا إلى تحميل بعض الملفات في التطبيق الخاص بك حتى تتمكن من تحريرها في وقت التشغيل.
‫وبالطبع ، إذا احتاج هذا إلى أن يكون تطبيقًا مدعومًا بقاعدة البيانات ، فسأضيف خدمة
‫ثالثة هنا لخادم قاعدة البيانات. بعد ذلك ، سأعود وأقوم بالتنظيف.
‫ستلاحظ أنه ، بشكل افتراضي ، لن تحذف تلك الصورة بالفعل.
‫ستلاحظ في الجزء العلوي هنا ، أن لدينا مخصص nginx الذي أنشأه. ولكن هناك عامل ميناء يؤلف
‫الأمر.
‫إذا نظرت إلى المساعدة ، فسترى أن هناك خيار rmi يزيل فعليًا الصور التي قد تكون قد أنشأتها
‫أو ربما تستخدمها.
‫يوجد هذا الخيار الفعلي هنا يقول ، "أزل فقط الصور التي ليس لها علامة مخصصة تم تعيينها بواسطة حقل
‫الصورة. شيء واحد يمكنني
‫القيام به هنا إذا كنت أرغب في جعل هذا الأمر أكثر تلقائية ، هو أنه يمكنني فقط إخراج أمر الصورة
‫هذا هناك. دعنا فقط نزيل ذلك. ثم أريد تنظيف سريع حقيقي. سأقوم
‫فقط بإزالة صورتي. عامل ميناء صورة جمهورية مقدونيا مخصصة. كما ترون ، لقد ذهب هناك.
‫حسنا. أريد أن أفعل عامل البناء يؤلف مرة أخرى.
‫وهذه المرة سنقوم بعمل a -d.
‫ستلاحظ خلال هذه الأمثلة من Compose ، أنه في الواقع يقوم بتسمية الحاويات ووحدات التخزين
‫والشبكات باسم الدليل باعتباره اسم المشروع.
‫هذا في الواقع شيء في Compose حيث ، لمنع تعارض الأسماء
‫، سيضيف دائمًا اسم الدليل في بداية جميع الأصول حتى لا تتعارض مع الأصول الأخرى.
‫يمكنك بالفعل تغيير اسم الوكيل هذا من خلال سطر الأوامر.
‫إذا ذهبت تحقق من وثائق الإنشاء.
‫لكن النقطة التي أردت توضيحها هنا هي أنه إذا قمت بعمل صورة عامل ميناء هنا ، فسترى أنها في الواقع سميت صورتي
‫نيابة عني.
‫لذلك لا يتعين علي استخدام خيار الصورة هذا تقنيًا.
‫ولكن إذا أردت اسمًا محددًا له حتى أتمكن من التعرف عليه لاحقًا ، فيمكنني ذلك.
‫السبب الذي جعلني أقوم بإحضار ذلك هو في الواقع أنظف قليلاً لأن ما يمكنني فعله
‫بعد ذلك هو تكوين عامل الإرساء ، وتذكر في المساعدة ، أنه يمكنني استخدام نوع rmi. لذلك عندما أقوم بتنظيفه ، وأرغب في الحفاظ على نظافة بيئة
‫Docker الخاصة بي ، يمكنني أن أفعل ذلك باستخدام rmi المحلي.
‫ما سيفعله ذلك هو حذف تلك الصور أيضًا.
‫سترى هنا في الأسفل أنه تم حذف الصورة.
‫ليس شيئًا أفعله طوال الوقت ، لكن ربما إذا كان لدي مشروع كبير به الكثير من الصور المخصصة
‫ولا أريده أن يفجر نظامي عندما لا أقوم بالتطوير في هذا المشروع ، سأستخدم rmi
‫local ، وسيقوم دائمًا بتتبع الصور المخصصة التي كان عليه إنشاءها.
‫بالطبع ، إذا استخدمت الكل ، فسيحذف بالفعل كل صورة تم استخدامها في هذا المشروع والتي
‫قد لا ترغب في القيام بها لأنه في هذه الحالة ، قد يحذف خادم الويب httpd Apache ، وقد ترغب في أن البقاء
‫في الجوار لبعض الوقت. نعم.
‫لقد تعلمت الكثير عن التأليف في هذا القسم.
‫سنستخدم التأليف في بقية هذه الدورة التدريبية.
‫سنواصل البناء على هذه المهارات ونحن نمضي قدمًا.