arrow_backالعودة إلى ملاحظات المجال
DEVOPS منشور 9 Aug 2026

ما هو Docker ولماذا يجب على المطورين تعلمه؟

شرح عملي لـ Docker للمطورين: الحاويات مقابل الآلات الافتراضية، والأوامر الأساسية، و Dockerfiles، وكيفية البدء باستخدامه في المشاريع الحقيقية.

Docker يظهر بشكل مستمر في إعلانات الوظائف والأدلة الإعدادية، وإذا لم تتعامل قط مع الحاويات فقد يبدو أنك بحاجة إلى تسلق جدار قبل أن يُسمح لك بكتابة رمز حقيقي. الأمر ليس معقداً بمجرد أن تتجاوز المفردات.

ما هي الحاوية فعلاً

الحاوية تعبئ تطبيقك مع كل ما يحتاجه للعمل: الرمز، والوقت التشغيلي، وملكتبات النظام، وملفات الإعدادات. إنها ليست آلة افتراضية. الآلة الافتراضية تقوم بمحاكاة نظام تشغيل كامل بما فيه النواة، مما يعني أن بدء تشغيل واحدة قد يستغرق دقيقة ويستهلك عدة غيغابايت من الذاكرة. الحاوية تشارك نواة الآلة المضيفة وتعزل فقط العملية، لذا تبدأ في أقل من ثانية وتستخدم عادة عشرات الميغابايت بدلاً من الغيغابايت.

هذا الفرق هو السبب وراء السيطرة السريعة جداً لـ Docker على التطوير المحلي وخطوط أنابيب CI. يمكنك تشغيل قاعدة بيانات Postgres وذاكرة تخزين مؤقت Redis وخادم التطبيق الخاص بك على جهاز كمبيوتر واحد دون تثبيت أي منها مباشرة على نظام التشغيل الخاص بك.

الأجزاء الأساسية التي تحتاج إلى معرفتها

هناك أربعة مصطلحات تغطي معظم ما ستتعامل معه يومياً:

  • Image: قالب للقراءة فقط مبني من Dockerfile. فكر فيه على أنه لقطة من نظام ملفات بالإضافة إلى بيانات وصفية حول كيفية تشغيله.
  • Container: مثيل تشغيل من صورة. يمكنك بدء وإيقاف وحذف الحاويات دون لمس الصورة التي جاءت منها.
  • Dockerfile: ملف نصي يحتوي على تعليمات لبناء صورة، سطراً تلو الآخر.
  • Registry: حيث يتم تخزين الصور والسحب منها، الأكثر شيوعاً هو Docker Hub.

ـ Dockerfile الأدنى لتطبيق Node.js يبدو هكذا:

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

قم ببنائه باستخدام docker build -t my-app . وقم بتشغيله باستخدام docker run -p 3000:3000 my-app. الراية -p تعيّن منفذاً على جهازك إلى منفذ داخل الحاوية، وهذا هو الطريقة التي تصل بها فعلاً إلى التطبيق من متصفحك.

الأوامر التي ستستخدمها باستمرار

حفنة من الأوامر تغطي معظم العمل اليومي:

  • docker ps — قائمة الحاويات قيد التشغيل
  • docker ps -a — قائمة كل الحاويات، بما فيها الحاويات المتوقفة
  • docker images — قائمة الصور على جهازك
  • docker logs <container> — تحقق من مخرجات حاوية قيد التشغيل أو متعطلة
  • docker exec -it <container> sh — افتح موجه أوامر داخل حاوية قيد التشغيل
  • docker rm / docker rmi — نظّف الحاويات والصور التي لم تعد تحتاجها

الزوج الأخير مهم أكثر مما يتوقع الناس. Docker سيسمح بسهولة بأن تختفي مساحة القرص في الصور القديمة والحاويات المتوقفة. تشغيل docker system prune بين الحين والآخر يستعيد مساحة مفاجئة.

لماذا يغير docker-compose سير العمل

معظم المشاريع الحقيقية تحتاج إلى أكثر من حاوية واحدة: خادم تطبيق، وقاعدة بيانات، وربما ذاكرة تخزين مؤقت. كتابة أوامر docker run لكل واحدة يصبح ممل بسرعة. docker-compose.yml يتيح لك تعريف المكدس كله في ملف واحد:

services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: devpassword
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

قم بتشغيل docker compose up وكلا الخدمتين تبدآن معاً، موصولتين بحيث يمكن لـ web الوصول إلى db باسم الخدمة. هذا هو الإعداد الذي ستراه في ملف README في معظم مستودعات المصدر المفتوحة، وفهمه يعني أنك تستطيع استنساخ مشروع وتشغيله في دقائق بدلاً من تثبيت Postgres و Redis وأي شيء آخر يحتاجه التطبيق يدوياً.

حيث يتعثر الناس مبكراً

المجلدات تربك الجميع تقريباً في البداية. بدون مجلد، أي شيء مكتوب داخل حاوية يختفي عند إزالة الحاوية، وهذه مشكلة لقواعد البيانات. قسم volumes في ملف الإنشاء أعلاه ينسق مجلداً مسمى إلى مسار داخل الحاوية بحيث تبقى البيانات موجودة بعد إعادة التشغيل.

خطأ شائع آخر هو نسخ node_modules أو .git إلى الصورة لأنه لا يوجد ملف .dockerignore. أضف واحداً تماماً مثل .gitignore:

node_modules
.git
.env

هذا يحافظ على سرعة البناء وصغر حجم الصور، وهذا يهم عندما تبدأ بدفع الصور إلى السجل أو النشر إلى Kubernetes.

إلى أين بعد الأساسيات

عندما يصبح بناء وتشغيل الحاويات أمراً طبيعياً، المهارات المفيدة التالية هي البناء متعدد المراحل للحصول على صور إنتاجية أصغر، وفهم أوضاع شبكات Docker، وقراءة مخرجات docker inspect عندما لا يعمل شيء على التوصيل بشكل صحيح. لا شيء من هذا صعب، إنه غير مألوف فقط في المرة الأولى.

للمزيد عن وضع حاويات للتطبيقات الحقيقية وربطها بخطوط أنابيب نشر سحابي، راجع قسم DevOps والقسم السحابي في Korra Studio.

تمت كتابة هذا المقال بمساعدة الذكاء الاصطناعي، وراجعه ونشره Michal Pilch (CISSP)، Korra Studio.

هل أنت مستعد للمضي قدماً؟

هذه ملاحظة واحدة من قاعدة معارف Korra Studio — المنصة تجمع كل موضوع مع التوجيه الفردي.

ابدأ بالمجانarrow_forward