مقدمة
تقنية الحاويات اكتسبت زخمًا كبيرًا في مجال تكنولوجيا البرمجيات على مدار السنوات الأخيرة. ويمكن إرجاع ذلك إلى Docker وهي منصة حاويات تبسط إدارة العمليات داخل الحاويات.
الحاويات هي بيئات قياسية خفيفة الوزن، وافتراضية، ومحمولة، ومحددة برمجياً تسمح للبرمجيات بالعمل بمعزل عن البرمجيات الأخرى التي تعمل على الجهاز المضيف الفعلي. تتيح ميزة إمكانية النقل هذه للمطورين تقسيم تطبيقاتهم إلى خدمات معزولة. علاوة على ذلك، يمكن تقديمها بشكل مستقل مما يفسح المجال للتوسع.
في حين أن تقسيم التطبيق إلى خدمات متعددة هو أمر رائع بالتأكيد، إلا أنه يأتي مع عبء إدارة حاويات متعددة. يجب عليك التأكد من تواصلها، وبدء تشغيلها، وإيقاف تشغيلها في نفس الوقت. بفضل أداة تسمى Docker Compose، يصبح هذا مهمة سهلة. يتيح Docker Compose للمطورين تشغيل تطبيقات Docker متعددة الحاويات باستخدام قواعد محددة في ملف YAML . يحتوي ملف YAML على تعريفات لخدمات التطبيق وكيف يمكنها مشاركة وحدات تخزين البيانات والشبكات. بمجرد تحديد الخدمات، يمكنك تشغيلها جميعًا بأمر واحد. في هذا البرنامج التعليمي، سنوضح لك كيفية تثبيت وتكوين وبدء استخدام Docker Compose على Ubuntu 20.04.
المتطلبات الأساسية
-
بما أن هذا برنامج تعليمي عملي، يجب أن يكون لديك تثبيت لنظام Ubuntu 20.04 كبيئة تشغيل أولية. يجب أن يكون لديك أيضًا مستخدم غير جذري يتمتع بامتيازات sudo. إليك برنامج تعليمي خطوة بخطوة لمساعدتك في إعداد خادم Ubuntu الخاص بك. اتبع هذا البرنامج التعليمي لـ تكوين ملف sudoers الخاص بك.
-
تحتاج أيضًا إلى تثبيت Docker. يرجى الرجوع إلى هذا البرنامج التعليمي حول كيفية تثبيت وتشغيل Docker على Ubuntu 18.04.
الخطوة 1: تثبيت Docker Compose
سنقوم بتنزيل أحدث إصدار مستقر من Docker Compose من مستودع GitHub الرسمي. يمكنك معرفة أحدث إصدار من صفحة الإصدارات، في وقت كتابة هذا البرنامج التعليمي، أحدث إصدار هو 1.28.5.
أولاً، قم بتسجيل الدخول إلى خادم Ubuntu الخاص بك باستخدام مستخدم sudo غير الجذري وأدخل الأمر التالي. يقوم بتنزيل أحدث إصدار (1.28.5) ويحفظ الملف القابل للتنفيذ في دليل /usr/local/bin/docker-compose . هذا يجعله متاحًا بشكل عام كـ docker-compose:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
بمجرد تنزيله، أدخل الأمر التالي لتعيين الأذونات المناسبة ليكون أمر docker-compose قابلاً للتنفيذ:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
الآن، تحقق من نجاح التثبيت وإمكانية استدعاء الأمر عن طريق تشغيل الأمر التالي:
|
1 |
docker-compose –version |
يجب أن تحصل على مخرجات مثل هذه:

يؤكد هذا أنه تم تثبيت Docker Compose بنجاح على نظامك.
الخطوة 2: إنشاء ملف docker-compose.yml
لمساعدتك في فهم كيفية العمل مع docker-compose.yml, سنقوم بتكوين بيئة خادم ويب باستخدام صورة Nginx من Docker Hub. بمجرد النشر، يجب أن نكون قادرين على تقديم صفحة HTML أساسية من الحاوية.
سنقوم بإنشاء دليل العمل الخاص بنا في المجلد الرئيسي الذي سنعمل منه. أدخل الأمر التالي لإنشاء الدليل:
|
1 |
mkdir ~/compose-example |
بعد ذلك، انتقل إلى الدليل:
|
1 |
cd ~/compose-example |
بمجرد دخولك إلى الدليل، قم بإنشاء مجلد تطبيق سيكون الجذر للمستندات لبيئة Nginx . يمكننا تسمية هذا المجلد app:
|
1 |
mkdir app |
- إنشاء صفحة HTML
دعنا نستخدم محرر النصوص nano لإنشاء ملف index.html داخل مجلد app:
|
1 |
nano app/index.html |
بعد ذلك، أضف كود HTML التالي إلى الملف:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="generator" content="Hugo 0.80.0"> <title>مثال Docker Compose</title> <!-- ملف CSS الأساسي لـ Bootstrap --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"> </head> <body> <main> <section class="py-5 text-center container"> <div class="row py-lg-5"> <div class="col-lg-6 col-md-8 mx-auto"> <h1 class="fw-light">مثال رائع لـ Docker Compose مع CloudSigma</h1> <p class="h4"> هذه صفحة HTML ثابتة أساسية. </p> <p class="lead text-muted"> يتم تقديم هذه الصفحة من حاوية Nginx Docker تم إنشاؤها باستخدام <b>docker-compose </b> </p> </div> </div> </section> </main> </body> </html> |
لحفظ الملف، اضغط على CTRL +O، ثم ENTER. بعد ذلك، أغلق باستخدام CTRL +X. بعد ذلك، سنقوم بإنشاء ملف docker-compose.yml داخل المجلد الرئيسي لمشروعنا.
- استضافة صفحة HTML باستخدام docker-compose
بعد ذلك، أدخل الأمر التالي لفتح الملف باستخدام محرر nano :
|
1 |
nano docker-compose.yml |
بعد ذلك، أضف مقتطف الكود التالي داخل الملف:
|
1 2 3 4 5 6 7 8 |
version: '3.7' services: webserver: image: nginx:alpine ports: - "8000:80" volumes: - ./app:/usr/share/nginx/html |
ملف docker-compose.yml يبدأ الملف برقم الإصدار الذي يخبر Docker Compose بإصدار التكوين الذي نستخدمه. يرجى اتباع هذا الرابط لمعرفة المزيد حول إصدارات Docker Compose.
بعد رقم الإصدار، لدينا كتلة الخدمات (services) التي تحتوي على الخدمات التي تشكل البيئة. في هذا البرنامج التعليمي، قمنا بتحديد خدمة واحدة فقط تسمى webserver. إن خدمة webserver ستستخدم صورة nginx:alpine. لقد قمنا أيضًا بتحديد إعادة توجيه المنفذ 8000:80. ما يعنيه هذا هو أن جميع الطلبات من المنفذ 8000 على الجهاز المضيف سيتم إعادة توجيهها إلى حاوية webserver على المنفذ 80، حيث يتم تشغيل Nginx.
يتيح لك توجيه volumes إنشاء حجم مشترك بين الجهاز المضيف والحاوية والذي يمكننا استخدامه لحفظ البيانات بشكل دائم. في مقتطف الكود الخاص بنا لـ yml، نقوم بمشاركة مجلد app المحلي مع الحاوية. داخل الحاوية، سيتم وضعه في المسار /usr/share/nginx/html. وبالتالي، فإنه يكتب فوق جذر المستند الافتراضي لـ Nginx. يمكنك حفظ الملف وإغلاقه الآن.
حتى هذه النقطة، قمت بإنشاء صفحة ويب HTML تجريبية وملف docker-compose.yml مع تعليمات لبناء بيئة خادم ويب داخل حاوية. دعنا نرى كيف يمكننا تشغيل هذا الإعداد في الخطوة التالية.
الخطوة 3: تنفيذ أمر Docker Compose
في هذه الخطوة، سنقوم بتشغيل الأمر لإطلاق بيئتنا المعبأة في حاويات. أدناه هو الأمر الوحيد الذي سيبدأ عملية تنزيل صور Docker، وإنشاء حاوية لخدمة webserver وإطلاق البيئة المعبأة في حاويات في الخلفية:
|
1 |
docker-compose up -d |
تم تصميم Docker ليكون سريعًا وفعالًا، لذا، عند تشغيل الأمر أعلاه، فإنه يتحقق أولاً من نظامك المحلي بحثًا عن الصورة المحددة. إذا كانت مفقودة، فسيقوم بجلبها من مستودع Docker Hub. يجب أن يظهر مخرج مشابه لهذا:

عندما ينتهي تنفيذ الأمر، سيبدأ تشغيل بيئة الحاوية في الخلفية. يمكنك التحقق من أنها تعمل باستخدام الأمر:
|
1 |
docker-compose ps |
يجب أن تحصل على مخرج مشابه:

إذا انتقلت إلى عنوان IP الخاص بخادمك أو اسم النطاق وأضفت المنفذ 8000، أي server_domain_or_IP:8000 يجب أن تكون قادرًا على رؤية صفحة HTML التجريبية التي أنشأناها:

إذا كنت تتذكر، فقد قمنا بإعداد حجم مشترك بين الحاوية والنظام المضيف. هذا يحافظ على مزامنة الملفات في الحاوية مع الملفات الموجودة على النظام المضيف. وبالتالي، إذا قمت بإجراء تغيير على ملف index.html، فإنه يتزامن مع الحاوية تلقائيًا وينعكس عند إعادة تحميل الصفحة في المتصفح. يمكنك المحاولة باستخدام محرر nano. دعنا نتعلم بعض الأوامر الإضافية في الخطوة التالية.
الخطوة 4: أوامر Docker Compose الإضافية لإدارة بيئات الحاويات
الآن بعد أن قمت بنشر صفحة ويب بنجاح باستخدام أمر docker-compose-up الفردي، دعنا نرى بعض الأوامر الإضافية التي يمكن أن تكون مفيدة في إدارة البيئات المعبأة في حاويات.
سنبدأ بأمر السجلات (logs). يمكن أن تكون السجلات حاسمة عندما تقوم باستكشاف أخطاء تطبيقك وإصلاحها. أولاً، قم بتشغيل الأمر التالي لعرض السجلات التي تنتجها حاوية Nginx:
|
1 |
docker-compose logs |
إليك عينة من مخرجات السجلات:

يمكنك إيقاف تنفيذ البيئة مؤقتًا دون تغيير حالة الحاويات باستخدام الأمر:
|
1 |
docker-compose pause |
![]()
بعد ذلك، لإلغاء الإيقاف المؤقت أو استئناف التنفيذ، استخدم الأمر:
|
1 |
docker-compose unpause |
![]()
قد ترغب في إيقاف الحاويات دون تدمير بياناتها. للقيام بذلك، استخدم الأمر التالي:
|
1 |
docker-compose stop |
![]()
لتدمير الحاويات والشبكات والأحجام المرتبطة بالبيئة المعبأة في حاويات، استخدم الأمر:
|
1 |
docker-compose down |
![]()
ضع في اعتبارك أن الأمر أعلاه لا يزيل الصور الأساسية المستخدمة بواسطة Docker Compose لتشغيل البيئة. يضمن ذلك عمليات بناء أسرع عند تشغيل بيئتك، حيث يتحقق من الجهاز المحلي بحثًا عن صور مطابقة. إذا كنت ترغب في إزالة الصورة الأساسية تمامًا، فيجب عليك تحديد ذلك في الأمر. بالنسبة لمثالنا، يمكننا إزالة nginx:alpine صورة باستخدام الأمر:
|
1 |
docker image rm nginx:alpine |

أخيرًا، قد تجد المزيد من الأوامر في وثائق مرجع سطر أوامر Docker Compose الرسمية.
الخاتمة
في هذا الدرس التعليمي، قمت بتثبيت Docker Compose على Ubuntu 20.04، وأنشأت بيئة حاويات تعتمد على صورة خادم ويب Nginx، وتعلمت كيفية إدارة الخدمات المختلفة باستخدام أوامر Docker Compose.
إذا كنت ترغب في تعلم كيفية نشر تطبيق ديناميكي حقيقي يعتمد على عدة حاويات، فيرجى قراءة الدرس التعليمي الخاص بنا حول نشر Laravel و Nginx و MySQL باستخدام Docker Compose. يمكنك أيضًا العثور على قائمة كاملة بأوامر docker-compose في وثائق Docker Compose الرسمية.
حوسبة سعيدة!
التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.