محتويات الدورة

Docker / Compose وعقود التشغيل الموثوقة / الدرس 8

الإعداد والاستيفاء وحدود الأسرار

افصل قيم حسم النموذج وإعداد التشغيل وبيانات اعتماد البناء.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • اشرح .env و environment و env_file وأسرار التشغيل والبناء.
  • امنع وصول الأسرار للطبقات والسجلات والمخرجات العامة.

تنتمي القيمة إلى مرحلة محددة

يستبدل استيفاء Compose المتغيرات عند بناء النموذج. قد توفر .env قيماً له ولا يحقن وجودها كل المتغيرات في الحاوية. تحدد environment و env_file بيئة التشغيل وفق الأولوية، وتخص معاملات البناء مرحلة أخرى. حدد المستهلك والعمر قبل الآلية كيلا تفسر غياب القيمة كمشكلة شبكة أو صورة.

اجعل الإعداد العادي صريحاً

يسلم النموذج قيمة وضع غير سرية للبيئة ويحدد منفذاً محلياً افتراضياً. لا يقرأ المثال PARCEL_MODE حالياً؛ فيشرح التسليم لا ميزة مخترعة. اقتبس التعيينات ذات النقطتين وميّز البديل من المتغير المطلوب. راجع الناتج ببيئة اصطناعية قبل الاعتماد على طرفية المشغل.

yaml استيفاء غير سري وتسليم وقت التشغيل
services:
  api:
    image: parcel-api:lab
    environment:
      PARCEL_MODE: "${PARCEL_MODE:-demo}"
    ports:
      - "127.0.0.1:${HOST_PORT:-18080}:8080"
الناتج المتوقع
PARCEL_MODE=demo
Host publication: 127.0.0.1:18080 -> container 8080

عند غياب المتغيرين يقدم النموذج demo والمنفذ 18080. هذه نتيجة استيفاء منطقية لا ادعاء تنفيذ. قد تغير بيئة المشغل النتيجة، فسجل المدخلات أو اشترط قيمًا صريحة للاختيارات المهمة.

لا تخبز بيانات الاعتماد داخل الصور

لا تناسب ARG و ENV الأسرار لاحتمال بقائها في البيانات أو التاريخ أو المصدر أو الملفات. تكشف تركيبات BuildKit السر فقط لتعليمة RUN محددة، ويجب ألا تنسخه العملية للناتج أو السجلات. لا يجيز توفر السر إرساله لأي جهة؛ تظل صلاحياته وثقة الوجهة ضمن السياسة.

dockerfile فحص وجود سر للبناء فقط
# syntax=docker/dockerfile:1
FROM python:3.13-slim
RUN --mount=type=secret,id=repo_token,required=true \
    test -s /run/secrets/repo_token

تتطلب Dockerfile التعليمية سراً غير فارغ باسم repo_token عبر BuildKit. لا يطبع test ناتجاً ولا ينسخ الملف للطبقة، ولا يجلب اعتماديات أو يكشف قيمة. يجب أن يفشل الغياب لا يتراجع لسر مضمن.

تحتاج أسرار التشغيل إلى عقد تسليم

تمنح أسرار Compose خدمات مختارة ملفات غالباً تحت /run/secrets. تبقى ملفات Compose المحلية تحت إدارة المضيف، ولا تعني مدير أسرار مشفر أو سلوك Swarm نفسه. يجب أن يقرأ التطبيق المسار وتسمح الهوية بالقراءة، ويتطلب التدوير سياسة إعادة تحميل أو استبدال. لا تضمن تغيير الملف إعادة تحميل آمنة.

راجع السجلات والذاكرة للتسرب

قد تكشف الأسرار الإعدادات المعروضة وتتبع الصدفة والاستثناءات والتاريخ والسجلات. تمنع تركيبة السر مساراً واحداً لا كل المسارات. لا تتبع مفاتيح الذاكرة قيمة السر تلقائياً؛ فقد يحتاج تغير ناتج البناء إلى مدخل إبطال غير سري. احجب التشخيص ودوّر المكشوف وفق إجراء الحوادث.

الأخطاء الشائعة وإصلاحها

يوجد متغير في .env ويغيب عن الحاوية.

لماذا يحدث؟
خُلط مدخل الاستيفاء بحقن بيئة التشغيل التلقائي.
كيف تصلحه؟
حدد environment أو env_file المقصود صراحة.
كيف تتجنب تكراره؟
وثق مستهلك المتغير ومرحلته وأولويته.

يظهر سر في تاريخ الصورة.

لماذا يحدث؟
مر عبر معامل أو بيئة أو ملف منسوخ.
كيف تصلحه؟
دوّره وأعد البناء بقناة غير مستمرة.
كيف تتجنب تكراره؟
راجع التاريخ والسجلات والمخرجات بقيم تجريبية.

لا يغير تدوير السر ناتج البناء المخبأ.

لماذا يحدث؟
محتوى السر ليس إشارة إبطال تلقائية.
كيف تصلحه؟
استخدم مراجعة غير سرية مناسبة عند لزوم تغير الناتج.
كيف تتجنب تكراره؟
افصل هوية الاعتماد عن إصدار الاعتماديات وسياسة الذاكرة.

اختبر فهمك

1. أين يوضع رمز مستودع حزم خاص أثناء البناء؟

اعرض الحل المشروح

استخدم تركيبة سر BuildKit مصرحاً للتعليمة المحتاجة فقط. اجعل الأداة تقرأ الملف دون طباعة أو بقاء ملفات اعتماد في الناتج. قد تكشف ARG أو ENV القيمة خارج الخطوة فلا تستخدمهما بديلاً.

2. إلى ماذا يحسم النموذج الأول عند غياب المتغيرين؟

اعرض الحل المشروح

يصبح الوضع demo والمنفذ 18080 مقيداً بـ 127.0.0.1. يتبع ذلك البدائل، ولا يثبت فهم التطبيق للمتغير أو توفر المنفذ؛ فالتسليم وسلوك التطبيق فحصان مختلفان.

أهم ما تعلمته

  • الاستيفاء وبيئة التشغيل وأسرار البناء قنوات مختلفة.
  • امنع بقاء الأسرار وراجع مسارات التسرب الأخرى.

المراجع الرسمية