ATM Logo
ATMATM Team

© 2026 ATM. جميع الحقوق محفوظة

كيف نخبر Docker بما نريد فعله؟ (مقدمة إلى Dockerfile)

كيف نخبر Docker بما نريد فعله؟ (مقدمة إلى Dockerfile)
Author's profile picture
algerian-tech-makers

4/30/2026

نعلم من المقال السابق أن Docker Image هي المخطط الأساسي لتطبيقك. حسناً، كيف نصنع ذلك المخطط؟ المشكلة هي أن Docker لا يستطيع معرفة كيف يحتاج تطبيقك للعمل. هل يحتاج Node.js؟ ربما Python؟؟ أي إصدار؟ أين الكود؟

الحل: مجرد ملف نصي بسيط يتضمن جميع التعليمات التي يحتاج Docker لمعرفتها، باسم "Dockerfile".
بالتعمق في ذلك:
Dockerfile هو مجموعة مرتبة من التعليمات التي تخبر Docker ما هو نظام التشغيل الأساسي المطلوب، وكيفية تثبيت التبعيات، وأين سيتم وضع كود التطبيق، وكيف يعمل التطبيق، وهكذا.
يبدو مثل هذا التركيب:

FROM node:18-alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
حيث يقوم كل سطر بشيء محدد:
  • FROM يخبر Docker عن نظام التشغيل الأساسي الذي سنبني عليه
  • WORKDIR يحدد دليل العمل
  • COPY ينسخ الحزم المحددة إلى موقع معين
  • RUN ينفذ الأوامر المحددة
  • EXPOSE يعرض المنافذ المحددة
  • CMD عند التشغيل، يقوم بشيء معين
هكذا نخبر Docker - نصنع ملفاً وندعه يقوم بالعمل.
ملاحظة: الترتيب مهم في
Dockerfile يمكنك الحفاظ على السرعة ومنع تكرار dependencies والعكس صحيح.
الآن إلى المرحلة التي نبني فيها ونشغل تطبيقنا:
معظم ما فعلناه حتى الآن هو صياغة Dockerfile داخل هيكل كود تطبيقنا. لكن نحتاج إخبار Docker ببناء تلك الصورة ونشرها حتى نتمكن من رؤية نسخة من تطبيقنا قيد التشغيل. نحقق ذلك بـ docker build -t my-app لبناء الصورة و docker run -p 3000:3000 my-app لنشر الحاوية، وها هو! تطبيقك يعمل!
شيء آخر يجب مراعاته عند بناء الصور هو ملف .dockerignore لتجنب الملفات غير الضرورية وغير المطلوبة وتقليل الحجم وتسريع بناء صورتك. مثال على ما قد يحتويه:
.git
*.log
README.md
node_modules
وأخيراً، هناك بعض الأخطاء معظم المطورين لا ينتبهون إليها:

استخدام latest:

 # قد يتغير الإصدار دون تحذيرك
FROM node:latest
# إصدار مستقر
FROM node:18-alpine

الصور كبيرة الحجم:

 # كبير جداً!!
FROM ubuntu
RUN apt-get update && apt-get install nodejs
# استخدم هذا بدلاً من ذلك
FROM node:18-alpine

سؤال قد يخطر ببالك: متى نحتاج إعادة بناء الصور؟

والجواب هو: أي تغيير يتطلب إعادة بناء! إذا قمت بإجراء تغييرات في الكود، فإن التغييرات لن تطبق مباشرة على الحاوية قيد التشغيل(running container). هناك طريقة للقيام بذلك باستخدام volumes، ولكن حتى معها، لن تحفظ التغييرات في الصورة، لذا تحتاج إزالة الحاوية السابقة وتشغيل أخرى جديدة.
وأخيراً، هذه بعض الأوامر الشائعة التي قد تستخدمها أثناء العملية:
  • docker images - لعرض صورك
  • docker ps - لعرض الحاويات قيد التشغيل (-a لعرضها جميعاً)
  • docker stop container-name - لايقاف الحاوية 
Dockerfile ليس مجرد ملف عادي - إنه الطريقة التي تخبر بها Docker بما يجب فعله في كل خطوة في عملية بناء صورتك.

كيف نخبر Docker بما نريد فعله؟ (مقدمة إلى Dockerfile)