‫دعنا نتعمق في Dockerfile ، وهو في الواقع وصفة لإنشاء صورتك.
‫حتى الآن ، تم إنشاء جميع صور Docker التي استخدمناها من Dockerfiles حيث يمكنك الذهاب لإلقاء نظرة عليها
‫على Docker Hub.
‫إذا قمت باستنساخ المستودع الخاص بي من الموارد المدرجة في القسم الأول ، فسترى نموذج ملف عامل ميناء
‫1 ، وهناك يجب أن يكون لدينا ملف واحد فقط. ملف Dockerfile.
‫سننتقل سطراً بسطر ونتحدث عن هذه المقاطع المختلفة. يبدو أن ملف Dockerfile يشبه برنامج نصي
‫شل ، لكنه ليس كذلك.
‫إنه ليس ملف دفعي ، وليس برنامج نصي. إنها لغة ملف مختلفة تمامًا وهي فريدة
‫من نوعها لـ Docker والاسم الافتراضي هو Dockerfile بحرف D.
‫ولكن ، من سطر الأوامر ، كلما احتجت إلى التعامل مع Dockerfile باستخدام
‫أمر docker ، يمكنك بالفعل استخدام dash f. وهو أمر شائع بالفعل بين الكثير من الأدوات مع Docker
‫، يمكنك استخدام شرطة f لتحديد ملف مختلف عن الملف الافتراضي.
‫إذن ، أول ما هو من الأمر. الأمر from موجود في كل ملف Dockerfile. يجب أن تكون هناك.
‫عادة ما يكون توزيعًا ضئيلًا.
‫في هذه الحالة هو دبيان.
‫لكن في كثير من الأحيان في الوقت الحاضر ستكون جبال الألب.
‫وبالفعل ، فإن سبب استخدامك لهذه الأشياء هو توفير الوقت والألم. لأن هذه التوزيعات الصغيرة هي في الواقع أصغر
‫بكثير من الأقراص المضغوطة التي قد تستخدمها لتثبيت جهاز ظاهري منها.
‫على سبيل المثال ، لا يحتوي Ubuntu one حتى على cURL ، في حين أنه من الواضح ، إذا قمت بتثبيت
‫Ubuntu كامل على VM ، فسيكون لديه cURL والكثير من الأوامر الأخرى المثبتة بالفعل.
‫نظرًا لأن جميع هذه التوزيعات هي صور رسمية ، فهذا يعني أنها ستكون دائمًا على
‫اطلاع بأحدث تصحيحات الأمان ويمكنك الاعتماد عليها والثقة بها.
‫وإحدى الفوائد الرئيسية لاستخدامها في الحاويات هي استخدام أنظمة توزيع الحزم الخاصة بهم لتثبيت
‫أي برنامج تحتاجه في الحزمة الخاصة بك.
‫في هذه الحالة ، نستخدم في الواقع إصدار Jessie ، وهو ما بعد القولون.
‫وكما تتذكر من محادثة Docker Hub ، هناك الكثير من الخيارات المختلفة التي يمكنك تحديدها
‫هنا لمستودع دبيان.
‫بعد ذلك ، لدينا مقطع ENV ، و ENV لمتغيرات البيئة.
‫إنها طريقة لتعيين متغيرات البيئة ، والتي تعد في الواقع مهمة جدًا في الحاويات
‫لأنها الطريقة الرئيسية التي نضع بها المفاتيح والقيم لبناء الحاويات وتشغيل الحاويات.
‫في هذه الحالة ، يتم بالفعل تعيين إصدار Nginx الذي يريد منا تثبيته وسيتم تعيين متغير
‫البيئة هذا حتى تتمكن أي سطور لاحقة من استخدامه.
‫الآن ، كتذكير من المحاضرات السابقة ، كل واحدة من هذه المقاطع هي طبقة فعلية في صورة Docker الخاصة
‫بنا.
‫لذا فإن ترتيبها مهم في الواقع ، لأنه يعمل من أعلى لأسفل.
‫كما سترى من خلال هذا الأمر طويل المدى نسبيًا هنا للأمر التالي. سترى أنه يبدو وكأنه أمر
‫واحد طويل.
‫ما تفعله هو مجرد تنفيذ أوامر shell داخل هذه الحاوية أثناء إنشائها.
‫سترى عادةً أوامر التشغيل عندما تحتاج إلى تثبيت برنامج مع مستودع الحزم ، أو تحتاج إلى القيام
‫ببعض عمليات فك الضغط أو بعض عمليات تحرير الملفات داخل الحاوية نفسها.
‫يمكن لأوامر التشغيل أيضًا تشغيل برامج نصية shell التي نسختها مسبقًا في الملف أو أي أوامر يمكنك
‫الوصول إليها من داخل الحاوية
‫في تلك المرحلة الزمنية في الملف.
‫نظرًا لأننا قادمون من دبيان ، فإن أمر التشغيل هذا لديه حق الوصول إلى جميع الأوامر والثنائيات التي كان
‫من الممكن تثبيتها مع هذا الإصدار.
‫وفي هذا الأمر الخاص بـ Nginx ، فإن قائمة الأوامر هذه تضيف إلى حد ما مفتاحًا إلى المستودع
‫حيث يمكنك الحصول على الحزمة لتثبيت أحدث Nginx من مستودع Nginx الرسمي.
‫هناك بعض الأشياء هنا التي تعتبر أساسية حقًا في إنشاء ملفات Dockerfiles جيدة وسنتحدث
‫بالفعل عن هذا أكثر في قسم لاحق حيث نتحدث عن أفضل الممارسات.
‫لكن شيئين يجب ملاحظتهما.
‫السبب في أننا نضيف كل هذه الأوامر مع علامة العطف المزدوجة هنا ، بحيث يتم ربطها
‫واحدة تلو الأخرى ، لأنه ، إذا كنت تتذكر ، كل مقطع هو طبقته الخاصة.
‫ما يفعله هذا هو ضمان احتواء كل هذه الأوامر في طبقة واحدة.
‫إنه يوفر لنا القليل من الوقت.
‫يوفر لنا مساحة. ومن الشائع جدًا أنك ستراها على الأرجح في كل ملف Dockerfile على Docker Hub.
‫حسنًا ، في السطر 27 لدينا أمر تشغيل آخر.
‫هذا هو كل شيء عن توجيه ملفات السجل لدينا إلى stdout
‫وإلى stderr.
‫سنرى لاحقًا ، الطريقة الصحيحة للقيام بالتسجيل داخل الحاوية هي عدم تسجيل الدخول إلى ملف السجل. وليس هناك syslogd أو أي خدمة سجل نظام
‫أخرى داخل الحاوية.
‫يقوم Docker في الواقع بمعالجة جميع عمليات التسجيل نيابة عننا. كل
‫ما يتعين علينا القيام به داخل الحاوية هو التأكد من أن كل شيء نريد التقاطه في السجلات هو بصق إلى stdout وسيتولى
‫stderr و docker التعامل مع الباقي.
‫هناك بالفعل برامج تشغيل تسجيل يمكننا استخدامها في Docker Engine نفسه للتحكم في جميع السجلات
‫لجميع الحاويات على مضيفنا.
‫وهذا ما تريد فعله معهم حقًا.
‫يضيف المزيد من التعقيد إلى تطبيقك إذا كان تطبيقك يقوم بالفعل بالتسجيل بنفسه.
‫وبعد ذلك ، إذا كان عليك التعامل مع الملفات الموجودة في كل حاوية ، فلديك الآن مشكلة في كيفية
‫إخراج هذه الملفات ، وإمكانية البحث فيها ، والوصول إليها. هنا ، نأخذ سجلات Nginx الافتراضية ونربطها
‫بالفعل بـ stdout.
‫حتى يتمكن Docker من التقاطهم.
‫لدينا أيضًا أمر فضح.
‫افتراضيًا ، لا توجد منافذ TCP أو UDP
‫مفتوحة داخل الحاوية. لا يعرض أي شيء من الحاوية إلى شبكة افتراضية إلا إذا قمنا
‫بإدراجها هنا.
‫وبالطبع ، نظرًا لأن هذا خادم ويب وخادم وكيل ، فإنه سيكشف 80 و 443.
‫الآن ، لا يعني هذا الأمر expose أن هذه المنافذ سيتم فتحها تلقائيًا على مضيفنا.
‫هذا ما هو الأمر dash P عندما نستخدم docker run.
‫أخيرًا ، لدينا CMD هنا. CMD عبارة عن معلمة مطلوبة وهي الأمر الأخير الذي
‫سيتم تشغيله في كل مرة تقوم فيها بتشغيل حاوية جديدة من الصورة ، أو في كل مرة تقوم فيها بإعادة تشغيل حاوية متوقفة.
‫هناك بعض الوثائق الممتازة حقًا على كل هذه المقاطع ، بالإضافة إلى الكثير ، سننتقل إليه لاحقًا ، على موقع
‫توثيق Docker في docs. عامل ميناء. com ، والتي يمكنك
‫العثور عليها في مصادر هذه المحاضرة.
‫حسنًا ، هذه هي الأساسيات ، أليس كذلك؟ هذه المقاطع الخمسة المختلفة طبيعية جدًا في كل ملف Docker.
‫بعضها مطلوب.
‫بعضها ، مثل الجري ، و ENV ، والعرض ، اختياري ، لكنها نموذجية جدًا لمعظم الحاويات
‫التي ستنشئ صورًا لها.