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

DevOps2026-10-10TryQuickToolBox

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

لماذا Docker للمطورين؟

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

الصور: المخطط الأساسي

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

إليك Dockerfile بسيط لتطبيق Node.js:

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

كل تعليمة تُنشئ طبقة. يتم تخزين الطبقات مؤقتًا، لذا تكون إعادة البناء سريعة عندما يتغير الكود فقط. تُخزَّن الصور في سجلات مثل Docker Hub أو سجل خاص.

الحاويات: النسخة قيد التشغيل

الحاوية هي نسخة قابلة للتشغيل من صورة. إنها معزولة لكنها تشترك في نواة نظام التشغيل المضيف، مما يجعلها خفيفة الوزن. تبدأ حاوية باستخدام docker run.

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

هذا يربط المنفذ 3000 على المضيف بالمنفذ 3000 في الحاوية ويشغّلها في وضع منفصل. الحاويات مؤقتة: تُفقد التغييرات عند إزالتها ما لم تستخدم وحدات التخزين (volumes).

الأوامر الأساسية:

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

غالبًا ما تحتاج التطبيقات الحقيقية إلى خدمات متعددة: خادم ويب، وقاعدة بيانات، وذاكرة تخزين مؤقت. يتيح لك Docker Compose تعريف وتشغيل تطبيقات متعددة الحاويات باستخدام ملف YAML واحد.

إليك ملف docker-compose.yml لتطبيق Node.js مع PostgreSQL:

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

شغّل docker compose up لبدء كلتا الخدمتين. يتولى Compose إدارة الشبكات، لذا يمكن لـ web الوصول إلى db باسم الخدمة.

متى تستخدم Docker Compose مقابل Docker العادي

السيناريوالاستخدام
حاوية واحدةdocker run
خدمات متعددة (تطبيق + قاعدة بيانات)Docker Compose
تنسيق بيئة الإنتاجKubernetes, Swarm

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

المزالق الشائعة

تعارض المنافذ: إذا كان المنفذ 3000 مشغولاً، اربطه بمنفذ مضيف مختلف: -p 3001:3000.

فقدان البيانات: بدون وحدات التخزين، تختفي بيانات قاعدة البيانات عند إزالة الحاوية.

عمليات بناء بطيئة: رتّب تعليمات Dockerfile من الأقل إلى الأكثر تغيّرًا للاستفادة من التخزين المؤقت.

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

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

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

هل أحتاج إلى Docker Compose لخدمة واحدة؟

لا. يتألق Compose عندما يكون لديك خدمات متعددة. بالنسبة لحاوية واحدة، يكون docker run أبسط.

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

استخدم وحدات التخزين. عرّف وحدة تخزين مُسمّاة في Compose أو استخدم -v مع docker run لربط دليل مضيف أو وحدة تخزين مُسمّاة.

هل أنت مستعد لتبسيط سير عمل Docker الخاص بك؟ اطّلع على JSON Formatter للتحقق من ملفات إعداد JSON وتنسيقها بسرعة مثل docker-compose.yml أو package.json.