Docker / أدلة البناء وعمليات الإنتاج / الدرس 14
تصميم الذاكرة المخبأة وأداء البناء المقاس
أعد استخدام العمل الصحيح مع حفظ إبطال الاعتماديات وحدود الثقة.
في هذه الصفحة
أهداف الدرس
- اشرح إبطال ذاكرة التعليمات وتركيبات الذاكرة.
- قس البناء البارد والدافئ دون اعتبار الذاكرة مصدراً أصلياً.
تتبع صحة الذاكرة اعتماديات المدخلات
تعاد نتيجة التعليمة عندما تطابق المدخلات والحالة قواعد البناء. قد يبطل تغيير مصدر مبكر كل العمل اللاحق رغم ثبات نص الأمر. قدم وصف الاعتماديات المستقر على الملفات كثيرة التغير حين يصح ذلك. الذاكرة تحسين؛ ويجب أن يصح البناء من المدخلات المعلنة دونها.
افصل بيانات الوحدات عن تغير المصدر
لا يملك مثال Go وحدات خارجية لكنه يوضح الحد. انسخ بيانات الوحدات ثم احسمها ثم انسخ المصدر وابنه. إن وجد go.sum فانقله وراجعه مع go.mod. لا تولد اعتماديات من شبكة غير مراجعة لمجرد إصابة الذاكرة؛ فالهوية أهم من زمن جذاب.
# syntax=docker/dockerfile:1
FROM golang:1.26-alpine AS build
WORKDIR /src
COPY go.mod ./
RUN go mod download
COPY main.go ./
RUN --mount=type=cache,target=/root/.cache/go-build \
CGO_ENABLED=0 go build -trimpath -o /out/parcel ./
FROM scratch
COPY --from=build /out/parcel /parcel
USER 65532:65532
ENTRYPOINT ["/parcel"]
تستخدم الوصفة الملفين السابقين. لا يغير تعديل main.go مدخل حسم الوحدات السابق. تسرع التركيبة عمل المترجم دون نسخها للصورة، ولا ندعي تسريع تنزيل اعتماديات لا يملكها المثال.
تركيبات الذاكرة حالة عمل قابلة للفقد
تحتفظ BuildKit بمجلدات عمل بين الأبنية. يجب أن تتحمل الأداة غيابها والتزامن المدعوم. قد تكون قديمة أو متأثرة ببناء آخر، فلا تخزن فيها حقيقة إصدار وحيدة أو سراً. اختر المعرّفات والمشاركة وفق الأداة والثقة وتجنب مشاركة كتابة عشوائية مع غير الموثوق.
افحص الاستخدام والتقدم دون اختلاق أزمنة
تميز سجلات البناء الخطوات المخبأة والتنفيذ والنقل والتصدير. قارن البارد والدافئ بالمصدر والمنصة والباني والشبكة نفسها. قد يهيمن نقل السجل رغم ذاكرة المترجم. افحص الاستهلاك ولا تستخدم تنظيفاً واسعاً كتجربة على بان مشترك؛ فقد تخص الحالة مشروعات أخرى.
docker buildx ls
docker buildx du
تعتمد القراءات على بان موجود مصرح وقد تستعلم وجهته. لا تعيد البناء أو تثبت تسريعاً ولا نختلق أحجاماً. حدد الباني ومالكه؛ فقد تختلف ذاكرة البعيد عن المحرك المحلي.
أبطل للصحة لا للمظهر
قد يتغير مستودع الشبكة مع ثبات RUN. ثبت الاعتماديات وحدث المدخلات المعتمدة عن قصد؛ فلا تثبت الإصابة الحداثة. ليست قيمة السر مفتاحاً تلقائياً، فاستخدم مراجعة غير سرية عند لزوم تغير المخرج. يحتاج استيراد الذاكرة وتصديرها إلى صلاحيات لحماية المحتوى والبيانات، مع منتجين واحتفاظ معلومين.
الأخطاء الشائعة وإصلاحها
يعيد تعديل مصدر كل خطوات الاعتماديات.
- لماذا يحدث؟
- سبقت COPY واسعة حسم الاعتماديات المستقرة.
- كيف تصلحه؟
- افصل بيانات الاعتماديات عن المصدر حين يصح.
- كيف تتجنب تكراره؟
- راجع رسم المدخلات لا خيارات الذاكرة عشوائياً.
ينجح البناء بذاكرة قديمة فقط.
- لماذا يحدث؟
- لم تعلن مدخلات أو مخرجات لازمة في العقد.
- كيف تصلحه؟
- أكمل التصريحات واختبر بناء نظيفاً مستقلاً.
- كيف تتجنب تكراره؟
- عامل فقد الذاكرة كحالة مدعومة.
يستخدم بناء مخبأ اعتماديات قديمة.
- لماذا يحدث؟
- افتُرض إبطال تلقائي لكل مدخل شبكة متغير.
- كيف تصلحه؟
- ثبت المراجعات وحدثها بإجراء مدروس.
- كيف تتجنب تكراره؟
- افصل سياسة الحداثة عن معدل الإصابة.
اختبر فهمك
1. هل يعيد تعديل main.go بالضرورة go mod download؟
اعرض الحل المشروح
ليس مع ثبات بيانات الوحدات والمدخلات ووجود ذاكرة صحيحة، إذ يأتي النسخ لاحقاً. هذا حد إعادة محتمل لا ضمان زمن؛ فقد يلزم التنفيذ لغياب الذاكرة أو تغير الأساس.
2. لماذا لا تكفي مقارنة الدافئ والبارد دون المنصة والباني؟
اعرض الحل المشروح
تغير المعمارية والذاكرة البعيدة والمحاكاة والشبكة والتصدير التكلفة. ثبت المدخلات أو صرح بالفروق؛ فقد تقيس آلة أخرى أو أساساً مجلوباً أو مسار تصدير مختلفاً لا تحسين الذاكرة.
أهم ما تعلمته
- تعيد الذاكرة العمل الصحيح ولا تصبح اعتماد مصدر خفياً.
- قس المراحل واحفظ الثقة وملكية الذاكرة.