Docker منصّة حاويات (containers) تحزم تطبيقًا مع كل اعتمادياته في وحدة معزولة خفيفة تعمل بنفس الشكل على أي خادم — تتلاشى مشكلة «يعمل عندي ولا يعمل عندك».
نقاط أساسية
- الحاوية أخفّ من الجهاز الافتراضي: تشارك نواة النظام بدل محاكاة نظام كامل، فتقلع بثوانٍ.
- الصورة (Image) قالب ثابت، والحاوية (Container) نسخة عاملة منها؛ و
docker-composeيدير عدّة حاويات معًا. - مثالي لتشغيل خدمات على VPS بعزل ونظافة (n8n، قواعد بيانات، بروكسي عكسي).
- البيانات الدائمة تُحفظ في Volumes خارج الحاوية حتى لا تضيع عند إعادة الإنشاء.
الحاويات مقابل الأجهزة الافتراضية
الفرق الجوهري الذي يفسّر خفّة Docker هو طريقة العزل. الجهاز الافتراضي (VM) يحاكي عتادًا كاملًا ويشغّل نظام تشغيل ضيف مستقلًّا فوق نظام المضيف، فيستهلك ذاكرة ومساحة كبيرتين ويستغرق إقلاعه دقائق. أمّا الحاوية فلا تحاكي نظامًا كاملًا؛ بل تشارك نواة (kernel) نظام المضيف وتعزل فقط مساحة المستخدم (العمليات والملفّات والشبكة). النتيجة وحدات أخفّ بكثير تقلع في ثوانٍ، وتستهلك موارد أقلّ، وتسمح بتشغيل عشرات الحاويات على خادم واحد حيث كان VM واحد أو اثنان يستنزفانه. هذا لا يعني أنّ الحاويات تلغي الأجهزة الافتراضية، فهي غالبًا تعمل داخلها على خوادم السحابة، لكنّها تضيف طبقة عزل أرشق فوقها.
المفاهيم الأربعة: صورة وحاوية وحجم وCompose
لفهم Docker عمليًّا يجب التمييز بين أربعة مصطلحات. الصورة (Image) قالب ثابت للقراءة فقط يحوي التطبيق وكل اعتمادياته، يُبنى مرّة ويُعاد استخدامه. الحاوية (Container) نسخة حيّة عاملة من الصورة؛ يمكن تشغيل عدّة حاويات من الصورة ذاتها، وعند حذف الحاوية تختفي كلّ التغييرات داخلها. ولأنّ الحاوية زائلة بطبعها، يأتي الحجم (Volume) ليخزّن البيانات الدائمة (قاعدة بيانات، ملفّات رفع) خارج الحاوية فتبقى سالمة عند إعادة الإنشاء أو الترقية. أمّا docker-compose فأداة تصف عدّة حاويات وعلاقاتها وشبكاتها وأحجامها في ملفّ واحد، فتشغّل منظومة كاملة بأمر واحد بدل إدارة كلّ حاوية يدويًّا.
السجلّات والشبكة والمنافذ
تُجلب الصور عادةً من سجلّ (registry) عام مثل Docker Hub، حيث توجد صور رسمية جاهزة لقواعد البيانات وخوادم الويب وعشرات التطبيقات، فتسحبها وتشغّلها فورًا دون تثبيت يدوي. على مستوى الشبكة، تعمل كلّ حاوية في بيئتها المعزولة، ولا تكون خدماتها متاحة من الخارج إلّا حين تنشر منفذًا (port mapping) يربط منفذ الحاوية الداخلي بمنفذ على الخادم المضيف. هذا التحكّم الدقيق في المنافذ والشبكات يجعل Docker مثاليًّا لتشغيل خدمات متعدّدة على نفس الـVPS بأمان: مثلًا حاوية لـn8n، وأخرى لقاعدة بيانات، وثالثة لبروكسي عكسي يوجّه الزيارات ويتولّى شهادات TLS، كلّها معزولة لا تتداخل اعتمادياتها.
متى لا تحتاج Docker
رغم قوّته، ليس Docker الحلّ لكلّ شيء. لموقع ثابت صغير من صفحات HTML/CSS بسيطة، تضيف الحاويات تعقيدًا زائدًا بلا فائدة تُذكر؛ فالاستضافة المشتركة العادية أو رفع الملفّات مباشرة أبسط وأكفأ. كذلك على خادم محدود الموارد جدًّا قد يثقله الحمل الإضافي لتشغيل محرّك Docker لتطبيق وحيد بسيط. القاعدة العملية: استخدم Docker حين تحتاج عزلًا، أو إدارة عدّة خدمات معًا، أو قابلية إعادة إنشاء بيئة موحّدة عبر الأجهزة؛ وتجنّبه حين تكون المهمّة صغيرة أحادية لا تكسب شيئًا من هذا التعقيد.
| المفهوم | الدور |
|---|---|
| Image | قالب التطبيق |
| Container | نسخة عاملة معزولة |
| Volume | تخزين دائم للبيانات |
| Compose | تنسيق عدّة حاويات |