فهرس الدليل

دليل شامل / احترافي

Docker والحاويات: من الصفر إلى النشر الاحترافي

📅 18 أغسطس 2026 | ⏱️ 30 دقيقة قراءة | 📖 أكثر من 5000 كلمة

Docker أحدث ثورة في عالم تطوير البرمجيات ونشر التطبيقات. يسمح لك بتغليف تطبيقك مع جميع تبعياته في حاوية (Container) موحدة تعمل على أي نظام. في هذا الدليل الشامل، سنتعلم كل ما تحتاجه لإتقان Docker من التثبيت حتى النشر الاحترافي في الإنتاج.

Docker Container Technology

تقنية الحاويات - ثورة في عالم تطوير ونشر التطبيقات

🔍 الجزء الأول: ما هي الحاويات ولماذا Docker؟

1.1 الفرق بين الحاويات والآلات الافتراضية

الحاويات تختلف جذرياً عن الآلات الافتراضية (VMs). بينما تحتاج VM إلى نظام تشغيل كامل، الحاوية تشارك نواة نظام التشغيل المضيف، مما يجعلها:

Containers vs VMs Architecture

الفرق بين الحاويات والآلات الافتراضية في البنية والأداء

1.2 مكونات Docker الأساسية

🐳

Docker Engine

البرنامج الأساسي الذي يدير الحاويات على جهازك.

📦

Image

قالب للقراءة فقط يحتوي على التطبيق والتبعيات.

📦

Container

نسخة قابلة للتنفيذ من الـ Image.

📝

Dockerfile

ملف نصي يحتوي على تعليمات بناء الـ Image.

🌐

Docker Hub

مستودع مركزي للـ Images الجاهزة.

🔄

Volume

تخزين دائم للبيانات خارج الحاوية.

🚀 الجزء الثاني: التثبيت والإعداد الأولي

2.1 تثبيت Docker على مختلف الأنظمة

🪟 نظام Windows

قم بتنزيل Docker Desktop for Windows من الموقع الرسمي. يتطلب:

powershell
# تحقق من التثبيت
docker --version
docker run hello-world

🐧 نظام Linux (Ubuntu)

bash
# تحديث النظام
sudo apt update

# تثبيت المتطلبات
sudo apt install ca-certificates curl gnupg

# إضافة مفتاح GPG الرسمي
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# إضافة المستودع
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# تثبيت Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

# إضافة المستخدم لمجموعة docker (لتجنب sudo)
sudo usermod -aG docker $USER

# التحقق
docker --version

🍎 نظام macOS

قم بتنزيل Docker Desktop for Mac من الموقع الرسمي. يتطلب macOS 11 أو أحدث.

2.2 الإعدادات الموصى بها

bash
# تمكين Docker عند بدء التشغيل (Linux)
sudo systemctl enable docker
sudo systemctl start docker

# التحقق من حالة الخدمة
sudo systemctl status docker

# عرض معلومات النظام
docker info
Docker Installation Process

تثبيت Docker على مختلف الأنظمة - خطوات بسيطة لبدء العمل

📦 الجزء الثالث: العمل مع الـ Images

3.1 تنزيل Images من Docker Hub

bash
# تنزيل Image (مثال: Nginx)
docker pull nginx

# تنزيل Image بإصدار محدد
docker pull nginx:alpine

# تنزيل Image من Docker Hub
docker pull python:3.11-slim

# عرض جميع الـ Images المحلية
docker images
docker image ls

# عرض معلومات Image
docker inspect nginx

3.2 البحث عن Images

bash
# البحث عن Images
docker search nginx
docker search python

# البحث مع تصفية النتائج
docker search --filter is-official=true python

3.3 إدارة Images

bash
# حذف Image
docker rmi nginx

# حذف جميع Images غير المستخدمة
docker image prune -a

# حفظ Image كملف
docker save -o nginx.tar nginx

# تحميل Image من ملف
docker load -i nginx.tar

# إعادة تسمية Image
docker tag nginx:latest my-nginx:v1
Docker Images Library

إدارة Images - تنزيل، بحث، وحفظ الحاويات الجاهزة

🎯 الجزء الرابع: تشغيل وإدارة الحاويات

4.1 تشغيل حاوية بسيطة

bash
# تشغيل حاوية Nginx
docker run nginx

# تشغيل في الخلفية (Detached mode)
docker run -d nginx

# تشغيل مع تعيين اسم
docker run -d --name my-nginx nginx

# تشغيل مع تعيين منفذ
docker run -d -p 8080:80 nginx

# تشغيل مع متغير بيئة
docker run -d -e MYSQL_ROOT_PASSWORD=secret mysql

# تشغيل مع Volume
docker run -d -v /host/path:/container/path nginx

4.2 إدارة الحاويات

bash
# عرض الحاويات العاملة
docker ps

# عرض جميع الحاويات (بما فيها المتوقفة)
docker ps -a

# إيقاف حاوية
docker stop my-nginx

# بدء حاوية متوقفة
docker start my-nginx

# إعادة تشغيل
docker restart my-nginx

# حذف حاوية
docker rm my-nginx

# حذف جميع الحاويات المتوقفة
docker container prune

# الدخول إلى حاوية
docker exec -it my-nginx bash

# عرض السجلات (Logs)
docker logs my-nginx
docker logs -f my-nginx  # متابعة مباشرة

4.3 مراقبة الأداء

bash
# عرض استخدام الموارد
docker stats

# عرض تفاصيل حاوية
docker inspect my-nginx

# عرض العمليات داخل الحاوية
docker top my-nginx
Docker Container Monitoring

إدارة الحاويات - تشغيل، إيقاف، ومراقبة الأداء

🛠️ الجزء الخامس: بناء Images مخصصة

5.1 كتابة Dockerfile

مثال على Dockerfile لتطبيق Node.js:

dockerfile
# استخدام Image أساسي
FROM node:18-alpine

# تعيين مجلد العمل
WORKDIR /app

# نسخ package files
COPY package*.json ./

# تثبيت التبعيات
RUN npm ci --only=production

# نسخ الكود
COPY . .

# تعريض المنفذ
EXPOSE 3000

# أمر التشغيل
CMD ["node", "server.js"]

5.2 بناء Image من Dockerfile

bash
# بناء Image
docker build -t my-app .

# بناء مع تحديد Dockerfile
docker build -t my-app -f Dockerfile.prod .

# بناء بدون cache
docker build --no-cache -t my-app .

# عرض سجل البناء
docker build --progress=plain -t my-app .

5.3 أفضل ممارسات Dockerfile

💡
أفضل الممارسات:
• استخدم Images رسمية ومحدثة
• قلل عدد الطبقات (Layers) بدمج الأوامر
• استخدم .dockerignore لاستبعاد الملفات غير الضرورية
• استخدم Alpine Images للحجم الأصغر
• لا تخزن أسرار (Secrets) في Image
• استخدم USER غير root للأمان
Writing Dockerfile Code

بناء Images مخصصة - كتابة Dockerfile احترافي

🔄 الجزء السادس: Docker Compose للتطبيقات المتعددة

6.1 ما هو Docker Compose؟

Docker Compose أداة لتعريف وتشغيل تطبيقات متعددة الحاويات باستخدام ملف YAML واحد.

6.2 كتابة docker-compose.yml

yaml
version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/app
      - /app/node_modules
    environment:
      - NODE_ENV=development
    depends_on:
      - db

  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
      POSTGRES_DB: mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

6.3 أوامر Docker Compose

bash
# بدء الخدمات
docker-compose up

# بدء في الخلفية
docker-compose up -d

# إيقاف الخدمات
docker-compose down

# عرض الحالة
docker-compose ps

# عرض السجلات
docker-compose logs -f

# إعادة بناء
docker-compose up --build

# تنفيذ أمر في خدمة
docker-compose exec web bash
Docker Compose Workflow

Docker Compose - إدارة تطبيقات متعددة الحاويات بسهولة

💾 الجزء السابع: إدارة البيانات والتخزين

7.1 أنواع التخزين في Docker

📂

Volumes

تخزين مُدار بواسطة Docker، الأفضل للإنتاج.

📁

Bind Mounts

ربط مجلد من المضيف، مثالي للتطوير.

💾

tmpfs

تخزين مؤقت في الذاكرة فقط.

7.2 العمل مع Volumes

bash
# إنشاء Volume
docker volume create my-volume

# عرض Volumes
docker volume ls

# فحص Volume
docker volume inspect my-volume

# حذف Volume
docker volume rm my-volume

# حذف Volumes غير المستخدمة
docker volume prune

# استخدام Volume
docker run -d -v my-volume:/data nginx

7.3 نسخ احتياطي للبيانات

bash
# نسخ احتياطي
docker run --rm -v my-volume:/source -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz -C /source .

# استعادة
docker run --rm -v my-volume:/target -v $(pwd):/backup alpine tar xzf /backup/backup.tar.gz -C /target

🌐 الجزء الثامن: الشبكات في Docker

8.1 أنواع الشبكات

bash
# عرض الشبكات
docker network ls

# إنشاء شبكة
docker network create my-network

# تشغيل حاوية في شبكة
docker run -d --network my-network --name web nginx

# ربط حاوية بشبكة
docker network connect my-network my-container

# فصل حاوية عن شبكة
docker network disconnect my-network my-container

8.2 التواصل بين الحاويات

الحاويات في نفس الشبكة يمكنها التواصل باستخدام أسماء الحاويات كـ DNS:

bash
# إنشاء شبكة
docker network create app-network

# تشغيل قاعدة البيانات
docker run -d --network app-network --name db postgres

# تشغيل التطبيق (يمكنه الاتصال بـ db)
docker run -d --network app-network --name app my-app
Docker Network Architecture

الشبكات في Docker - تواصل آمن بين الحاويات

🚀 الجزء التاسع: النشر في الإنتاج

9.1 تحسين Images للإنتاج

dockerfile
# Multi-stage build
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build

FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/server.js"]

9.2 الأمان في الإنتاج

⚠️
نصائح أمان مهمة:
• لا تشغل كـ root داخل الحاوية
• استخدم Secrets Management (لا تضع كلمات مرور في Images)
• حدّث Images بانتظام
• استخدم Security Scanning
• قلل الصلاحيات (Capabilities)

9.3 Docker Swarm (Orchestration)

bash
# تهيئة Swarm
docker swarm init

# نشر خدمة
docker service create --name web --replicas 3 -p 80:80 nginx

# عرض الخدمات
docker service ls

# تحديث خدمة
docker service update --image nginx:alpine web

# Scale خدمة
docker service scale web=5

🛠️ الجزء العاشر: نصائح وحلول للمشاكل الشائعة

10.1 مشاكل شائعة وحلولها

❌

الحاوية تتوقف فوراً

الحل: تأكد أن العملية الرئيسية (PID 1) تبقى عاملة.

❌

مشاكل صلاحيات الملفات

الحل: استخدم USER مناسب أو عدل الصلاحيات.

❌

الحاوية تستهلك موارد كثيرة

الحل: استخدم --memory و --cpus لتحديد الموارد.

❌

فشل الاتصال بين الحاويات

الحل: تأكد أنها في نفس الشبكة واستخدم الأسماء.

10.2 تنظيف Docker

bash
# تنظيف شامل (احذر!)
docker system prune -a --volumes

# تنظيف Images غير مستخدمة
docker image prune -a

# تنظيف الحاويات المتوقفة
docker container prune

# تنظيف Volumes غير مستخدمة
docker volume prune

# عرض استخدام القرص
docker system df
Docker Production Best Practices

النشر في الإنتاج - تحسين، أمان، وإدارة الحاويات

💡 الخلاصة الهندسية الشاملة:

  • ✅ الحاويات أخف وأسرع من VMs - استخدمها لتطوير ونشر أسرع.
  • ✅ Dockerfile جيد = Images أصغر وأكثر أماناً.
  • ✅ Compose يسهل إدارة التطبيقات المتعددة.
  • ✅ Volumes ضرورية للحفاظ على البيانات.
  • ✅ الأمان في الإنتاج ليس خياراً - اتبع أفضل الممارسات.
  • ✅ المراقبة والتنظيف المستمر يحافظ على أداء النظام.

Docker ليس مجرد أداة، بل منهجية عمل حديثة! ✨

تم نسخ الرابط!