
2025-09-04
10 دقائق للقراءه
شلون تقلل حجم ملفات الدوكر (بالاخص لتطبيقات النود) بنسبه تصل الى 92 بالميه !! من 2 كيكا الى 250 ميكا
المشكله وخطورتها !؟
تخيل عندك حاسبه وبيها مساحه فقط 10 كيكا, يعني الهارد كله 10 كيكا بي, وعندك 5 العاب متنصبات وكل لعبه تاخذ 2 كيكا, المشكله هسه المساحه كلها منأخذه, وهذا الشي ممكن بشكل كبير يأثر على اداء الالعاب الباقيه بشكل عام. بس انت تدري بشكل او اخر, وحده من الالعاب ممكن تضغطها او تمسح فايلات من عدها ممطلوبه بدون متأثر على اداءها, وهذا الشي بي فائده كلش كلش جبيره على باقي الالعاب وعلى اداء الكمبيوتر بشكل عام.
خل نحجي على المشكله الواقعيه الي واجهتني !
جنت داشتغل على ال CI/CD بالشركه الحاليه الي داشتغل عليها باستخدام ال AzureDevOps وواجهنه مشكله والي هيه عدنه وحده من تطبيقات ال front-end من نحولها لصوره دوكر او دوكر فايل خنكول حجمها يوصل ل 2 كيكا !!! اي نعم 2 كيكا !! وهو مجرد تطبيق front-end, واحد من زملاء العمل كلي لازم ثم لازم اكو طريقه نقلل حجم الملف مستحيل هلكد ياخذ ما معقول, وكال ممكن نقلل حجمها بنسبه 50 بالميه, اني مصدكته, كتله لا وين اكو هيج شي, اكلي اتعمق بالموضوع وحتكتشف. جان مصر لان ال Docker image جانت تاخذ حجم من السيرفر بشكل مو معقول. هذا الموضوع سببلنه مشكلتين:
- جانت تاخذ مساحه كلش جبيره من ال Virtual machine الجانت مسؤوله عن Hosting مال هذا التطبيق.
- جان Build time كلش ياخذ وقت بال CI/CD.
شلون نقدر نصغّر حجم صورة الدوكر لتطبيق NodeJs بالضبط؟
لا تنسى ملف .dockerignore بالمشروع مالتك !!!
صدقني ما تريد ملفات أو مجلدات غير ضرورية ب DockerImage مالتك (مثل node_modules أو ملفات الإعدادات اللي ما تحتاجها، وهكذا) فأحسن فكرة تسوي ملف .dockerignore بجذر المشروع بنفس مستوى الـ Dockerfile.
راح يكون فيه شي مثل:

استخدم استراتيجية البناء متعددة المراحل بالـ Dockerfile مالتك !
هاي الطريقة تتضمن تعريف مراحل متعددة بالـ Dockerfile مالك.
المرحلة الأولى تتولى بناء التطبيق وتنصيب المكتبات المطلوبة.
بالمرحلة الأخيرة، بس الملفات الضرورية يتم نسخها، ونستثني مكتبات التطوير وملفات وقت البناء. هاي الطريقة تقلل حجم الصورة وتضمن إن بس المكونات الأساسية موجودة بصورة الإنتاج، وهيچ تحسن الكفاءة والأمان.

قلل عدد الطبقات بالـ Dockerfile مال مشروع !
إذا تكدر تدمج الأوامر أو سكريبتات الـ bash بسطر واحد، سويها! هاي الطريقة تساعد بتقليل عدد الطبقات بالصورة وبالتالي يقل حجم الملف !

اختار ال base images الي تجي ويه بكجات قليله او قليله المساحه
ال base image اللي تختارها إلها أكبر تأثير على حجم ال image النهائية مالتك. صور Node.js العادية تكون مليانه بحزم النظام والأدوات اللي ما إلها داعي. بدلاً من هيچ، اختر الأنواع المبسطة:
- Alpine images (node:18-alpine): مبنية على Alpine Linux، عادة أصغر بـ 5-10 مرات من الصور العادية
- Slim images (node:18-slim): مبنية على Debian بس مع إزالة الحزم غير الأساسية
- Distroless images (from Google): تحتوي بس على تطبيقك ومكتبات التشغيل، بدون shell أو مدراء الحزم
مثال مقارنة الأحجام:
- node:18 → ~900MB
- node:18-slim → ~240MB
- node:18-alpine → ~110MB
يستاهل الذكر إن هاي المقالات ساعدتني أحقق هاي النتيجة: