إدارة الحاويات باحترافية مع Docker Compose: الدليل الشامل

  • يعمل Docker Compose على تبسيط إدارة ونشر حاويات متعددة بشكل منظم.
  • يتيح لك تحديد العلاقات والمتغيرات والحجم بين الخدمات في ملف YAML واحد.
  • يسهل تكرار البيئة ويسرع التكامل المستمر وتصحيح الأخطاء.

دوكر يؤلف

لقد شهد عالم تطوير التطبيقات ونشرها ثورة حقيقية في السنوات الأخيرة مع وصول الحاويات. لقد سمح هذا التقدم للفرق من جميع الأحجام بنسيان "القضايا البيئية" الكلاسيكية وتحقيق قدر أكبر من المرونة وقابلية التوسع والتحكم في البنية التحتية الخاصة بها. في هذا السياق، تبرز أداتان بشكل خاص: Docker، ولإدارة حاويات متعددة بشكل منسق، دوكر يؤلف. اليوم سوف نتعمق في إدارة الحاويات مع هذه الأداة، لا يشمل فقط الأساسيات ولكن أيضًا النصائح التفصيلية وحالات الحياة الواقعية وأفضل الممارسات لإتقان هذه التكنولوجيا بشكل كامل.

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

ما هو Docker Compose ولماذا هو مهم جدًا؟

قبل أن نتعمق في الأوامر والتكوينات، من المفيد أن نوضح الدور الذي يلعبه Docker Compose في نظام الحاويات. Docker Compose هو أداة تسمح لنا بتحديد وتكوين وتنظيم مجموعات الحاويات باستخدام ملف YAML بسيط (يُسمى عادةً عامل ميناء-compose.yml). السبب وراء وجودها يكمن في الحاجة إلى إدارة التطبيقات المكونة من أكثر من خدمة واحدة - على سبيل المثال، موقع ويب، وقاعدة بيانات، ونظام تخزين مؤقت، كل منها في حاوية منفصلة ولكنها تعمل معًا.

مع التأليف، بإمكانك بدء كافة خدمات التطبيق بأمر واحد.، قم بتحديد علاقاتهم، ومتغيرات البيئة، والمجلدات الثابتة، والشبكات المشتركة، وغير ذلك الكثير. علاوة على ذلك، فهو لا يمكن الاستغناء عنه سواء في بيئات التطوير (بسبب السرعة التي ينشئ بها بيئة قابلة للتكرار) أو في خطوط أنابيب التكامل والنشر المستمر (CI/CD)، وكذلك في مرحلة ما قبل الإنتاج وحتى الإنتاج للمشاريع الصغيرة والمتوسطة الحجم.

الفوائد الرئيسية لـ Docker Compose لإدارة الحاويات

أدناه ندرج بعضًا من الفوائد الرئيسية ما يضيفه Docker Compose إلى إدارة الحاويات:

  • تصميم ونشر مبسط:يسمح لك بتحديد البنية الأساسية ككود، مما يجعل التكرار والنشر تلقائيين وقابلين للتكرار.
  • التنسيق بين الخدمات:إدارة التبعيات والشبكات الداخلية وترتيب بدء تشغيل الحاوية، مما يضمن تفاعل الخدمات بشكل صحيح منذ البداية.
  • بيئات معزولة ومتسقة:يعمل جميع أعضاء الفريق - وحتى الآلات أو البيئات المختلفة - في ظل نفس الظروف الفنية، مما يقلل من الأسطورة القائلة بأن "هذا يناسبني".
  • سهولة التوسع:يمكنك زيادة أو تقليل عدد النسخ المتماثلة لأي خدمة باستخدام تعليمة واحدة، مما يسهل اختبار التحميل أو عمليات النشر الأكثر قوة.
  • التكامل السهل في CI/CD:إنه يتناسب بشكل مثالي مع خطوط أنابيب التكامل المستمر لبناء البيئات واختبارها ونشرها تلقائيًا.
  • إدارة دورة الحياة الكاملة:إن التحكم في بدء التشغيل وإيقاف التشغيل وإعادة التشغيل وتسجيل الدخول والتحديث وحذف جميع الحاويات الموجودة في المكدس أمر سهل مثل تشغيل أوامر Compose.

القيود والتحديات عند استخدام Docker Compose

كما هو الحال مع أي تقنية، فإن Docker Compose يطرح أيضًا بعض التحديات والاعتبارات:

  • منحنى التعلم الأولي:يجب أن تكون على دراية بقواعد YAML، والأوامر الخاصة بـ Compose، ومفاهيم الشبكات، والمجلدات، والتبعيات.
  • التعقيد غير الضروري في المشاريع البسيطةبالنسبة للتطبيقات ذات الخدمة الفردية أو البسيطة للغاية، قد يكون Docker Compose مبالغًا فيه.
  • الإعدادات المتقدمة مطلوبةقد يتطلب تحديد الشبكات المخصصة أو صحة الخدمة أو استراتيجيات إعادة التشغيل بعض الخبرة للحفاظ على الصيانة بسيطة.
  • نطاق محدود في البنية التحتية الكبيرة:بالنسبة للنشر الكبير جدًا، يوصى باستخدام أدوات التنسيق مثل Kubernetes، على الرغم من أن Compose لا يزال مثاليًا للعديد من المواقف.

إعداد البيئة: تثبيت Docker وDocker Compose

قبل أن تبدأ في تعريف الخدمات، من الضروري أن يكون لديك Docker وDocker Compose مثبتين. على جهازك. في الأنظمة الحالية، يتضمن Docker Desktop لنظامي التشغيل Windows وMac بالفعل ميزة Compose جاهزة للاستخدام. في بيئات Linux، يمكنك تثبيته بسهولة باستخدام مدير الحزم (المثال التالي خاص بأنظمة تعتمد على Debian/Ubuntu):

  • بالنسبة لـ Docker:
    sudo apt install docker-ce (أوبونتو/ديبيان) أو sudo dnf install docker-ce (فيدورا/سينت أو إس)
  • بالنسبة إلى Docker Compose:
    sudo apt install docker-compose

في كثير من الحالات، يكفي إضافة المستخدم الخاص بك إلى مجموعة Docker باستخدام sudo usermod -aG docker $(whoami) لكي تتمكن من تشغيل الأوامر دون استخدام "sudo". تذكر إعادة تشغيل جلستك حتى تسري التغييرات.

ملف docker-compose.yml: البنية والمفاتيح الأساسية

قلب Docker Compose هو الملف عامل ميناء-compose.yml. إن هيكلها الأساسي بديهي للغاية، لكنه يسمح بمرونة هائلة:

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

مثال بسيط للهيكل:

الإصدار: "3.8" الخدمات: الويب: الصورة: nginx:latest المنافذ: - "8080:80" قاعدة البيانات: الصورة: postgres:13 البيئة: - POSTGRES_PASSWORD=مثال المجلدات: - pgdata:/var/lib/postgresql/data المجلدات: pgdata:

برنامج تعليمي عملي: نشر تطبيق متعدد الحاويات

لتوضيح استخدام Docker Compose، دعنا نراجع دراسات حالة النشر استنادًا إلى الأمثلة التي تمت مناقشتها:

المثال 1: الويب في Python + Redis للعد

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

  • app.py:كود ويب القارورة.
  • requirements.txt:قائمة التبعيات (على سبيل المثال، flask و redis-py).
  • Dockerfile: يشير إلى كيفية إنشاء الصورة المخصصة لخدمة الويب.
  • عامل ميناء-compose.yml:يحدد كل من خدمة الويب وRedis، والمنافذ والمجلدات والمتغيرات الخاصة بهما.

هذه عينة من الملف عامل ميناء-compose.yml لهذه الحالة:

الإصدار: '3.8' الخدمات: الويب: البناء: . المنافذ: - "8000:5000" المجلدات: - .:/code البيئة: - FLASK_DEBUG=1 يعتمد على: - redis redis: الصورة: redis:alpine

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

المثال 2: بيئة LAMP (Apache، PHP، MySQL)

بالنسبة لأولئك الذين يقومون بالتطوير باستخدام التقنيات الكلاسيكية مثل PHP وMySQL، فإن Compose يعد أيضًا أمرًا أساسيًا. قد يبدو ملف التكوين النموذجي مثل هذا:

الإصدار: "3.8" الخدمات: MySQL: الصورة: MySQL:5.7 البيئة: - MYSQL_DATABASE=midb - MYSQL_ROOT_PASSWORD=secret - MYSQL_USER=user - MYSQL_PASSWORD=key المجلدات: - ./data/mysql:/var/lib/mysql المنافذ: - "3306:3306" php: الصورة: php:7-apache المجلدات: - ./html:/var/www/html المنافذ: - "80:80" يعتمد على: - MySQL

باستخدام هذا، يمكنك تشغيل موقع الويب بالكامل في ثوانٍ، وتعديل ملفات PHP، والتأكد من أن كل شيء يعمل بنفس الطريقة تمامًا كما هو الحال في الإنتاج.

المثال 3: تطبيق Node.js مع PostgreSQL

تجمع مجموعة واسعة الاستخدام في التطوير الحديث خدمات Node.js مع قواعد بيانات PostgreSQL. يتيح لك Compose أيضًا تحديد استمرارية البيانات والمتغيرات البيئية الضرورية:

الإصدار: '3.8' الخدمات: التطبيق: الصورة: العقدة: 14-alpine الأمر: sh -c "npm install && npm run dev" المجلدات: - .:/app المنافذ: - 3000:3000 البيئة: - NODE_ENV=development depend_on: - db db: الصورة: postgres:13 البيئة: - POSTGRES_USER=user - POSTGRES_PASSWORD=key - POSTGRES_DB=app المنافذ: - 5432:5432

بمجرد تكوين كل شيء، قم بتشغيله عامل ميناء يؤلف وسيكون لديك كل من واجهة برمجة التطبيقات وقاعدة البيانات جاهزة للتفاعل.

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

لإدارة التطبيقات متعددة الحاويات بشكل يومي، يوفر Docker Compose مجموعة واضحة للغاية وقوية من الأوامر:

  • عامل ميناء يؤلف:يبني ويبدأ جميع الخدمات المحددة في YAML. مع المعلمة -d يطلقهم في الخلفية.
  • عامل ميناء يؤلف:يقوم بإيقاف وإزالة جميع الحاويات والشبكات والمجلدات المرتبطة بالمكدس، مع مراعاة البيانات المستمرة إذا تم تعريفها.
  • بناء docker-compose:إنشاء الصور المخصصة المحددة في الملف.
  • docker-compose ps:يعرض الحالة الحالية لحاويات المكدس.
  • سجلات docker-compose:يسمح لك بعرض سجلات كافة الخدمات أو خدمة محددة.
  • إيقاف/بدء/إعادة تشغيل docker-compose:إدارة دورة حياة الحاويات بطريقة مفصلة.
  • docker-compose exec:يقوم بتشغيل أمر داخل حاوية تم بدء تشغيلها بالفعل (على سبيل المثال، فتح bash أو تشغيل عمليات ترحيل قاعدة البيانات).

الجوانب المتقدمة: الشبكات، والمجلدات، والمتغيرات، وصحة الخدمة

مع نمو مشروعك، يتيح لك Compose ضبط إعداداتك بدقة:

الشبكات المخصصة

يمكنك تعريف شبكات مختلفة وعزل الخدمات الحساسة (مثل قواعد البيانات) لتعزيز الأمان. يتم تعريف الشبكات على النحو التالي:

الشبكات: الواجهة الأمامية: الواجهة الخلفية:

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

مجلدات ثابتة

إنها تضمن أنه حتى إذا قمت بإيقاف الحاويات أو حذفها، فلن يتم فقدان البيانات المهمة (على سبيل المثال، قواعد البيانات أو التكوينات). يمكنك تعريفها عالميًا أو على أساس كل خدمة.

متغيرات البيئة وملفات .env

لمزيد من المرونة والقدرة على النقل، يمكن إعلان المتغيرات في YAML نفسها أو في الملفات .env تقع في نفس الدليل. يتيح لك هذا تغيير الإعدادات الهامة (على سبيل المثال، بيانات الاعتماد) دون لمس ملف الإنشاء.

فحوصات الصحة ومراقبة التبعية

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

الخدمات: الويب: يعتمد على: قاعدة البيانات: الحالة: قاعدة بيانات صحية للخدمة: الصورة: postgres:13 فحص الصحة: ​​الاختبار: الفاصل الزمني: 10 ثوانٍ المهلة: 5 ثوانٍ إعادة المحاولة: 5

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

Docker Compose في التكامل المستمر والنشر (CI/CD)

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

  • اختبار التطبيقات الكاملة في كل طلب سحب دون الحاجة إلى تكوين البيئات يدويًا.
  • نشر البيئات المؤقتة للاختبار أو العروض التوضيحية، والتخلص منها بسهولة بعد الاستخدام.
  • أتمتة الإنتاج في المشاريع الصغيرة والمتوسطة الحجم حيث لا يكون من الممكن إعداد Kubernetes.

أدوات أخرى قابلة للتكامل والبديلة: Podman، وVisual Studio، وAzure، والمزيد

بالإضافة إلى Docker Compose، توفر بيئة الحاوية أدوات مساعدة وتكاملات أخرى ذات صلة:

  • Podman وpodman-dockerفي أنظمة مثل SLE Micro أو التوزيعات الأكثر توجهاً نحو الأمان، يقدم Podman بديلاً بدون daemon لـ Docker. الأداة بودمان-دوكر يتيح لك تشغيل نصوص Docker دون تغييرات، واستبدالها تلقائيًا.
  • فيجوال ستوديو و.NET:يمكن لمطوري .NET تنظيم خدمات الويب وواجهات برمجة التطبيقات جنبًا إلى جنب مع ذاكرة التخزين المؤقت مثل Redis من داخل Visual Studio، مما يؤدي إلى إنشاء ملفات Compose تلقائيًا وتسهيل تصحيح أخطاء الخدمات وبدء تشغيلها بشكل تسلسلي.
  • خدمات Azure AI والسحابةتسهل العديد من منصات السحابة نشر مجموعات معقدة باستخدام Compose، مما يسمح لك بإدارة خدمات الذكاء الاصطناعي المتعددة أو قواعد البيانات أو أنظمة المراقبة (مثل Prometheus وGrafana) بشكل تعاوني.

أفضل الممارسات والنصائح لتحقيق أقصى استفادة من Docker Compose

  • فرق تسد:احرص على فصل الخدمات بشكل جيد وتحديد الخدمات الضرورية فقط، لتجنب التبعيات المخفية وتسهيل تكوين مجموعات مختلفة.
  • استخدم الصور الرسمية كلما أمكن ذلك:يقلل المشاكل ويضمن الدعم ويسهل التحديثات.
  • إصدار docker-compose.yml الخاص بك:أضفه إلى نظام التحكم في الإصدارات الخاص بك (مثل Git) مع بقية المشروع لضمان إمكانية تتبع التغييرات.
  • لا تقم بتخزين البيانات الهامة في الحاوية فقط:استخدم دائمًا وحدات تخزين أو قواعد بيانات خارجية لتجنب فقدان البيانات إذا كنت بحاجة إلى إزالة الخدمات أو تحديثها.
  • تحسين ملفات Dockerfilesإذا قمت ببناء صور مخصصة، فتأكد من أنها خفيفة الوزن وموثقة جيدًا لتقليل أوقات البناء والأخطاء. يمكنك أيضًا معرفة كيفية إنشاء صور مخصصة في .
  • احذر من الموانئ:تأكد من أن المنافذ التي تعرضها للخطر ليست مشغولة على جهازك وراجع الأمان في المنافذ المعرضة للخطر.
  • احفظ المتغيرات والأسرار خارج المستودع:استخدم ملفات .env أو مديري الأسرار للبيانات الحساسة.

التشخيص والإدارة اليومية لتطبيقات الحاويات المتعددة

يجعل Compose مراقبة وتشخيص صحة التطبيق أمرًا سهلاً للغاية. بعض التوصيات للإدارة اليومية:

  • التحقق من السجلات مع سجلات docker-compose -f لمراقبة سلوك كل خدمة في الوقت الحقيقي.
  • إيقاف وإعادة تشغيل خدمات محددة إذا كنت بحاجة إلى تشغيل اختبارات أو تحرير الموارد مؤقتًا.
  • إيقاف مؤقت واستئناف المكدس بالكامل إذا كنت بحاجة إلى تنفيذ مهام الصيانة.

نشر التطبيقات المعقدة: أمثلة وتوصيات واقعية

تستخدم العديد من التطبيقات في العالم الحقيقي برنامج Compose بشكل متقدم لتنسيق خدمات متعددة. تشمل الحالات الشائعة ما يلي:

  • مجموعات الويب الحديثةعلى سبيل المثال، تطبيق React على الواجهة الأمامية، وواجهة برمجة التطبيقات في Node/Express، وقاعدة بيانات MongoDB.
  • الخدمات المصغرة:خدمات متخصصة مختلفة تتواصل مع بعضها البعض من خلال شبكات داخلية، مع الثبات في قواعد بيانات منفصلة.
  • تطبيقات الأعمال:ربط الخدمات مثل RabbitMQ (المراسلة)، وRedis (التخزين المؤقت)، وElasticsearch (محرك البحث)، وما إلى ذلك، كلها تحت نفس ملف Compose.

يعد تكييف Compose مع الاحتياجات المحددة للمشروع أمرًا أساسيًا، مع الأخذ في الاعتبار العزلة بين الخدمات، واستمرار البيانات، وإمكانية تكرار البيئة.

توصيات إضافية لبيئات الإنتاج

على الرغم من أن Compose مثالي للتطوير ومرحلة ما قبل الإنتاج، إلا أن استخدامه في الإنتاج له بعض الفروق الدقيقة:

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

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

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

صور مخصصة لـ Dockerfile-4
المادة ذات الصلة:
كيفية إنشاء صور Dockerfile مخصصة خطوة بخطوة