0.1ما فائدة Docker : الحاويات مقابل الأجهزة الافتراضية
الأساسي في 30 ثانية
- يغلّف Docker التطبيق وبيئته معا في حزمة معيارية، هي الحاوية (Conteneur) : انتهى زمن « يعمل على جهازي ».
- تتشارك الحاوية نواة المضيف ولا تعزل إلا الضروري : إقلاع في ثوانٍ، ووزن بالميغابايت — إنها ليست جهازا افتراضيا.
- نُشغِّل صورا مُنسخَنة، متطابقة في كل مكان ؛ وعلى نطاق واسع نضيف مُنسِّقا (Orchestrateur) (Swarm أو Kubernetes).
حالة مستمرة — إدير سئم من « يعمل على جهازي » في الجزائر
إدير، مهندس DevOps مبتدئ في الجزائر، يسلّم موقعا يعمل على حاسوبه المحمول لكنه يتعطل على خادم الاختبار : إصدار Node مختلف، وRedis مفقود، ومتغير منسي. طبّق شبكة القسم : المشكلة من البيئة لا من الكود ← فغلّف التطبيق وبيئته معا في صور مُنسخَنة (الموقع + ذاكرة Redis)، تُشغَّل في حاويات. الصورة نفسها على حاسوبه وخادم الاختبار والإنتاج : السلوك نفسه في كل مكان. ودوَّن الحد أيضا : لحاويتين يكفي Docker ؛ ولعشرات الخدمات الحرجة سيلزم مُنسِّق.
حالة مستقلة لهذا القسم : تعود في الدرس والمخطط والنص الجاهز وتحدي 48 ساعة للقسم 0.1.
1. المشكلة : « يعمل على جهازي »
يعتمد التطبيق على إصدار اللغة ومكتباته ونظامه وإعداده. على جهاز المطور يعمل كل شيء، وفي الإنتاج يتعطل كل شيء. يرد Docker على هذه الآفة بتضمين التطبيق وبيئته معا في حزمة معيارية : الحاوية (Conteneur). يحفظ إدير الصورة : الكود يسافر مع حقيبته، لا وحده.
2. الحاوية مقابل الجهاز الافتراضي : الفرق الحقيقي
يُحاكي الجهاز الافتراضي حاسوبا كاملا (نظام ضيف + نواة + موارد محجوزة) : ثقيل وبطيء الإقلاع. أما الحاوية فتتشارك نواة المضيف ولا تعزل إلا الضروري (العمليات والملفات والشبكة (Réseau)) : تُقلع في ثوانٍ، وتزن ميغابايتات وتتكاثر بسهولة. إنها أداة الخدمات الصغيرة، لا بديل شامل عن الخادم. يحسم إدير : النواة نفسها وحاجة خفيفة ← حاوية ؛ نواة مختلفة أو عزل قوي ← جهاز افتراضي.
3. أين يتوقف Docker
يُغلِّف Docker ويُشغِّل، ولا يُنسِّق على نطاق واسع (وهو دور Swarm أو Kubernetes)، ولا يُراقِب ولا يغني عن النسخ الاحتياطي ولا أمن النظام. لجهاز أو خادم صغير أو خط تكامل مستمر يكفي Docker ؛ ولعشرات الخدمات الحرجة ننتقل إلى مُنسِّق. يحدد إدير نطاقه : Docker للتغليف والتشغيل، والمُنسِّق لاحقا.
هل تعلم؟ المطعم الذي يسافر
المطعم نفسه في كل مكان، والطعم نفسه في كل مكان.
🔎 مثال ملموس — 🔎 مثال ملموس — موقع يعمل بالطريقة نفسها في كل مكان
يسلّم إدير موقع Node 20 مع Redis : حاويتان من صورتين مُنسخَنتين، دون تثبيت Node ولا Redis على الجهاز.
docker run -d -p 3000:3000 --name site mon-app:1.0
docker run -d --name cache redis:7
القراءة : حاويتان مُشغَّلتان من صورتين مُنسخَنتين، دون تثبيت Node ولا Redis على الجهاز.
الدرس : المحمول وخادم الاختبار والإنتاج تُشغِّل الصور نفسها تماما.
مفردات القسم
- الحاوية
- عملية معزولة + نظام ملفاتها، تُشغَّل من صورة.
مثال بسيط: يُشغِّل إدير حاوية الموقع من الصورة mon-app:1.0.
ما ليس كذلك: جهاز افتراضي كامل بنواته.
رد فعل: خفيفة وسريعة، ودور واحد لكل حاوية.
- الصورة
- النموذج الثابت والمُنسخَن الذي تولد منه الحاويات.
مثال بسيط: يُجمِّد إدير mon-app:1.0 : الاعتماديات نفسها على كل الأجهزة.
ما ليس كذلك: حاوية حية نُعدِّلها.
رد فعل: دائما وسم إصدار صريح، وأبدا latest في الإنتاج.
- محرك Docker
- المحرك الذي يبني الصور والحاويات ويخزنها ويُشغِّلها.
مثال بسيط: يتحقق إدير من أن المحرك يعمل قبل تشغيل موقعه.
ما ليس كذلك: مجرد أمر docker يُكتَب على لوحة المفاتيح.
رد فعل: محرك متوقف = لا حاوية تُقلع.
- السجل
- مستودع الصور المُنسخَنة (Docker Hub وGHCR).
مثال بسيط: يسترجع إدير redis:7 من السجل (Registre) بدلا من تثبيته.
ما ليس كذلك: القرص المحلي للجهاز.
رد فعل: سمِّ الصورة بوسمها قبل مشاركتها.
- تعيين المنفذ
- إعادة التوجيه -p 3000:3000 بين الجهاز والحاوية.
مثال بسيط: يصل إدير إلى موقعه على المنفذ 3000 بفضل التعيين 3000:3000.
ما ليس كذلك: المنفذ الداخلي وحده دون نشر.
رد فعل: لا يمكن الوصول؟ تحقق من -p أولا.
في التطبيق — عمليا — حدِّد مكان Docker في سياقك
- اسرد ثلاثة برامج تُثبِّتها بصعوبة (إصدارات وتعارضات وتوثيق)، مثل إدير مع Node وRedis.
- مع كل واحد، قل هل حاوية مُنسخَنة ستحل المشكلة.
- حدِّد حالة يبقى فيها الجهاز الافتراضي أفضل (نواة مختلفة، عزل قوي).
- صِغ في جملة واحدة ما الذي سيقدمه لك Docker.
نص جاهز — أطِّر حالة إدير قبل التثبيت (3 دقائق)
1) اكتب ثنائي إدير : التطبيق + البيئة (مثلا موقع Node 20 + Redis) اللذين يختلفان بين المحمول والخادم. 2) قسِّم إلى أدوار : حاوية موقع وحاوية ذاكرة — وأبدا كل شيء في واحدة. 3) دوِّن الصورة المُنسخَنة المستهدفة لكل دور (مثلا mon-app:1.0 وredis:7) : الصورة نفسها على كل الأجهزة. 4) علِّم الحد : حاويتان ← يكفي Docker ؛ نواة مختلفة أو عزل قوي ← جهاز افتراضي ؛ عشرات الخدمات ← مُنسِّق لاحقا.
احتفظ بهذه البطاقة : الأقسام 0.2 إلى 0.4 تحوِّلها إلى أوامر حقيقية.
قالب جاهز للنسخ — بطاقتي Docker أم جهاز افتراضي؟
# الحالة : ___ (مثلا موقع Node 20 مع Redis لإدير).
# الأدوار : [ ] موقع / [ ] قاعدة / [ ] ذاكرة ← حاوية واحدة لكل دور.
# الصور المُنسخَنة : ___:___ + ___:___ (أبدا latest في الإنتاج).
# الحسم : [ ] النواة نفسها + خفيف ← حاوية / [ ] نواة مختلفة أو عزل قوي ← جهاز افتراضي.
# الحجم : [ ] جهاز / خادم صغير / تكامل مستمر ← يكفي Docker / [ ] عشرات الخدمات ← مُنسِّق.
موقع + ذاكرة
يسلّم إدير موقعه Node 20 مع Redis : حاويتان مُنسخَنتان، وصفر تثبيت محلي لـ Node أو Redis.
نواة مختلفة
يجب على إدير اختبار نظام بنواة مختلفة : يُبقي جهازا افتراضيا، لأن الحاوية تتشارك نواة المضيف.
خادم صغير
خدمتان أو ثلاث على خادم صغير : يبقى إدير على Docker دون مُنسِّق.
خط تكامل مستمر
كل بناء يُعيد تشغيل الصور المُنسخَنة نفسها : يقضي إدير على « يعمل على جهازي » في التكامل المستمر.
✓ ممارسات جيدة
- فكِّر صورة مُنسخَنة : أبدا « latest » في الإنتاج.
- استهدف حاوية واحدة = دور واحد (ويب، قاعدة، ذاكرة).
- اعرف الحد : التنسيق هو الخطوة التالية.
✗ أخطاء شائعة
- الاعتقاد أن Docker جهاز افتراضي خفيف (النواة مُتشارَكة).
- وضع القاعدة + التطبيق + الذاكرة في الحاوية نفسها.
- انتظار المراقبة والنسخ الاحتياطي من Docker.
النقاط الأساسية
- يغلّف Docker التطبيق وبيئته معا.
- تتشارك الحاوية النواة : خفيفة وسريعة.
- نُشغِّل صورا مُنسخَنة، متطابقة في كل مكان.
- على نطاق واسع، نضيف مُنسِّقا.
تحدي 48 ساعة — طبِّق غدا
املأ بطاقة Docker أم جهاز افتراضي من القالب على حالة حقيقية واحدة (حالة إدير أو حالتك) : الأدوار والصور المُنسخَنة وحسم حاوية/جهاز افتراضي — وفي جملة واحدة قل ما الذي سيقدمه لك Docker.
- أستطيع شرح ما يقدمه Docker في جملة واحدة (التطبيق + البيئة، والصورة نفسها في كل مكان).
- أعرف الحسم بين الحاوية (خفيفة، النواة نفسها) والجهاز الافتراضي (نواة مختلفة، عزل قوي).
- أعرف الحد : التنسيق والمراقبة والنسخ الاحتياطي خارج Docker.
أسئلة شائعة
هل يغني Docker عن الجهاز الافتراضي؟
لا : الجهاز الافتراضي يعزل نظاما كاملا بنواته، والحاوية تتشارك نواة المضيف. للأنوية المختلفة (Windows مقابل Linux) أو العزل القوي، يبقى الجهاز الافتراضي مناسبا. يحتفظ إدير بالمنعكس : النواة نفسها وحاجة خفيفة ← حاوية ؛ وإلا ← جهاز افتراضي.
هل يلزم أن أكون مدير نظام لأجل Docker؟
لا : الأساسيات (run وps وlogs والمجلدات وCompose) تُتعلَّم في ساعات. والإدارة الدقيقة (الشبكات والسجلات والأمن) تأتي بعدها، مستوى بمستوى — وهو بالضبط تقدم هذا الدليل.
ما الذي يصنع القوة الحقيقية لـ Docker مقارنة بتثبيت كلاسيكي؟