ENV
تعليمة ENV — متغيّرات البيئة ENV
ENV تعرّف متغيّر بيئة يبقى موجودًا في الصورة النهائية وفي كل حاوية تُشغَّل منها — يظهر عبر docker inspect ويمكن تعديله وقت التشغيل.
بعكس ARG الذي يختفي بعد انتهاء البناء، متغيّر ENV يُخزَّن فعليًا في الصورة ويكون متاحًا تلقائيًا داخل أي حاوية تُشغَّل منها، وتقدر تغيّر قيمته وقت التشغيل بـ docker run --env أو ملف --env-file دون الحاجة لإعادة بناء الصورة.
في البناء متعدّد المراحل، كل مرحلة ترث متغيّرات ENV من المرحلة الأساس التي بُنيت عليها. لو استخدمت ARG وENV بنفس الاسم، قيمة ENV هي التي تُستخدم فعليًا داخل تعليمات RUN اللاحقة، لا ARG.
الصياغة
ENV <key>=<value> ENV <key1>=<value1> <key2>=<value2>
📄 مثال
FROM node:20-alpine ENV NODE_ENV=production ENV PORT=3000 WORKDIR /app COPY . . CMD ["node", "server.js"] # تعديل القيمة وقت التشغيل دون إعادة بناء: # docker run -e PORT=8080 myapp
أهم النقاط
| الخيار | الوظيفة |
|---|---|
| دائمة في الصورة | بعكس ARG، تبقى القيمة مخزَّنة في الصورة وتظهر في docker inspect |
| قابلة للاستبدال | docker run -e KEY=value أو --env-file يغيّر القيمة وقت التشغيل بلا إعادة بناء |
| موروثة بالمراحل | كل مرحلة FROM لاحقة تبنى على مرحلة تحتوي ENV ترث قيمها تلقائيًا |
💡 نصائح عملية
- استخدم ENV للإعدادات التي يحتاجها تطبيقك وقت التشغيل (PORT، NODE_ENV) لا لأسرار حسّاسة
- وثّق كل متغيّر ENV مهم بقيمة افتراضية منطقية حتى تعمل الصورة "جاهزة" دون إعداد إضافي
⚠️ أخطاء شائعة
- تخزين كلمات مرور أو مفاتيح API في ENV — القيمة تبقى ظاهرة لأي شخص يشغّل docker inspect على الصورة أو الحاوية
- الخلط بين ARG وENV وتوقّع أن ARG يبقى متاحًا وقت تشغيل الحاوية — فقط ENV يبقى، ARG يختفي بعد البناء
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DOCKER الكامل بالعربي.