الدرس 22: تحسين طبقات الصور والتخزين المؤقت
يعتمد بناء صور Docker الفعال بشكل كبير على فهم كيفية تخزين Docker للطبقات مؤقتاً. إذا لم تتغير تعليمة ما في Dockerfile، يعيد Docker استخدام الطبقة الموجودة، مما يسرع عملية البناء.
1. ترتيب التعليمات بشكل صحيح
يقوم Docker بتقييم الطبقات من الأعلى إلى الأسفل. إذا تغيرت طبقة ما، فسيتم إبطال جميع الطبقات اللاحقة ويجب إعادة بناؤها.
الاستراتيجية: ضع التعليمات الأقل تغييراً (مثل نظام التشغيل الأساسي والتبعيات الثابتة) في الأعلى، والتعليمات الأكثر تغييراً (مثل نسخ كود التطبيق) في الأسفل.
مثال سيئ (إبطال التخزين المؤقت المتكرر)
dockerfile COPY . /app # التغيير في الكود يبطل كل ما يليه RUN apt-get update && apt-get install -y ... RUN npm install # سيتم تشغيله في كل مرة يتغير فيها الكود
مثال جيد (تخزين مؤقت مُحسَّن)
dockerfile
1. تثبيت التبعيات الثابتة (نادراً ما تتغير)
RUN apt-get update && apt-get install -y python3
2. نسخ ملفات تعريف التبعية (مثل requirements.txt) (نادراً ما تتغير)
COPY requirements.txt /app/ RUN pip install -r requirements.txt # يتم تخزينها مؤقتاً إذا لم يتغير requirements.txt
3. نسخ كود مصدر التطبيق (يتغير بشكل متكرر)
COPY . /app/
2. تقليل عدد الطبقات (ربط أوامر RUN)
كما نوقش في الدرس 9، قم بربط الأوامر في تعليمة RUN واحدة باستخدام && \ لتقليل العدد الإجمالي للطبقات. كل RUN ينشئ طبقة، مما يضيف حملاً إضافياً.
3. استخدام .dockerignore
لمنع إرسال الملفات غير الضرورية (مثل تاريخ .git، و node_modules، أو الملفات المؤقتة المحلية) إلى خفي Docker أثناء سياق البناء، قم بإنشاء ملف .dockerignore.
محتوى .dockerignore
.git .gitignore node_modules temp/
هذا يسرع عملية البناء بشكل كبير، خاصة للمشاريع الكبيرة، عن طريق تقليل البيانات التي يجب نقلها.