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

🐳

Docker و الحاويات: دليلك الشامل

تعلّم كيف تستخدم Docker لتشغيل تطبيقاتك باحترافية وسرعة

ما هو Docker وكيف يعمل؟

Docker هو منصة مفتوحة المصدر تتيح لك تشغيل التطبيقات داخل حاويات (Containers) معزولة. الحاوية هي بيئة خفيفة تحتوي على التطبيق وجميع المكتبات والإعدادات التي يحتاجها للعمل بدون التأثير على النظام الأساسي أو التطبيقات الأخرى.

تخيّل أن لديك تطبيق يحتاج PHP 8.2 وتطبيق آخر يحتاج PHP 7.4 على نفس السيرفر. بدون Docker ستواجه تعارضات. مع Docker كل تطبيق يعمل في حاويته الخاصة بإصدار PHP المناسب له بدون أي تعارض.

Docker يعمل من خلال ثلاث مراحل:

  • Build: بناء صورة (Image) تحتوي على التطبيق ومتطلباته
  • Ship: مشاركة الصورة عبر Docker Hub أو Registry خاص
  • Run: تشغيل الصورة كحاوية على أي سيرفر

الفرق بين Docker والأجهزة الافتراضية (VMs)

كثير من المبتدئين يخلطون بين Docker والأجهزة الافتراضية. الفرق الجوهري:

الأجهزة الافتراضية (VMs):

  • تحتوي على نظام تشغيل كامل لكل جهاز افتراضي
  • تستهلك موارد كبيرة (RAM و CPU ومساحة)
  • بطيئة في الإقلاع (دقائق)
  • عزل كامل على مستوى Hardware

حاويات Docker:

  • تشارك نواة (Kernel) نظام التشغيل الأساسي
  • خفيفة جداً (ميغابايتات بدلاً من جيغابايتات)
  • تقلع في ثوانٍ
  • عزل على مستوى العمليات (Process-level isolation)
  • يمكن تشغيل عشرات الحاويات على نفس السيرفر

مثال عملي: سيرفر VPS بـ 4GB RAM يمكنه تشغيل 2-3 أجهزة افتراضية لكن يمكنه تشغيل 20-30 حاوية Docker بسهولة.

المفاهيم الأساسية في Docker

Image (الصورة)

قالب للقراءة فقط يحتوي على نظام التشغيل والتطبيق ومتطلباته. تُبنى من ملف Dockerfile وتُخزّن في Registry.

Container (الحاوية)

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

Volume (وحدة التخزين)

مكان لتخزين البيانات بشكل دائم. بدون Volume تُفقد البيانات عند حذف الحاوية. Volumes تبقى حتى بعد حذف الحاوية.

Network (الشبكة)

Docker يُنشئ شبكات افتراضية تسمح للحاويات بالتواصل مع بعضها. يمكنك إنشاء شبكات معزولة لكل مشروع.

Docker Hub

مستودع عام للصور الجاهزة. يحتوي على آلاف الصور الرسمية مثل nginx وmysql وphp وwordpress وgitlab وغيرها.

تثبيت Docker على السيرفر

على Ubuntu 22.04 / 24.04

# إزالة أي نسخة قديمة
sudo apt remove docker docker-engine docker.io containerd runc

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

# إضافة مفتاح Docker الرسمي
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

# إضافة مستودع Docker
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-buildx-plugin docker-compose-plugin -y

# تشغيل Docker وتفعيله عند الإقلاع
sudo systemctl start docker
sudo systemctl enable docker

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

على AlmaLinux / CentOS

# إضافة مستودع Docker
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# تثبيت Docker
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

# تشغيل Docker
sudo systemctl start docker && sudo systemctl enable docker
# التحقق من التثبيت
docker --version
docker compose version
docker run hello-world

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

# === إدارة الصور ===
docker pull nginx                    # تحميل صورة من Docker Hub
docker images                        # عرض الصور المحلية
docker rmi nginx                     # حذف صورة
docker build -t myapp:1.0 .          # بناء صورة من Dockerfile

# === إدارة الحاويات ===
docker run -d --name web nginx       # تشغيل حاوية في الخلفية
docker run -d -p 8080:80 nginx       # تشغيل مع ربط المنفذ
docker ps                            # عرض الحاويات العاملة
docker ps -a                         # عرض جميع الحاويات
docker stop web                      # إيقاف حاوية
docker start web                     # تشغيل حاوية متوقفة
docker restart web                   # إعادة تشغيل
docker rm web                        # حذف حاوية
docker logs web                      # عرض سجلات الحاوية
docker logs -f web                   # متابعة السجلات مباشرة
docker exec -it web bash             # الدخول داخل الحاوية

# === إدارة Volumes ===
docker volume create mydata          # إنشاء volume
docker volume ls                     # عرض volumes
docker run -v mydata:/data nginx     # ربط volume بحاوية

# === إدارة الشبكات ===
docker network create mynet          # إنشاء شبكة
docker network ls                    # عرض الشبكات
docker run --network mynet nginx     # تشغيل حاوية في شبكة محددة

# === التنظيف ===
docker system prune -a               # حذف كل شيء غير مستخدم
docker container prune               # حذف الحاويات المتوقفة

كتابة Dockerfile احترافي

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

# استخدام صورة PHP الرسمية كقاعدة
FROM php:8.2-fpm-alpine

# تثبيت الإضافات المطلوبة
RUN apk add --no-cache 
    libpng-dev libjpeg-turbo-dev freetype-dev 
    && docker-php-ext-configure gd --with-freetype --with-jpeg 
    && docker-php-ext-install gd pdo pdo_mysql mysqli opcache

# نسخ إعدادات PHP المخصصة
COPY php.ini /usr/local/etc/php/conf.d/custom.ini

# تحديد مجلد العمل
WORKDIR /var/www/html

# نسخ ملفات التطبيق
COPY --chown=www-data:www-data . .

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

# الأمر الافتراضي
CMD ["php-fpm"]

نصائح لكتابة Dockerfile احترافي:

  • استخدم صور Alpine (أصغر حجماً وأكثر أماناً)
  • ادمج أوامر RUN في طبقة واحدة لتقليل حجم الصورة
  • استخدم .dockerignore لاستثناء الملفات غير الضرورية
  • ضع التعليمات التي تتغير كثيراً في النهاية للاستفادة من الكاش
  • لا تُشغّل التطبيق بصلاحيات root داخل الحاوية

Docker Compose لإدارة عدة حاويات

Docker Compose يتيح لك تعريف وتشغيل عدة حاويات معاً بملف YAML واحد. مثالي للتطبيقات التي تحتاج أكثر من خدمة (مثل ويب سيرفر + قاعدة بيانات + كاش):

# docker-compose.yml
version: '3.8'

services:
  # سيرفر Nginx
  web:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - app-data:/var/www/html
    depends_on:
      - php
    restart: unless-stopped

  # PHP-FPM
  php:
    build: .
    volumes:
      - app-data:/var/www/html
    depends_on:
      - db
    restart: unless-stopped

  # قاعدة البيانات
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: StrongRootPass123!
      MYSQL_DATABASE: myapp
      MYSQL_USER: appuser
      MYSQL_PASSWORD: AppPass456!
    volumes:
      - db-data:/var/lib/mysql
    restart: unless-stopped

  # Redis للكاش
  redis:
    image: redis:alpine
    restart: unless-stopped

volumes:
  app-data:
  db-data:
# أوامر Docker Compose
docker compose up -d              # تشغيل جميع الخدمات
docker compose down               # إيقاف وحذف الحاويات
docker compose ps                 # عرض حالة الخدمات
docker compose logs -f            # متابعة السجلات
docker compose restart php        # إعادة تشغيل خدمة محددة
docker compose exec php bash      # الدخول لحاوية محددة
docker compose pull               # تحديث الصور

تشغيل WordPress باستخدام Docker

إليك ملف Docker Compose كامل لتشغيل ووردبريس مع MySQL وNginx:

# docker-compose.yml لووردبريس
version: '3.8'

services:
  wordpress:
    image: wordpress:php8.2-fpm-alpine
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: WpSecurePass2026!
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp-data:/var/www/html
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: RootPass2026!
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: WpSecurePass2026!
    volumes:
      - db-data:/var/lib/mysql
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - wp-data:/var/www/html
      - ./nginx-wp.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - wordpress
    restart: unless-stopped

volumes:
  wp-data:
  db-data:
# تشغيل ووردبريس
docker compose up -d

# التحقق من عمل الخدمات
docker compose ps

# عرض سجلات ووردبريس
docker compose logs -f wordpress

# نسخ احتياطي لقاعدة البيانات
docker compose exec db mysqldump -u wpuser -pWpSecurePass2026! wordpress > backup.sql

أفضل الممارسات لأمان Docker

  • لا تستخدم root: شغّل التطبيق بمستخدم عادي داخل الحاوية باستخدام USER في Dockerfile
  • استخدم صور رسمية: تجنب الصور غير الموثوقة من Docker Hub
  • حدّث الصور باستمرار: ابقِ الصور محدّثة لسد الثغرات الأمنية
  • لا تُخزّن أسرار في الصورة: استخدم Docker Secrets أو متغيرات البيئة
  • حدّد الموارد: ضع حدود للـ CPU والـ RAM لكل حاوية
  • استخدم شبكات معزولة: لا تعرّض خدمات داخلية (مثل قاعدة البيانات) للخارج
  • فعّل logging: راقب سجلات الحاويات بشكل دوري
  • افحص الصور: استخدم أدوات مثل docker scout لكشف الثغرات
# تحديد موارد الحاوية
docker run -d --name web 
  --memory="512m" 
  --cpus="1.0" 
  nginx

# فحص الصورة للثغرات
docker scout cves nginx:alpine

# عدم تشغيل بصلاحيات root
docker run -d --user 1000:1000 nginx

Docker في بيئة الإنتاج (Production)

لاستخدام Docker في بيئة الإنتاج بشكل احترافي:

  • استخدم Docker Compose: لتعريف البيئة بالكامل في ملف واحد
  • فعّل restart policy: استخدم restart: unless-stopped أو restart: always
  • استخدم Volumes للبيانات: لا تخزّن بيانات مهمة داخل الحاوية
  • استخدم Reverse Proxy: ضع Nginx أو Traefik أمام تطبيقاتك
  • النسخ الاحتياطي: انسخ Volumes وقواعد البيانات بشكل دوري
  • المراقبة: استخدم Portainer لإدارة Docker بواجهة رسومية
  • CI/CD: اربط Docker مع GitHub Actions لنشر تلقائي
# تثبيت Portainer لإدارة Docker بواجهة ويب
docker volume create portainer_data
docker run -d -p 9443:9443 --name portainer 
  --restart=always 
  -v /var/run/docker.sock:/var/run/docker.sock 
  -v portainer_data:/data 
  portainer/portainer-ce:latest

# الآن ادخل https://server-ip:9443 لإدارة Docker

الخلاصة

Docker غيّر طريقة تشغيل ونشر التطبيقات وأصبح أداة لا غنى عنها في 2026. سواء كنت تُشغّل موقع ووردبريس أو تطبيق SaaS أو مشروع AI فإن Docker يوفر لك بيئة معزولة وقابلة للنقل وسهلة الإدارة. ابدأ بالأساسيات وتدرّج حتى تصل لاستخدام Docker Compose في بيئة الإنتاج. المفتاح هو الممارسة العملية.

سيرفرات VPS جاهزة لـ Docker من مرام هوست

سيرفرات VPS بصلاحيات root كاملة ودعم Docker مع أداء عالي واستقرار ممتاز. ابدأ من هنا.

الأسئلة الشائعة حول Docker

هل Docker مجاني؟

نعم Docker Engine مجاني ومفتوح المصدر بالكامل. Docker Desktop مجاني للاستخدام الشخصي والشركات الصغيرة (أقل من 250 موظف). على السيرفرات تستخدم Docker Engine المجاني مباشرة.

هل Docker يبطئ الأداء؟

لا. Docker يعمل على مستوى نواة النظام ولا يضيف overhead كبير مثل الأجهزة الافتراضية. الأداء يكون 95-98% من الأداء الأصلي. الفرق غير محسوس عملياً.

هل يمكنني استخدام Docker على استضافة مشتركة؟

لا. Docker يحتاج صلاحيات root لذلك تحتاج VPS أو سيرفر مخصص. في مرام هوست توفر سيرفرات VPS بصلاحيات كاملة تدعم Docker.

ماذا يحدث للبيانات إذا حذفت الحاوية؟

البيانات داخل الحاوية تُحذف معها. لذلك يجب استخدام Docker Volumes لتخزين البيانات المهمة (قواعد البيانات والملفات المرفوعة) بشكل دائم خارج الحاوية.

مقالات ذات صلة

مقالات ذات صلة