تشغيل Nginx في حاوية Docker على نظام Ubuntu: دليل شامل ومفصل
يُعتبر Nginx من أشهر وأقوى خوادم الويب المتاحة اليوم، حيث يُستخدم بشكل واسع لاستضافة المواقع، العكس العكسي، وتحميل المحتوى بشكل سريع وفعال. من جهة أخرى، تُعد تقنية Docker واحدة من أكثر الأدوات ثورية في عالم تطوير البرمجيات، حيث تتيح حزم التطبيقات مع كل متطلباتها في حاويات مستقلة قابلة للنقل والتشغيل على أي بيئة. دمج Nginx مع Docker يفتح آفاقاً واسعة للاعتمادية، السرعة، والمرونة في إدارة خوادم الويب.
في هذا المقال، سنتناول شرحاً مفصلاً وعميقاً حول كيفية تشغيل Nginx داخل حاوية Docker على نظام Ubuntu، بدءًا من تثبيت Docker، مروراً بإنشاء وتشغيل حاوية Nginx، وصولاً إلى التعامل مع الإعدادات المتقدمة وضبط الأداء والأمان.
1. مقدمة عن Docker وNginx
Docker
Docker هو منصة مفتوحة المصدر تتيح تطوير التطبيقات، نشرها، وتشغيلها داخل حاويات (Containers). الحاوية عبارة عن بيئة تشغيل معزولة تحتوي على التطبيق وجميع المكتبات والأدوات التي يحتاجها ليعمل بشكل صحيح، مما يضمن التوافقية بين بيئات التطوير والإنتاج.
Nginx
Nginx هو خادم ويب عالي الأداء يُستخدم لتقديم صفحات الويب، التعامل مع طلبات HTTP وHTTPS، التوزيع العكسي للحمل (Reverse Proxy)، التوازن بين الخوادم (Load Balancing)، وغيرها من الوظائف المتعلقة بشبكات الإنترنت.
2. متطلبات أساسية قبل البدء
-
نظام تشغيل Ubuntu (يفضل إصدار 20.04 أو أحدث)
-
صلاحيات المستخدم الجذر (root) أو مستخدم لديه صلاحيات sudo
-
اتصال بالإنترنت لتحميل Docker وصور Nginx من الإنترنت
3. تثبيت Docker على Ubuntu
3.1 تحديث النظام
في البداية، يجب تحديث قائمة الحزم لضمان تثبيت أحدث الإصدارات:
bashsudo apt update sudo apt upgrade -y
3.2 تثبيت الحزم الضرورية
لتثبيت Docker، نحتاج إلى بعض الحزم الأساسية مثل apt-transport-https و ca-certificates و curl و software-properties-common:
bashsudo apt install apt-transport-https ca-certificates curl software-properties-common -y
3.3 إضافة مفتاح Docker الرسمي ومستودع الحزم
bashcurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3.4 تثبيت Docker Engine
بعد تحديث قائمة الحزم من المستودع الجديد:
bashsudo apt update sudo apt install docker-ce docker-ce-cli containerd.io -y
3.5 التحقق من تثبيت Docker
لتأكد من نجاح التثبيت، نفذ الأمر:
bashsudo docker --version
يجب أن يظهر إصدار Docker المثبت.
3.6 إضافة المستخدم إلى مجموعة Docker (اختياري)
لتجنب استخدام sudo مع كل أمر Docker:
bashsudo usermod -aG docker $USER
بعد ذلك، يجب تسجيل الخروج وتسجيل الدخول مجدداً لتفعيل التغيير.
4. تشغيل Nginx داخل حاوية Docker
4.1 سحب صورة Nginx الرسمية من Docker Hub
Docker Hub هو مستودع صور Docker الرسمية، وتشغيل Nginx من خلال صورة رسمية يضمن حصولنا على نسخة نظيفة ومحدثة من الخادم.
bashdocker pull nginx:latest
4.2 تشغيل الحاوية مع تعيين منفذ
لتشغيل Nginx داخل حاوية مع توجيه منفذ 80 من الحاوية إلى منفذ 80 على النظام المضيف:
bashdocker run --name my-nginx -p 80:80 -d nginx
-
--name my-nginxيحدد اسم الحاوية. -
-p 80:80يربط منفذ 80 في الحاوية مع منفذ 80 على المضيف. -
-dلتشغيل الحاوية في الخلفية (detached mode).
4.3 التحقق من عمل الحاوية
لفحص حالة الحاوية:
bashdocker ps
يجب أن ترى الحاوية تعمل، ويمكنك زيارة عنوان IP الخاص بالخادم أو localhost في المتصفح لرؤية صفحة Nginx الافتراضية.
5. تخصيص إعدادات Nginx داخل الحاوية
5.1 إعداد مجلد للموقع على النظام المضيف
لإدارة ملفات الموقع بسهولة، من الأفضل ربط مجلد من نظام المضيف مع الحاوية:
bashmkdir -p ~/nginx/html
ثم إضافة ملف index.html مخصص داخل هذا المجلد:
htmlhtml>
<html>
<head>
<title>موقع تجريبي على Nginx Dockertitle>
head>
<body>
<h1>مرحباً بك في موقع Nginx داخل حاوية Docker على Ubuntu!h1>
body>
html>
5.2 تشغيل الحاوية مع ربط مجلد الموقع
bashdocker run --name my-nginx -p 80:80 -v ~/nginx/html:/usr/share/nginx/html:ro -d nginx
-
-vلتوصيل مجلد المضيف بمجلد الحاوية. -
:roتعني أن المجلد مخصص للقراءة فقط داخل الحاوية (لمنع التعديل من الحاوية).
5.3 تعديل ملفات إعداد Nginx (اختياري)
لإجراء تغييرات على ملف إعداد Nginx nginx.conf:
-
إنشاء مجلد للإعدادات على المضيف:
bashmkdir ~/nginx/conf
-
نسخ ملف الإعداد الافتراضي من الحاوية إلى المضيف (يمكن استخدام الحاوية المؤقتة أو البحث عن نسخة على الإنترنت):
bashdocker run --rm nginx cat /etc/nginx/nginx.conf > ~/nginx/conf/nginx.conf
-
تعديل ملف
nginx.confحسب الحاجة. -
تشغيل الحاوية مع ربط ملف الإعداد:
bashdocker run --name my-nginx -p 80:80 -v ~/nginx/html:/usr/share/nginx/html:ro -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx
6. إدارة الحاوية وتشغيل الأوامر داخلها
6.1 الدخول إلى الحاوية
للدخول إلى الحاوية واستخدام سطر الأوامر بداخلها:
bashdocker exec -it my-nginx /bin/bash
هنا يمكن تنفيذ أوامر Nginx مثل إعادة التشغيل أو اختبار الإعدادات.
6.2 إعادة تحميل إعدادات Nginx داخل الحاوية
بعد تعديل إعدادات Nginx، يمكن إعادة التحميل دون إيقاف الحاوية:
bashdocker exec my-nginx nginx -s reload
7. إعدادات متقدمة في تشغيل Nginx على Docker
7.1 استخدام ملفات Docker Compose
لتسهيل إدارة الحاوية، يمكن استخدام ملف docker-compose.yml:
yamlversion: "3"
services:
nginx:
image: nginx:latest
container_name: my-nginx
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html:ro
- ./conf/nginx.conf:/etc/nginx/nginx.conf:ro
restart: unless-stopped
تشغيل الحاوية عبر Docker Compose:
bashdocker-compose up -d
7.2 تفعيل HTTPS باستخدام Let’s Encrypt
يمكن دمج Nginx مع أدوات مثل Certbot لتفعيل HTTPS بشكل آلي. هناك صور Docker متخصصة مثل nginx-certbot توفر هذه الوظيفة، أو يمكن إعداد الحاوية بشكل مخصص.
7.3 التوازن بين الخوادم (Load Balancing)
Nginx يمكن استخدامه كـ Load Balancer، حيث تقوم بتشغيل عدة حاويات Nginx أو تطبيقات خلفية، وتوزيع الحمل بينها. في Docker، هذا يتطلب إعدادات شبكة مخصصة وربما استخدام Docker Swarm أو Kubernetes.
8. أفضل الممارسات للحفاظ على أداء وأمان Nginx في Docker
8.1 تحديث الصور بانتظام
يجب مراقبة تحديثات صورة Nginx الرسمية لتفادي الثغرات الأمنية والحصول على تحسينات الأداء.
bashdocker pull nginx:latest
docker stop my-nginx
docker rm my-nginx
docker run --name my-nginx -p 80:80 -d nginx
8.2 تقليل صلاحيات الحاوية
يُنصح بعدم تشغيل الحاوية بصلاحيات root إن أمكن، وتقييد الوصول إلى المجلدات الهامة.
8.3 مراقبة موارد الحاوية
يمكن مراقبة استهلاك الموارد مثل الذاكرة والمعالج للحاوية باستخدام:
bashdocker stats my-nginx
8.4 النسخ الاحتياطي للبيانات والإعدادات
الاحتفاظ بنسخ من ملفات الموقع والإعدادات يضمن سرعة الاسترجاع عند حدوث مشاكل.
9. جدول مقارنة بين تشغيل Nginx مباشرة على Ubuntu وتشغيله داخل Docker
| المعيار | تشغيل Nginx على Ubuntu مباشرة | تشغيل Nginx داخل Docker |
|---|---|---|
| سهولة التثبيت | بسيط مع تحديثات النظام | يحتاج إلى تثبيت Docker والتعلم الأولي |
| العزل | يعتمد على نظام التشغيل | عزل تام داخل الحاوية |
| النقلية | أقل قابلية للنقل بسهولة | قابل للنقل بين الأنظمة المختلفة بسهولة |
| تحديث الإصدارات | يتطلب تحديث النظام أو الحزم | بسيط عبر تحديث الصورة فقط |
| الإدارة | إدارة ملفات النظام مباشرة | إدارة عبر أوامر Docker أو Docker Compose |
| الموارد | استهلاك الموارد يعتمد على النظام فقط | استهلاك موارد إضافية للحاويات |
| الأمان | يعتمد على إعدادات النظام | عزل جيد لكن يحتاج إعداد أمان الحاوية |
| التخصيص | مرن جداً | مرن لكن ضمن حدود الحاوية |
10. الخلاصة
تشغيل Nginx داخل حاوية Docker على نظام Ubuntu يمثل خطوة استراتيجية في مجال إدارة خوادم الويب الحديثة، حيث يجمع بين قوة Nginx وأداء Docker في عزل البيئة وسهولة النشر. هذا الأسلوب يوفر بيئة مستقرة وموثوقة يمكن التحكم بها بشكل دقيق، مع مرونة عالية في التخصيص والنقل.
باتباع الخطوات التفصيلية السابقة، يمكن لأي مسؤول نظام أو مطور إعداد خادم Nginx فعال ضمن حاوية Docker، مما يضمن تجربة تشغيلية متقدمة، سهلة الإدارة، وقابلة للتوسع. كما أن استخدام أدوات مثل Docker Compose يزيد من قوة التحكم ويُبسط العمليات اليومية.
المصادر والمراجع
هذا المقال يوفر رؤية متعمقة وشاملة حول تشغيل Nginx على Docker في بيئة Ubuntu، بما يلبي احتياجات المشاريع الصغيرة والكبيرة على حد سواء.

