دليل المطورين إلى Docker: الصور والحاويات وCompose
ربما سمعت عن Docker والحاويات، لكنك قد لا تكون متأكداً من كيفية دمجها في سير عمل التطوير اليومي. أو ربما جرّبت Docker، لكن مفاهيم الصور والحاويات وCompose تبدو مربكة. سيرشدك هذا الدليل إلى الأساسيات مع أمثلة عملية، حتى تبدأ في استخدام Docker بفعالية في مشاريعك.
ما هي صور وحاويات Docker؟
فكّر في صورة Docker كمخطط لتطبيقك. تحتوي على كل ما يلزم لتشغيل الكود: نظام التشغيل وبيئة التشغيل والمكتبات وملفات تطبيقك. الصور غير قابلة للتغيير وتُبنى من Dockerfile.
الحاوية هي نسخة قيد التشغيل من صورة. عند تشغيل حاوية، ينشئ Docker بيئة معزولة من الصورة. يمكنك تشغيل عدة حاويات من نفس الصورة، ولكل منها حالتها الخاصة.
الفروق الأساسية
| الصورة | الحاوية |
|---|---|
| قالب للقراءة فقط | نسخة قابلة للتشغيل |
| تُبنى من Dockerfile | تُنشأ من صورة |
| مخزّنة في السجل (registry) | تعمل على المضيف |
| غير قابلة للتغيير | مؤقتة (يمكن إيقافها وتشغيلها وحذفها) |
بناء أول صورة Docker لك
لننشئ تطبيق Node.js بسيط ونحوّله إلى حاوية. ابدأ بـ Dockerfile في جذر مشروعك:
# 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 ci --only=production
# 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 .
شغّل حاوية من الصورة:
docker run -p 3000:3000 -d my-node-app
تطبيقك الآن متاح على http://localhost:3000.
إدارة الحاويات
إليك الأوامر الأساسية لإدارة الحاويات:
docker ps– سرد الحاويات قيد التشغيلdocker ps -a– سرد جميع الحاويات (بما في ذلك المتوقفة)docker stop <container_id>– إيقاف حاوية قيد التشغيلdocker rm <container_id>– حذف حاوية متوقفةdocker logs <container_id>– عرض سجلات الحاويةdocker exec -it <container_id> sh– فتح صدفة داخل حاوية قيد التشغيل
تبسيط التطبيقات متعددة الحاويات باستخدام Docker Compose
غالباً ما تحتاج التطبيقات الحقيقية إلى خدمات متعددة: خادم ويب، وقاعدة بيانات، وذاكرة تخزين مؤقت، وما إلى ذلك. إدارة هذه باستخدام أوامر docker run المنفصلة أمر شاق. يتيح لك Docker Compose تعريف وتشغيل تطبيقات متعددة الحاويات باستخدام ملف YAML.
أنشئ docker-compose.yml:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DB_HOST=db
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
أوقفها واحذفها باستخدام:
docker compose down
أفضل الممارسات للتطوير
- استخدم .dockerignore لاستبعاد الملفات غير الضرورية (node_modules، .git) من سياق البناء.
- استفد من تخزين الطبقات مؤقتاً: رتّب تعليمات Dockerfile بحيث تُثبَّت التبعيات قبل نسخ الكود المصدري.
- استخدم عمليات بناء متعددة المراحل للحفاظ على صور الإنتاج صغيرة الحجم.
- خزّن البيانات في وحدات تخزين (volumes) لقواعد البيانات والخدمات الأخرى ذات الحالة.
- استخدم Compose للتطوير المحلي لمحاكاة بيئات شبيهة بالإنتاج.
الأسئلة الشائعة
ما الفرق بين الصورة والحاوية؟
الصورة قالب للقراءة فقط يحدد التطبيق وتبعياته. الحاوية هي نسخة قيد التشغيل من صورة، مع طبقة قابلة للكتابة في الأعلى.
هل يمكنني استخدام Docker Compose في الإنتاج؟
صُمم Docker Compose بشكل أساسي للتطوير والاختبار. للإنتاج، فكّر في أدوات التنسيق مثل Kubernetes أو Docker Swarm.
كيف أحافظ على استمرارية البيانات في Docker؟
استخدم وحدات التخزين (volumes) أو عمليات الربط (bind mounts). تُدار وحدات التخزين بواسطة Docker وهي الطريقة المفضلة للحفاظ على البيانات التي تُنشئها الحاويات.
هل أنت مستعد لتحويل تطبيقك إلى حاوية؟ إذا كنت بحاجة إلى تحويل الوثائق أو الأدلة إلى PDF لفريقك، جرّب محوّل Word إلى PDF لمشاركة مستندات مصقولة.