التكنولوجيا

كيف تستعمل Docker Compose لتشغيل عدة خدمات معاً

دليلك الشامل لـ Docker Compose: كيف تدير بيئات التطوير بسهولة تامة

مقدمة: لماذا يحتاج كل مطور إلى معرفة Docker Compose؟

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

ما الذي تحتاج معرفته أولاً؟

قبل أن ندخل في التفاصيل التقنية، دعني أشرح لك المفهوم بطريقة بسيطة ومباشرة.

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

Docker Compose يأخذ الفكرة خطوة أبعد. بدلاً من إدارة حاوية واحدة، يتيح لك تشغيل عدة حاويات في آنٍ واحد وتنسيق العمل بينها من خلال ملف إعداد واحد بسيط. مثلاً، تطبيق ويب حديث قد يحتاج إلى: خادم Node.js، قاعدة بيانات MySQL، خادم Redis للتخزين المؤقت، وعكس وكيل Nginx. مع Docker Compose، كل هذه الخدمات تعمل بأمر واحد فقط.

الملف الأساسي الذي ستتعامل معه يسمى `docker-compose.yml`، وهو ملف نصي بسيط تكتب فيه كيف تريد أن تعمل حاوياتك معاً.

الأدوات والمتطلبات التي تحتاجها

قبل أن تبدأ، تأكد من توفر هذه العناصر على جهازك:

المتطلبات الأساسية:
Docker Desktop (يشمل Docker Compose تلقائياً على Windows وmacOS)
Docker Engine مع Docker Compose Plugin على Linux
– نظام تشغيل: Windows 10 أو أحدث، macOS 10.15 أو أحدث، أو أي توزيعة Linux حديثة
– ذاكرة RAM لا تقل عن 4 جيجابايت (يُفضَّل 8 جيجابايت)
– مساحة على القرص الصلب لا تقل عن 10 جيجابايت

الأدوات الإضافية المفيدة:
Visual Studio Code مع إضافة Docker الرسمية لتسهيل تحرير ملفات `yml`
Terminal أو PowerShell للتعامل مع الأوامر
Git لإدارة إصدارات مشاريعك

للتحقق من التثبيت الصحيح:
“`bash
docker –version
docker compose version
“`

إذا ظهرت أرقام الإصدارات بشكل صحيح، فأنت جاهز للبدء.

بديل للمبتدئين: إذا كنت لا تريد التثبيت المحلي في البداية، يمكنك تجربة Play with Docker وهو بيئة تجريبية مجانية في المتصفح مباشرة.

متى يجب عليك استخدام Docker Compose؟

هذا سؤال مهم لأن كثيراً من المبتدئين يقعون في فخ استخدام الأدوات في غير محلها.

استخدم Docker Compose في هذه الحالات:

عند بدء مشروع جديد: إعداد البيئة من الصفر يصبح أسرع بكثير وأكثر قابلية للتكرار.
عند العمل ضمن فريق: بدلاً من إرسال تعليمات الإعداد لكل عضو، تشارك ملف `docker-compose.yml` واحد يعمل على جميع الأجهزة.
في بيئات الاختبار: تشغيل اختبارات التكامل بين الخدمات المختلفة يصبح عملية موحدة وموثوقة.
عند الانتقال بين المشاريع: لكل مشروع بيئته المعزولة، لا تعارض بين الإصدارات.
لتعلم التقنيات الجديدة: تريد تجربة MongoDB أو Redis أو RabbitMQ؟ ابدأها في دقيقتين ثم أوقفها عندما تنتهي.

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

الدليل العملي خطوة بخطوة

سأأخذك عبر مثال حقيقي: إعداد تطبيق ويب مع قاعدة بيانات باستخدام Docker Compose للمبتدئين.

الخطوة الأولى: إنشاء مجلد المشروع

“`bash
mkdir my-app
cd my-app
“`

الخطوة الثانية: إنشاء ملف docker-compose.yml

افتح المحرر النصي وأنشئ الملف بهذا المحتوى:

“`yaml
version: ‘3.8’

services:
web:
image: nginx:latest
ports:
– “8080:80”
volumes:
– ./html:/usr/share/nginx/html
depends_on:
– db

db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: mysecretpassword
MYSQL_DATABASE: myapp
MYSQL_USER: appuser
MYSQL_PASSWORD: apppassword
volumes:
– db_data:/var/lib/mysql

volumes:
db_data:
“`

تنبيه مهم: لا تستخدم كلمات مرور بسيطة في الإنتاج. هذا المثال للتعلم فقط.

الخطوة الثالثة: إنشاء مجلد html بمحتوى بسيط

“`bash
mkdir html
echo “

مرحباً من Docker!

” > html/index.html
“`

الخطوة الرابعة: تشغيل كل شيء

“`bash
docker compose up -d
“`

الخيار `-d` يشغّل الحاويات في الخلفية. بعد لحظات، افتح المتصفح وتوجّه إلى `http://localhost:8080`.

الخطوة الخامسة: إدارة الحاويات أثناء العمل

هنا يصبح مفهوم إدارة الحاويات واضحاً تماماً:

“`bash

عرض حالة الحاويات

docker compose ps

مشاهدة السجلات

docker compose logs

إيقاف كل شيء

docker compose down

إيقاف وحذف البيانات أيضاً

docker compose down -v
“`

نصيحة: استخدم `docker compose logs -f` لمتابعة السجلات بشكل مباشر أثناء التطوير.

الخطوة السادسة: تحديث الخدمات

إذا عدّلت الكود أو الإعدادات:

“`bash
docker compose up -d –build
“`

هذا يُعيد بناء الصور المحدّثة فقط دون إيقاف الخدمات الأخرى.

الفوائد التي ستلاحظها فوراً

بمجرد أن تعتاد على هذا الأسلوب، ستجد نفسك:

توفير ساعات من إعداد البيئة: ما كان يأخذ نصف يوم أصبح يأخذ خمس دقائق
التخلص من مشكلة “يعمل عندي فقط”: البيئة موحدة للجميع
عزل المشاريع بشكل كامل: لا تعارض بين إصدارات Python أو Node.js أو PHP
سهولة الرجوع إلى الإصدارات السابقة: كل شيء موثق في ملف واحد
تسريع عملية Onboarding: الموظف الجديد يبدأ العمل في ساعات بدل أيام

نصائح إضافية وأفضل الممارسات

استخدم ملف .env لإدارة المتغيرات:
بدلاً من كتابة كلمات المرور مباشرة في الملف، أنشئ ملف `.env`:

“`env
DB_PASSWORD=mysecretpassword
DB_USER=appuser
“`

ثم أشر إليه في `docker-compose.yml`:
“`yaml
MYSQL_PASSWORD: ${DB_PASSWORD}
“`

أضف ملف .env إلى .gitignore دائماً حتى لا تُرفع البيانات الحساسة إلى GitHub.

استخدم شبكات مخصصة:
“`yaml
networks:
app-network:
driver: bridge
“`

هذا يعزل خدماتك عن بقية الحاويات على الجهاز.

للتطوير مقابل الإنتاج: أنشئ ملفين منفصلين: `docker-compose.yml` للإنتاج و`docker-compose.dev.yml` للتطوير، ثم ادمجهما عند الحاجة.

الأخطاء الشائعة التي يقع فيها المبتدئون

الخطأ الأول: رفع بيانات حساسة إلى GitHub
الحل: استخدم دائماً ملف `.env` وأضفه إلى `.gitignore` قبل أي شيء آخر.

الخطأ الثاني: عدم استخدام volumes لقواعد البيانات
إذا لم تحدد volume لقاعدة البيانات، ستفقد كل بياناتك عند إيقاف الحاويات. تأكد دائماً من تعريف volume ثابت.

الخطأ الثالث: تجاهل depends_on
إذا بدأ تطبيقك قبل قاعدة البيانات، ستحصل على أخطاء. استخدم `depends_on` و`healthcheck` معاً.

الخطأ الرابع: استخدام الـ tag الـ latest دائماً
في الإنتاج، حدد إصدارات ثابتة مثل `mysql:8.0.32` بدل `mysql:latest` لتجنب مفاجآت التحديثات.

الخطأ الخامس: عدم قراءة السجلات عند حدوث الأخطاء
كثيرون يتوقفون عند أول خطأ بدون تشخيص. الأمر `docker compose logs [service_name]` هو أول خطوة في حل أي مشكلة.

كيف تستمر في التحسن على المدى البعيد؟

تعلّم Docker Swarm وKubernetes تدريجياً: Docker Compose هو نقطة البداية، لكن عندما تكبر مشاريعك ستحتاج لأدوات تنظيم أكثر قوة. ابدأ بـ Compose وأتقنه جيداً قبل الانتقال.

راجع ملفاتك بانتظام: مع نمو المشروع، راجع ملف `docker-compose.yml` كل شهر للتحقق من تحديث الإصدارات وتحسين الإعدادات.

اقرأ التوثيق الرسمي: موقع Docker الرسمي يُحدَّث باستمرار بأمثلة ونصائح جديدة.

طبّق مبدأ least privilege: لا تشغّل الحاويات بصلاحيات root إلا عند الضرورة القصوى.

الخلاصة

إذا كان عليّ أن أختصر كل ما سبق في جملة واحدة، سأقول: Docker Compose للمبتدئين هو الطريقة الأسرع والأذكى لبناء بيئات تطوير احترافية وموحدة. لقد رأيت بنفسي كيف يتحول العمل الفوضوي إلى عملية منظمة وقابلة للتكرار بمجرد إتقان هذه الأداة.

مهارة إدارة الحاويات لم تعد رفاهية للمطورين المتقدمين، بل أصبحت ضرورة لكل من يعمل في مجال تطوير البرمجيات اليوم. ابدأ بالمثال البسيط الذي شاركته في هذا الدليل، ثم أضف خدمات جديدة بالتدريج. الأهم هو أن تبدأ الآن.

الأسئلة الشائعة

س١: هل Docker Compose مجاني الاستخدام؟
نعم، Docker Compose مجاني تماماً للاستخدام الشخصي والمشاريع مفتوحة المصدر. Docker Desktop له قيود تجارية لبعض الشركات الكبيرة، لكن Docker Engine على Linux مجاني بالكامل.

س٢: ما الفرق بين Docker Compose وKubernetes؟
Docker Compose مثالي لبيئات التطوير والمشاريع الصغيرة والمتوسطة، بينما Kubernetes مصمم لإدارة تطبيقات على نطاق واسع في الإنتاج مع متطلبات أعلى. ابدأ بـ Compose ثم انتقل لـ Kubernetes عند الحاجة الفعلية.

س٣: هل يمكنني استخدام Docker Compose مع أي لغة برمجة؟
بالتأكيد. Docker Compose يعمل مع Python، Node.js، PHP، Java، Ruby، Go، وأي لغة أخرى تدعم Docker. الأمر يتعلق بالبيئة وليس باللغة.

س٤: ماذا يحدث لبياناتي عند تشغيل docker compose down؟
إذا استخدمت `volumes` في ملف الإعداد، تبقى البيانات محفوظة. لكن إذا أضفت الخيار `-v` للأمر فستُحذف البيانات. كن حذراً جداً مع هذا الخيار في بيئة الإنتاج.

س٥: كم يستغرق تعلم Docker Compose من الصفر؟
من تجربتي مع الطلاب والمطورين الذين أنصحهم، يمكن إتقان الأساسيات في أسبوع إلى أسبوعين من الممارسة اليومية. المفاتيح هي التطبيق العملي على مشاريع حقيقية وليس مجرد قراءة التوثيق.

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

أضف تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Captcha Plus loading...

Back to top button