Docker للمطورين: الصور والحاويات وCompose

DevOps2026-10-06TryQuickToolBox

لقد قمت ببناء تطبيق ويب يعمل بشكل مثالي على جهازك، ولكن عند نشره على خادم أو مشاركته مع زميل، يتعطل. التبعيات مفقودة، أو الإصدارات متعارضة، أو متغيرات البيئة خاطئة. هذه هي المشكلة الكلاسيكية "يعمل على جهازي". يحل Docker هذه المشكلة عن طريق تغليف تطبيقك وتبعياته في وحدة موحدة تسمى حاوية. في هذا الدليل، ستتعلم المفاهيم الأساسية لـ Docker—الصور والحاويات وCompose—وكيفية استخدامها لتبسيط سير عمل التطوير الخاص بك.

ما هو Docker؟

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

الصور مقابل الحاويات

الصورة هي قالب للقراءة فقط يحتوي على تعليمات لإنشاء حاوية. إنها مثل لقطة من تطبيقك وبيئته. الحاوية هي نسخة قابلة للتشغيل من صورة. يمكنك إنشاء الحاويات أو تشغيلها أو إيقافها أو نقلها أو حذفها باستخدام Docker API أو CLI.

فكر في الصورة كفئة (class) والحاوية ككائن (instance) من تلك الفئة. يمكنك تشغيل حاويات متعددة من نفس الصورة، كل منها معزولة عن الأخرى.

بناء صورة باستخدام Dockerfile

Dockerfile هو ملف نصي يحتوي على تعليمات لبناء صورة. إليك مثال بسيط لتطبيق Node.js:

# Use an official Node.js runtime as a parent image
FROM node:18-alpine

# Set the working directory
WORKDIR /app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy the rest of the application code
COPY . .

# Expose the port the app runs on
EXPOSE 3000

# Define the command to run the app
CMD ["node", "server.js"]

لبناء الصورة، قم بتشغيل:

docker build -t my-node-app .

يقوم العلم -t بوسم الصورة باسم (my-node-app). تحدد النقطة . في النهاية سياق البناء (الدليل الحالي).

تشغيل الحاويات

بمجرد حصولك على صورة، يمكنك تشغيل حاوية:

docker run -p 3000:3000 -d my-node-app

هذا يربط المنفذ 3000 على المضيف بالمنفذ 3000 في الحاوية ويشغلها في الوضع المنفصل (-d).

الأوامر الشائعة:

إدارة البيانات باستخدام Volumes

الحاويات مؤقتة؛ عند حذفها، يتم فقدان بياناتها. للاحتفاظ بالبيانات، استخدم volumes. الـ volume هو دليل خارج نظام ملفات الحاوية، يديره Docker.

docker run -v my_volume:/app/data my-node-app

يمكنك أيضًا تركيب دليل المضيف (bind mount) للتطوير:

docker run -v $(pwd):/app my-node-app

Docker Compose: تطبيقات متعددة الحاويات

غالبًا ما تتطلب التطبيقات الواقعية خدمات متعددة: خادم ويب، قاعدة بيانات، ذاكرة تخزين مؤقت، إلخ. يتيح لك Docker Compose تعريف وتشغيل تطبيقات Docker متعددة الحاويات باستخدام ملف YAML. إليك مثال docker-compose.yml لتطبيق Node.js مع قاعدة بيانات PostgreSQL:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://user:password@db:5432/mydb
    depends_on:
      - db
  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

قم بتشغيل المجموعة بأكملها باستخدام:

docker compose up -d

هذا يبني خدمة الويب، ويسحب صورة Postgres، وينشئ شبكة، ويبدأ كلا الحاويتين. يضمن depends_on بدء قاعدة البيانات قبل خدمة الويب.

لإيقاف وإزالة الحاويات والشبكات والـ volumes:

docker compose down -v

أفضل الممارسات لـ Docker في التطوير

المقارنة: Docker مقابل الأجهزة الافتراضية

الجانب حاويات Docker الأجهزة الافتراضية
وقت البدء ثوانٍ دقائق
استخدام الموارد خفيف (يشارك نواة نظام التشغيل) ثقيل (نظام تشغيل كامل لكل VM)
العزل على مستوى العملية على مستوى الأجهزة
قابلية النقل عالية (يعمل في أي مكان يعمل فيه Docker) محدودة بتوافق hypervisor

الأسئلة الشائعة

ما الفرق بين الصورة والحاوية؟

الصورة هي قالب للقراءة فقط يحدد التطبيق وبيئته. الحاوية هي نسخة قيد التشغيل من صورة. يمكنك إنشاء حاويات متعددة من نفس الصورة.

متى يجب استخدام Docker Compose؟

استخدم Docker Compose عندما يتكون تطبيقك من خدمات متعددة (مثل خادم ويب، قاعدة بيانات، ذاكرة تخزين مؤقت) تحتاج إلى العمل معًا. إنه يبسط التنسيق للتطوير والاختبار.

كيف أحافظ على البيانات في Docker؟

استخدم volumes للاحتفاظ بالبيانات خارج نظام ملفات الحاوية. يتم إدارة volumes بواسطة Docker ويمكن مشاركتها بين الحاويات. يمكن أيضًا استخدام bind mounts لتركيب أدلة المضيف.

هل أنت مستعد لتحويل مشروعك التالي إلى حاويات؟ ابدأ بكتابة Dockerfile لتطبيق بسيط، ثم أضف الخدمات تدريجيًا باستخدام Docker Compose. لمزيد من أدوات المطورين، تحقق من JSON Formatter للتحقق من ملفات التكوين الخاصة بك وتنسيقها.