أول حاوية (Container) لك: تشغيل سيرفر ويب Nginx بكلمة واحدة

دقائق القراءة: 5

إذا كنت تبدأ رحلتك مع ما هو DevOps؟ ولماذا تدفع الشركات ثروات لمهندسي الأتمتة السحابية؟ فهناك تجربة واحدة تختصر المفهوم كله عملياً: تشغيل سيرفر ويب كامل في ثوانٍ دون تثبيت يدوي، ودون العبث بحزم النظام، ودون الوقوع في فخ “يعمل عندي فقط”. هنا تظهر قيمة Container كبيئة معزولة، سريعة، وقابلة للتكرار بدقة.

في هذا المقال سنشغّل Nginx بكلمة واحدة تقريباً عبر Docker، ثم نفسّر ما الذي يحدث فعلياً على مستوى الشبكات، المنافذ، نظام الملفات، ودورة حياة الحاوية. الهدف ليس تنفيذ أمر قصير فقط، بل فهم لماذا تُعد هذه الخطوة حجر الأساس في الأتمتة الحديثة وبيئات CI/CD.

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

الفكرة أن أداة Docker تستطيع سحب صورة جاهزة تحتوي على Nginx مع اعتمادياته وتشغيلها كعملية معزولة فوق نواة النظام. بدلاً من تثبيت السيرفر يدوياً وفتح منافذ وإعداد ملفات تشغيل خدمة، أنت تستهلك “حزمة تشغيل” موحدة اسمها Image.

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

المتطلبات قبل تنفيذ الأمر

قبل تشغيل أول حاوية، يجب أن تكون أداة Docker Engine مثبتة وتعمل بشكل سليم. إذا لم تُجهّز بيئتك بعد، ارجع إلى تثبيت Docker وإعداد بيئة العمل على Linux و Windows ثم عد لتطبيق الخطوات التالية.

ستحتاج عملياً إلى:

  • نظام Linux أو Windows أو macOS.
  • حساب مستخدم يملك صلاحية تشغيل Docker.
  • اتصال إنترنت لسحب صورة nginx من السجل.

الأمر السحري: تشغيل Nginx فوراً

هذا هو الأمر الأشهر لبدء أول حاوية ويب:

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

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

شرح الوسائط بدقة

  • docker run: إنشاء وتشغيل حاوية جديدة من صورة محددة.
  • -d: تشغيل الحاوية في الخلفية بوضع detached.
  • -p 8080:80: ربط منفذ المضيف 8080 بمنفذ الحاوية 80.
  • --name my-nginx: تعيين اسم ثابت للحاوية لتسهيل إدارتها.
  • nginx: اسم الصورة المستخدمة للتشغيل.

كيف تتحقق أن السيرفر يعمل فعلاً؟

بعد التشغيل، افتح المتصفح على العنوان http://localhost:8080. إذا ظهرت صفحة الترحيب الافتراضية، فهذا يعني أن سلسلة العمل كاملة نجحت: سحب الصورة، إنشاء الحاوية، تشغيل الخدمة، وربط المنفذ.

ولفحص الحالة من الطرفية استخدم الأوامر التالية:

docker ps
docker logs my-nginx
docker inspect my-nginx

الأمر docker ps يعرض الحاويات العاملة، بينما docker logs يكشف مخرجات stdout وstderr. أما docker inspect فهو مهم جداً لفهم تفاصيل الشبكة، المسارات، وبيانات التشغيل الوصفية.

ما الذي يحدث داخل الحاوية من منظور معماري؟

الحاوية ليست آلة افتراضية كاملة، بل عملية معزولة تستخدم آليات النواة مثل namespaces وcgroups. هذا يمنحها عزل الشبكة والعمليات واستهلاك الموارد، لكن دون تكلفة الإقلاع الكاملة الخاصة بالـ VM.

صورة Nginx تتكون من طبقات للقراءة فقط. عند التشغيل تُنشأ طبقة قابلة للكتابة فوقها. هذا يعني أن أي تعديل داخل الحاوية مؤقت بطبيعته ما لم تربطه بمجلد خارجي أو Volume.

تخصيص الصفحة المعروضة من Nginx

لتجعل التجربة أكثر واقعية، أنشئ ملف index.html محلياً ثم اربطه داخل الحاوية:

mkdir site
echo '<h1>Hello from Docker Nginx</h1>' > site/index.html

docker run -d \
  -p 8080:80 \
  --name my-nginx-site \
  -v $(pwd)/site:/usr/share/nginx/html:ro \
  nginx

الخيار -v يربط مجلداً من المضيف بمسار داخل الحاوية. اللاحقة :ro تجعل الربط للقراءة فقط، وهي ممارسة ممتازة عندما لا يحتاج السيرفر إلى تعديل الملفات المعروضة.

لا تستخدم الحاويات في الإنتاج بعقلية “شغّلها وانسَها”. اربط المنافذ الضرورية فقط، واستخدم صوراً رسمية أو موثوقة، وثبّت النسخة بعلامة واضحة بدلاً من الاعتماد الأعمى على latest لتفادي تغييرات مفاجئة أو انقطاعات غير متوقعة.

لماذا هذه الخطوة مهمة في CI/CD؟

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

في بيئات أكبر، لا يتم تشغيل حاوية واحدة فقط، بل تتحول الفكرة إلى وحدات قابلة للتوسعة على منصات مثل Kubernetes. هناك تصبح الحاوية نفسها اللبنة الأساسية التي تُغلف التطبيق وتُدار عبر سياسات تحديث، صحة، وتوزيع حمل.

أوامر الإدارة الأساسية بعد التشغيل

من المهم أن تعرف دورة الحياة اليومية للحاوية، وليس فقط أمر التشغيل الأول:

docker stop my-nginx
docker start my-nginx
docker restart my-nginx
docker rm -f my-nginx
  • stop: إيقاف منظم للعملية داخل الحاوية.
  • start: إعادة تشغيل حاوية موجودة مسبقاً.
  • restart: دمج الإيقاف والتشغيل في خطوة واحدة.
  • rm -f: حذف الحاوية قسرياً بعد إيقافها.

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

الخلاصة

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

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

2 comments

اترك تعليقاً

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