عرب نت | Ar4bnet
تسجيل الدخول
الدرس السابع: ثورة الحاويات (Docker & Containers) في بيئة لينكس
TUTORIAL السيرفرات و الاستضافه

الدرس السابع: ثورة الحاويات (Docker & Containers) في بيئة لينكس

كيف غير Docker شكل هندسة البرمجيات؟ في هذا الدرس سنتعمق في كيفية عمل الحاويات (Containers) على مستوى نواة لينكس (cgroups و namespaces)، وسنقوم ببناء وتشغيل بيئة معزولة بالكامل باستخدام Docker Compose.

📅 2026-05-25 01:59 👁️ 673 مشاهدة 🧠 متقدم ⏱️ 4 دقيقة قراءة
إعلان

ثورة الحاويات (Containers): ما بعد الـ Virtual Machines

في الماضي، لعزل التطبيقات كنا نستخدم الآلات الافتراضية (Virtual Machines). كل VM تحتاج إلى نظام تشغيل كامل (Guest OS)، مما يستهلك جيجابايتات من الذاكرة العشوائية وعشرات الدقائق للتشغيل. ثم جاءت الحاويات (Containers)؛ وهي تستخدم نواة (Kernel) لينكس الأساسية الخاصة بالسيرفر المضيف، وتقوم فقط بعزل العمليات (Processes)، مما يجعل تشغيل الحاوية يأخذ ثوانٍ معدودة ويستهلك ميجابايتات قليلة.

كيف يعمل Docker تحت الغطاء؟

يعتمد Docker بالأساس على ميزتين في قلب نواة لينكس (Linux Kernel):

  1. Namespaces (فضاء الأسماء): تضمن العزل المطلق للعملية. العملية داخل الحاوية تظن أنها وحدها في النظام، لها مساحة Process IDs خاصة، وشبكة خاصة، ومجلد الجذر / خاص بها.
  2. Control Groups (cgroups): تضمن التحكم في الموارد (Resource Limiting). يمكنك عبر الـ cgroups إجبار الحاوية على عدم تجاوز 512MB من الذاكرة أو 10% من المعالج، حتى لو كان السيرفر يمتلك 128GB.

تثبيت Docker على Ubuntu/AlmaLinux

بدلاً من الطرق التقليدية، الطريقة الأفضل والموثوقة هي استخدام السكربت الرسمي لـ Docker:

إعلان

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

لمنع الحاجة لكتابة sudo مع كل أمر، قم بإضافة مستخدمك الحالي إلى مجموعة docker:

sudo usermod -aG docker $USER
# يجب تسجيل الخروج والدخول مجدداً ليتم تطبيق الصلاحيات

فهم أوامر Docker الأساسية المعمقة

تشغيل سيرفر ويب (Nginx) معزول في ثانية واحدة:

docker run -d --name my_web -p 8080:80 nginx

ماذا حدث هنا؟

  • -d: التشغيل في الخلفية (Detached).
  • --name: اسم الحاوية.
  • -p 8080:80: هذا توجيه منافذ (Port Forwarding)، يقوم بربط البورت 8080 في سيرفرك الأصلي بالبورت 80 داخل الحاوية المعزولة.

الـ Dockerfile: بناء صورتك الخاصة

المحترفون لا يستخدمون الصور الجاهزة فقط، بل يبنون صورهم (Images) الخاصة بملف Dockerfile. إليك مثال لبناء صورة لتطبيق Node.js أو PHP بسيط:

FROM php:8.2-fpm-alpine
WORKDIR /var/www/html
COPY . .
RUN chown -R www-data:www-data /var/www/html
CMD ["php-fpm"]
EXPOSE 9000

البناء يتم بأمر docker build -t my_php_app .

إدارة البيئات المعقدة مع Docker Compose

نادراً ما يعمل التطبيق كحاوية واحدة؛ تطبيق Laravel مثلاً يحتاج Nginx، PHP-FPM، و MySQL و Redis. إدارة 4 حاويات يدوياً أمر شاق، هنا يتألق docker-compose.yml:

version: '3.8'
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./src:/var/www/html
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - app
  app:
    build: .
    volumes:
      - ./src:/var/www/html
  db:
    image: mariadb:10.6
    environment:
      MYSQL_ROOT_PASSWORD: secret_password
      MYSQL_DATABASE: laravel

تشغيل كل هذه المنظومة يتطلب أمراً واحداً فقط:

docker-compose up -d

هذا يجسد مفهوم (Infrastructure as Code)، حيث يتم كتابة البنية التحتية ككود يمكن مشاركته وتطبيقه على أي سيرفر آخر بثوانٍ.


هندسة الحاويات: مفاهيم متقدمة يجب أن تعرفها

شبكات دوكر (Docker Networks)

بشكل افتراضي، تعمل جميع الحاويات على شبكة تسمى `bridge`. لكن في المشاريع الكبيرة، يجب عزل التطبيقات حتى داخل السيرفر نفسه. يمكنك إنشاء شبكة خاصة بقاعدة البيانات وتطبيق الواجهة الخلفية بحيث لا يمكن لأي حاوية أخرى في السيرفر الوصول إليها:

docker network create backend-network
docker run -d --name db --network backend-network mariadb
docker run -d --name app --network backend-network my_laravel_app

بهذه الطريقة، الحاوية `app` تستطيع الوصول لـ `db` بالاسم مباشرة دون الحاجة لمعرفة عنوان הـ IP الداخلي الخاص بها.

إدارة التخزين في الحاويات (Docker Volumes)

الحاويات "مؤقتة" (Ephemeral). إذا قمت بحذف حاوية قاعدة البيانات، ستفقد كل بياناتك! الحل هو استخدام الـ Volumes. تخيل الـ Volume كـ USB فلاش درايف تقوم بتركيبه في الحاوية. حتى لو حُذفت الحاوية، البيانات تظل موجودة في الـ Volume على السيرفر المضيف ويمكن تركيبها في حاوية جديدة.

docker volume create db_data
docker run -d -v db_data:/var/lib/mysql mariadb

تحسين بناء الصور (Multi-stage Builds)

إذا كنت تقوم ببناء تطبيق React أو Vue، فإنك تحتاج إلى مكتبات Node.js و npm لتحزيم الكود (Build)، ولكنك لا تحتاجها لتشغيل التطبيق النهائي، بل تحتاج فقط لـ Nginx وملفات HTML/JS النهائية. استخدام Multi-stage build يقلل حجم الصورة من 1GB إلى 20MB فقط!

# المرحلة الأولى: البناء
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build

# المرحلة الثانية: التشغيل
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
إعلان

🎯 اختبر معلوماتك

اختبار فهم: ثورة الحاويات (Docker & Containers) في بيئة لينكس

🏆 50 نقطة مكافأة 5 سؤال 70% للنجاح
ابدأ الاختبار ←

مواضيع تهمك

عرض كل الدروس
الدرس الثامن: إدارة شهادات الـ SSL وتأمين المواقع (Let's Encrypt & HSTS)
🧠 متقدم
درس
25 مايو 2026 286

الدرس الثامن: إدارة شهادات الـ SSL وتأمين المواقع (Let's Encrypt & HSTS)

لا يكفي تركيب SSL، بل يجب تفعيل HSTS و OCSP Stapling. سنتعلم كيفية تأمين لوحة Plesk نفسها،...

الدرس السابع: إعداد وتأمين خوادم البريد الإلكتروني (Mail Server Mastery)
🧠 متقدم
درس
25 مايو 2026 297

الدرس السابع: إعداد وتأمين خوادم البريد الإلكتروني (Mail Server Mastery)

بريدك الإلكتروني دائماً في الـ Spam؟ في هذا الدرس سنتعلم إعداد Postfix و Dovecot، وتكوين س...

الدرس العاشر: النسخ الاحتياطي السحابي والانتقال الآلي (Migration & Backups)
🧠 متقدم
درس
25 مايو 2026 576

الدرس العاشر: النسخ الاحتياطي السحابي والانتقال الآلي (Migration & Backups)

النسخ الاحتياطي هو الملاذ الأخير. سنتعلم كيفية ربط Plesk بالسحابة (Google Drive/S3)، وكيفي...

الدرس التاسع: أمان السيرفر و Fail2Ban وجدار حماية Plesk المدمج
🧠 متقدم
درس
25 مايو 2026 281

الدرس التاسع: أمان السيرفر و Fail2Ban وجدار حماية Plesk المدمج

كيف تجعل سيرفرك قلعة لا تُخترق؟ شرح مفصل لاستخدام Plesk Firewall لإغلاق المنافذ، تكوين Fai...

الدرس السادس: أسرار إدارة خوادم الويب (Apache & Nginx) عبر Plesk
🧠 متقدم
درس
25 مايو 2026 521

الدرس السادس: أسرار إدارة خوادم الويب (Apache & Nginx) عبر Plesk

الغوص العميق في محركات الويب. كيف يعمل Nginx كبروكسي عكسي أمام Apache في Plesk؟ وكيف نكتب...

الدرس الخامس: إدارة قواعد البيانات المتقدمة في Plesk
🧠 متقدم
درس
25 مايو 2026 705

الدرس الخامس: إدارة قواعد البيانات المتقدمة في Plesk

كيف يدير Plesk محرك قواعد البيانات MySQL/MariaDB في الخلفية؟ سنتعلم إنشاء قواعد البيانات،...

💬 التعليقات

0 تعليقات

لتتمكن من كتابة تعليق، يجب تسجيل الدخول. تسجيل الدخول
لا توجد تعليقات حتى الآن. كن أول من يكتب تعليقًا.
📑 محتويات المقال