إنشاءات Docker متعددة المراحل: صور إنتاجية أصغر ذات غرض أكثر وضوحًا
افهم كيف تفصل مراحل البناء التجميع عن وقت التشغيل، ولماذا لا تزال محتويات الصورة والأسرار والتحقق بحاجة إلى قرارات مدروسة.

?????? ???? ???? ??? ????? ????????? ????????.
فهم ما يجب أن تفعله صورة الإنتاج
تحتوي صورة الحاوية على الملفات والتكوينات اللازمة لبدء العملية. يحتاج التطوير غالبًا إلى مترجمين وأدوات اختبار وملفات مصدر لا يتطلبها التطبيق قيد التشغيل. يمكن أن يؤدي شحنها جميعًا إلى زيادة حجم الصورة وجعل فحص وقت التشغيل أكثر صعوبة. قبل تغيير ملف Dockerfile، حدد أمر بدء التشغيل الفعلي والملفات المطلوبة وتبعيات نظام التشغيل. الهدف هو قطعة أثرية قابلة للتكرار في وقت التشغيل. الصورة الصغيرة التي لا يمكن أن تبدأ بشكل صحيح أو تفتقر إلى الأصول المطلوبة لا تعتبر عملية تحسين ناجحة.
مبنى منفصل عن التشغيل
يستخدم ملف Dockerfile متعدد المراحل مرحلة واحدة لإعداد التطبيق وأخرى لحزم نتيجة وقت التشغيل. قد تقوم مراحل البناء بتثبيت تبعيات التطوير وتشغيل الترجمة. تقوم المرحلة النهائية بنسخ المخرجات المحددة ومواد وقت التشغيل المطلوبة فقط. قم بتسمية المراحل بوضوح حتى يظل الغرض منها مفهومًا. يساعد الفصل على تجنب نقل مساحة عمل البناء بأكملها إلى الإنتاج، لكنه لا يحدد الملفات الآمنة أو الضرورية تلقائيًا. لا تزال هذه القرارات تعتمد على كيفية إنشاء التطبيق المحدد وبدء تشغيله.
تحديد مخرجات وقت التشغيل الخاصة بالإطار
لا يشترك نشر Next.js وخدمة NestJS المترجمة وتطبيق Spring Boot في نفس البنية الاصطناعية. قم بمراجعة إطار العمل وتكوين المشروع بدلاً من نسخ ملف Dockerfile بشكل أعمى. تحديد ما إذا كانت الأصول الثابتة أو القوالب أو المكتبات الأصلية يجب أن تصاحب المخرجات المجمعة. لا يثبت التجميع الناجح داخل المنشئ أن الصورة النهائية تحتوي على كل ما هو مطلوب. تحقق من مسار بدء التشغيل الفعلي للتطبيق والطلب المهم مقابل المرحلة النهائية، بما في ذلك الملفات التي يتم تحميلها فقط بعد الوصول إلى الصفحة الأولى أو نقطة النهاية.
حافظ على تثبيت التبعية قابلاً للتكرار
استخدم ملف قفل المشروع ووضع التثبيت المناسب للبنيات القابلة للتكرار. نسخ التبعية المنفصل عن المصدر المتغير بشكل متكرر حيث يساعد ذلك في إعادة استخدام ذاكرة التخزين المؤقت. لا تضحي بصحتك من أجل بناء سريع مخبأ: يجب أن تؤدي التغييرات في إعلانات التبعية إلى إبطال الخطوة المناسبة. راجع ما إذا كانت البرامج النصية للتثبيت أو الحزم الأصلية تحتاج إلى معالجة خاصة. يجب أن تتوافق تبعيات الإنتاج مع بيئة وقت التشغيل. قد يفشل التطبيق الذي يعمل على جهاز المطور إذا كانت الصورة النهائية تستخدم نظامًا أساسيًا غير متوافق أو تغفل مكتبة مطلوبة بواسطة وحدة مجمعة.
التحكم في سياق البناء عمدا
يحدد سياق البناء الملفات المحلية التي يمكن إرسالها إلى المنشئ. استخدم ملف تجاهل مناسبًا لاستبعاد المخرجات غير ذات الصلة وذاكرة التخزين المؤقت المحلية وملفات البيئة الخاصة. الأمر اللاحق الذي يحذف سرًا لا يجعل نسخه إلى طبقة صورة سابقة آمنًا. قم بمراجعة كل من السياق وعمليات النسخ الخاصة بملف Dockerfile. اجعل مدخلات التطبيق واضحة بدرجة كافية حتى يتمكن مشرف آخر من فهمها. يمكن أن يؤدي تقليل محتوى السياق العرضي أيضًا إلى تسريع عمليات البناء، ولكن منع الملفات الخاصة أو غير ذات الصلة من الدخول إلى العملية هو هدف التصميم الأكثر أهمية.
تعامل مع أسرار البناء وأسرار وقت التشغيل بشكل مختلف
قد يحتاج البناء إلى بيانات اعتماد مؤقتة لاسترداد التبعية الخاصة. قد يحتاج التطبيق قيد التشغيل إلى بيانات اعتماد مختلفة للاتصال بالخدمة. ولا ينبغي ترميز أي منهما في ملف Dockerfile أو التكوين الملتزم به. استخدم الآليات السرية المناسبة لمنصة الإنشاء والنشر وتجنب طباعة القيم الحساسة في السجلات. تحقق مما يصبح جزءًا من مخرجات التطبيق التي تم إنشاؤها، خاصة بالنسبة لتكوين الواجهة الأمامية التي يتم كشفها عمدًا للمتصفحات. يساعد التصميم متعدد المراحل على فصل العمل، لكنه لا يمنع تلقائيًا تضمين السر في ملف مجمع.
تشغيل مع الأذونات التي تتطلبها العملية
قم بمراجعة مستخدم وقت التشغيل والأدلة القابلة للكتابة والمسارات المثبتة. عندما يدعمه التطبيق، فإن التشغيل بدون امتيازات غير ضرورية يمكن أن يقلل من عواقب العملية المخترقة. يجب أن تظل ملكية الملف تسمح ببدء التشغيل المشروع والعمليات المؤقتة. لا تقم ببساطة بتبديل المستخدمين وتفترض أن ذاكرة التخزين المؤقت لكل إطار عمل أو دليل التحميل سيعمل. اختبر سلوك نظام الملفات النهائي للمستخدم المختار. يجب أن تتماشى أذونات النشر والتخزين المثبت مع تصميم الصورة بحيث لا يتطلب التطبيق تغييرات في أذونات الطوارئ بعد الإصدار.
اختر الصورة الأساسية لوقت التشغيل واحتفظ بها
يمكن أن يؤدي الحد الأدنى من الصورة الأساسية إلى تقليل المكونات المضمنة، ولكن التوافق وقابلية الصيانة مهمان. فهم نظام التشغيل وإصدار وقت التشغيل والتبعيات الأصلية. استخدم عملية تحديث متعمدة وقم بمسح القطعة الأثرية النهائية بدلاً من المنشئ فقط. يمكن لملخص الصورة تحديد قاعدة دقيقة، في حين لا تزال هناك حاجة إلى عملية صيانة لاعتماد التحديثات. أصغر لا يعني معرضة للخطر. والنتيجة المفيدة هي مجموعة معروفة ومدعومة من محتويات وقت التشغيل التي يمكن لفريقك تحديثها والتحقق منها عند تغيير التبعيات أو متطلبات الأمان.
مثال: نجح البناء ولكن الأصول الثابتة تختفي
يتم تجميع تطبيق الويب بنجاح في مرحلة الإنشاء. تقوم المرحلة النهائية بنسخ مخرجات الخادم ولكنها تتجاهل الدليل العام المطلوب. تبدأ العملية، لكن الصور والملفات القابلة للتنزيل تعرض أخطاء. اختبار أمر البناء فقط سوف يفوتك هذا. ابدأ الصورة النهائية واطلب صفحة فعلية بالإضافة إلى أصولها المهمة. ثم قم بتوثيق أدلة الإخراج المطلوبة ولماذا. يوضح هذا المثال أن عمليات البناء متعددة المراحل هي مشكلة في تصميم التغليف، وليست مجرد طريقة لتصغير حجم الصورة المبلغ عنها.
دمج القطعة الأثرية في عملية الإصدار
أنشئ صورة تم إصدارها وحدد القطعة الأثرية المستخدمة في كل بيئة. تجنب إعادة البناء مع وجود اختلافات غير منضبطة بين التحقق من الصحة والإصدار. يجب أن توفر عملية النشر تكوينًا خاصًا بالبيئة من خلال آلية متفق عليها وتحتفظ بالعنصر المعروف السابق لاسترداده. تظل فحوصات الجاهزية وإمكانية ملاحظة التطبيق ضرورية؛ إن اكتمال تشغيل الحاوية ليس دليلاً على أن الخدمة يمكنها أداء عمل مفيد. يمكننا توصيل إعداد الصورة بخط أنابيب CI الحالي دون استبدال أدوات النشر الموثوقة لمجرد تقديم سير عمل حاوية مختلف.
ورشة العمل: فحص ما يصل إلى الصورة النهائية
اختر خدمة واحدة وقم بإدراج ملفات وقت التشغيل الفعلية والأوامر والمسارات القابلة للكتابة. قم بإنشاء منشئ ومرحلة نهائية، ثم قارن المحتويات الناتجة مع تلك القائمة. ابدأ الصورة النهائية باستخدام التكوين التمثيلي واختبر رحلة مهمة، وليس فقط نقطة نهاية صحية. تأكد من عدم وجود ملفات البيئة المحلية وبيانات اعتماد البناء. قم بتضمين تغيير التبعية في البنية الثانية للتحقق من سلوك ذاكرة التخزين المؤقت. قم بتسجيل المفاضلات حتى يتمكن مطور آخر من صيانة ملف Dockerfile دون إعادة تقديم مساحة عمل التطوير الكاملة.
الأسئلة المتداولة
هل كل تطبيق يحتاج لمراحل عديدة؟ استخدم المراحل التي توضح فيها مسؤوليات الإعداد ووقت التشغيل. هل الصورة الصغيرة تضمن الأمان؟ لا؛ لا تزال محتويات وممارسات التكوين والتحديث مهمة. هل يجب علينا نسخ ملف Dockerfile من إطار عمل آخر؟ قم بتكييفه مع إخراج وقت التشغيل الفعلي والتحقق من الصورة النهائية. ما الذي يمكن لـ Tuplify Studio المساعدة فيه؟ تعبئة الحاويات وبناء خطوط الأنابيب وتكوين النشر وإجراءات الاسترداد لتطبيقات الأعمال. ابدأ بخدمة واحدة قابلة للتكرار وقم بتوسيع النموذج فقط بعد اختبار المنتج النهائي.
ما يمكننا تطويره لك
يمكن لـ Tuplify Studio وضع تطبيقات Next.js وNestJS وSpring Boot في حاويات، وتحسين خطوط الأنابيب وإعداد سير عمل النشر والاسترداد القابل للصيانة.
لنتحدث عن مشروعكللمزيد · الوثائق الرسمية
Docker — Multi-stage buildsTuplify Studio · أدلة تعليمية أُعدت بمساعدة الذكاء الاصطناعي. الأمثلة توضيحية.



