🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

كيفية استخدام Docker Compose للتنمية المحلية في عام 2026: الدليل الكامل

⏱️4 min read  ·  733 words

{
“@context”: “https://schema.org”,
“@type”: “TechArticle”,
“headline”: “كيفية استخدام Docker Compose للتنمية المحلية في عام 2026: الدليل الكامل”,
“description”: “Master Docker Compose للتطوير المحلي في عام 2026 – إعداد متعدد الخدمات، وإعادة التحميل السريع، والشبكات، والأحجام، والأسرار، وتكافؤ الإنتاج.”,
“url”: “https://techpulsesite.com/how-to-use-docker-compose-for-local-deve-ar/”,
“datePublished”: “2026-06-28T10:50:00+00:00”,
“dateModified”: “2026-06-29T04:14:18+00:00”,
“author”: {
“@type”: “Organization”,
“name”: “TechPulse Editorial Team”,
“url”: “https://techpulsesite.com”
},
“publisher”: {
“@type”: “Organization”,
“name”: “TechPulse”,
“url”: “https://techpulsesite.com”
},
“inLanguage”: “ar”
}

{
“@context”: “https://schema.org”,
“@type”: “TechArticle”,
“headline”: “كيفية استخدام Docker Compose للتنمية المحلية في عام 2026: الدليل الكامل”,
“description”: “Master Docker Compose للتطوير المحلي في عام 2026 – إعداد متعدد الخدمات، وإعادة التحميل السريع، والشبكات، والأحجام، والأسرار، وتكافؤ الإنتاج.”,
“url”: “https://techpulsesite.com/how-to-use-docker-compose-for-local-deve-ar/”,
“datePublished”: “2026-06-28T10:50:00+00:00”,
“dateModified”: “2026-06-28T18:21:17+00:00”,
“author”: {
“@type”: “Organization”,
“name”: “TechPulse Editorial Team”,
“url”: “https://techpulsesite.com”
},
“publisher”: {
“@type”: “Organization”,
“name”: “TechPulse”,
“url”: “https://techpulsesite.com”
},
“inLanguage”: “ar”
}

عامل الميناء يؤلف يحول التطوير المحلي من “العمل على جهازي” إلى بيئات شبيهة بالإنتاج قابلة للتكرار والتي يمكن لكل عضو في الفريق تشغيلها في دقائق. في عام 2026، مع Docker Compose v2 المدمج في Docker Desktop وCLI، لا توجد أداة أفضل لإدارة الحزم المحلية متعددة الخدمات.

لماذا يقوم Docker Compose بالتطوير؟

  • قم بتدوير Postgres وRedis وواجهة برمجة التطبيقات (API) الخاصة بك وعامل قائمة الانتظار باستخدام أمر واحد
  • قم بإزالة عبارة “إنه يعمل على جهازي” – كل مطور لديه بيئات متطابقة
  • مطابقة طوبولوجيا خدمة الإنتاج محليًا دون تشغيل Kubernetes
  • يمكنك التبديل بسهولة بين إصدارات العقدة أو إصدارات قاعدة البيانات أو تكوينات الخدمة

إعداد المشروع: تطبيق Full-Stack

سنقوم بإنشاء إعداد إنشاء لـ: الواجهة الأمامية Next.js، والواجهة الخلفية لـ FastAPI، وPostgreSQL، وRedis، وعامل Celery.

myapp/
├── docker-compose.yml
├── docker-compose.override.yml    # local dev overrides
├── frontend/
│   ├── Dockerfile
│   └── ...
├── backend/
│   ├── Dockerfile
│   └── ...
└── .env.local

الأساسية عامل الإرساء-compose.yml

version: "3.9"

services:
  # ── PostgreSQL ─────────────────────────────────────────────
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: ${DB_NAME:-myapp}
      POSTGRES_USER: ${DB_USER:-postgres}
      POSTGRES_PASSWORD: ${DB_PASS:-devpassword}
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./backend/scripts/init.sql:/docker-entrypoint-initdb.d/init.sql
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5

  # ── Redis ──────────────────────────────────────────────────
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru

  # ── FastAPI Backend ────────────────────────────────────────
  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile.dev
    volumes:
      - ./backend:/app                    # hot reload: source mounted
    ports:
      - "8000:8000"
    environment:
      DATABASE_URL: postgresql://postgres:devpassword@db:5432/myapp
      REDIS_URL: redis://redis:6379/0
      ENV: development
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
    command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

  # ── Celery Worker ──────────────────────────────────────────
  worker:
    build:
      context: ./backend
      dockerfile: Dockerfile.dev
    volumes:
      - ./backend:/app
    environment:
      DATABASE_URL: postgresql://postgres:devpassword@db:5432/myapp
      REDIS_URL: redis://redis:6379/0
    depends_on: [db, redis]
    command: celery -A app.tasks worker --loglevel=info

  # ── Next.js Frontend ───────────────────────────────────────
  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile.dev
    volumes:
      - ./frontend:/app
      - /app/node_modules              # anonymous volume prevents override
    ports:
      - "3000:3000"
    environment:
      NEXT_PUBLIC_API_URL: http://localhost:8000
    command: npm run dev

volumes:
  postgres_data:

تطوير ملف Dockerfile لإعادة التحميل السريع

# backend/Dockerfile.dev
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
# Don't copy source — it's mounted as volume for hot reload
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--reload"]
# frontend/Dockerfile.dev
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
# Source mounted as volume; node_modules stays in container
CMD ["npm", "run", "dev"]

تجاوز الملف للتخصيص المحلي

# docker-compose.override.yml (not committed to git)
# Each developer's personal overrides

services:
  backend:
    environment:
      DEBUG: "true"
      LOG_LEVEL: debug
    ports:
      - "8000:8000"
      - "5678:5678"    # debugger port

  db:
    ports:
      - "5432:5432"    # expose to host for TablePlus/DBeaver access

يقوم Docker Compose بدمجdocker-compose.override.ymlتلقائيًا مع الملف الأساسي — لا حاجة لتحديد-f.

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

# Start everything
docker compose up -d

# View logs (all services)
docker compose logs -f

# View logs for one service
docker compose logs -f backend

# Run a command in a service
docker compose exec backend python manage.py migrate
docker compose exec db psql -U postgres -d myapp

# Rebuild a specific service after Dockerfile change
docker compose up -d --build backend

# Stop and remove everything (keep volumes)
docker compose down

# Stop, remove containers AND volumes (fresh slate)
docker compose down -v

# Scale a service
docker compose up -d --scale worker=3

إدارة الأسرار بشكل صحيح

# .env.local (gitignored)
DB_PASS=mylocalsecretpassword
SECRET_KEY=dev-only-not-production

# docker-compose.yml references env vars
environment:
  DB_PASS: ${DB_PASS}

# Or use Docker secrets for production-like setups
secrets:
  db_password:
    file: ./secrets/db_password.txt

services:
  backend:
    secrets: [db_password]

الشبكات بين الخدمات

تتواصل الخدمات الموجودة في نفس ملف الإنشاء عن طريق اسم الخدمة. تتصل الواجهة الخلفية لديك بـ PostgreSQL علىdb:5432، وليسlocalhost:5432. وهذا يطابق شبكة حاوية الإنتاج تمامًا:

# backend connects to other services by service name
DATABASE_URL=postgresql://postgres:pass@db:5432/myapp
REDIS_URL=redis://redis:6379/0

# NOT localhost — that would be the container itself
# NOT the host IP — that breaks portability

الفحوصات الصحية وتبعيات الخدمة

services:
  backend:
    depends_on:
      db:
        condition: service_healthy    # waits for DB to pass healthcheck
      redis:
        condition: service_started    # just waits for container to start

  db:
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      retries: 5
      start_period: 10s

الإنتاج مقابل التطوير، إنشاء الملفات

# Use specific files explicitly
docker compose -f docker-compose.yml up -d                          # dev
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d  # prod

# In production: remove volume mounts, use built images, add resource limits
# docker-compose.prod.yml
services:
  backend:
    image: myapp-backend:1.2.0    # pinned production image
    restart: unless-stopped
    deploy:
      resources:
        limits:
          memory: 512m

الأسئلة المتداولة

س: Docker Compose مقابل Kubernetes للتطوير المحلي؟
ج: Docker Compose للتنمية المحلية. Kubernetes للإنتاج. Minikube أو k3d لاختبار تكوينات Kubernetes محليًا. يعد الإنشاء أبسط وأسرع ويكفي لسير عمل التطوير.

س: لماذا لا ينعكس تغيير الكود الخاص بي حتى مع زيادة حجم الصوت؟
ج: تعتمد عملية إعادة التحميل السريعة على إطار العمل (FastAPI –reload، خادم تطوير Next.js). إذا لم يعمل، فتحقق من صحة مسار تثبيت وحدة التخزين ومن تطابق دليل عمل الحاوية. أعد تشغيل الخدمة أيضًا:docker compose restart backend.

س: كيف يمكنني تشغيل عمليات ترحيل قاعدة البيانات تلقائيًا؟
ج: أضف أمرًا في خدمتك أو استخدم خدمة ترحيل منفصلة:docker compose run --rm backend alembic upgrade head. أو قم بإضافته إلى enterpoint.sh قبل بدء تشغيل الخادم.

س: كيف يمكنني مشاركة البيانات بين الخدمات؟
ج: عبر وحدات التخزين المسماة لبيانات قاعدة البيانات. عبر متغيرات البيئة للتكوين. عبر الشبكة للاتصال من خدمة إلى خدمة. تجنب ربط الملفات بين الحاويات — استخدم واجهة برمجة تطبيقات الخدمة بدلاً من ذلك.

س: كيف يمكنني تصحيح أخطاء خدمة قيد التشغيل في Docker؟
ج: قم بتعيين منفذ مصحح الأخطاء في ملف الإنشاء الخاص بك، وقم بتكوين IDE الخاص بك (VS Code’s Remote – Containers أو Python debugpy). أو exec في الحاوية:docker compose exec backend bash.

الخلاصة

Docker Compose هي الأداة النهائية لتطوير الخدمات المحلية المتعددة في عام 2026. يمنحك الإعداد الموجود في هذا الدليل – ملف الإنشاء الأساسي + ملف التجاوز + عمليات تثبيت الحجم المناسبة + عمليات التحقق من الصحة – تكافؤ الإنتاج محليًا، وإعادة التحميل السريع للتطوير السريع، وبدء بأمر واحد لأعضاء الفريق الجدد. استثمر 2-3 ساعات في إعداد هذا بشكل صحيح ووفر مئات الساعات من تصحيح الأخطاء “يعمل على جهازي”.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা