1.1 · الصور : الوسوم والطبقات وDocker Hub

المستوى 1 · الحاويات : الصور، المجلدات، الشبكات

1.1الصور : الوسوم والطبقات وDocker Hub

الهدف: اختيار الصورة الصحيحة بالوسم الصحيح وفهم طبقاتها.
الوقت المقدّر: 12 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • الوسم هو الإصدار : postgres:16 يجمّد الرئيسي، وpostgres:16.4 يجمّد الفرعي، وpostgres:latest يتبع الأحدث (أي يتغير دون إنذار) — وفي الإنتاج نجمّد دائما وسما دقيقا وندوّنه.
  • طبقات مكدّسة ومشتركة : الصورة = تكديس طبقات للقراءة فقط، مخزّنة مؤقتا ومشتركة بين الصور — فعشر صور على القاعدة نفسها لا تنزّل القاعدة إلا مرة واحدة.
  • الاختيار دون خطأ : الصور الرسمية (ناشر موثّق)، وقراءة الوسوم المدعومة في التوثيق، والتحقق من تاريخ التحديث والمعمارية (amd64/arm64) على سجل (Registre) Docker Hub — فصورة مهجورة منذ سنتين خطر أمني.

حالة مستمرة — إدير، مهندس DevOps مبتدئ في الجزائر

إدير، مهندس DevOps مبتدئ في الجزائر، عليه تحويل قاعدة بيانات تطبيق داخلي صغير إلى حاويات. وبدلا من كتابة « postgres » وأخذ أول اقتراح، فتح الصفحة الرسمية على Docker Hub، وقارن الوسوم واحتفظ بـ postgres:16.4 : إصدار مجمّد، وحديث، ومتاح في amd64 وarm64. ودوّن هذا الاختيار في ملف versions.txt مشترك مع فريقه. وبعد ستة أشهر، عندما أعاد زميل تشغيل البيئة على جهاز آخر، حصل على السلوك نفسه تماما — لأن الوسم لم يتحرك.

الحالة نفسها تعود في الدرس والمخطط والنص الجاهز وتحدي 48 ساعة — وتستمر في 1.2 و1.3 و1.4 و1.5.

1. الوسم هو الإصدار

بعد « : »، يحدد الوسم نسخة الصورة : postgres:16 يجمّد الإصدار الرئيسي، وpostgres:16.4 يجمّد الفرعي، وpostgres:latest يتبع آخر المتاح — أي يتغير دون إنذار. وفي التطوير يُقبل تتبع latest ؛ وفي الإنتاج نجمّد دائما وسما دقيقا وندوّنه (إدير يكتبه في versions.txt).

والقاعدة في جملة : جمّد في الإنتاج، وتتبّع في المراقبة. فالنشر القابل لإعادة الإنتاج يبدأ بوسم لا يتحرك.

2. طبقات مكدّسة ومشتركة

الصورة تكديس طبقات للقراءة فقط : كل تعليمة بناء تضيف طبقة، وكل طبقة تُخزّن مؤقتا وتُشترك بين الصور. وتنزيل عشر صور مبنية على Debian نفسها لا ينزّل القاعدة إلا مرة واحدة : وهذا ما يجعل Docker اقتصاديا في التنزيلات والقرص.

والنتيجة العملية : يعرض docker images الحجم بعد فك الضغط، لكن التنزيل لا يأخذ إلا الطبقات الناقصة. ومن هنا فائدة القواعد المشتركة — ونسخ slim عندما توجد.

3. الاختيار على Docker Hub دون خطأ

فضّلوا الصور الرسمية (شارة، ناشر موثّق)، واقرؤوا الوسوم المدعومة والتوثيق، وتحققوا من تاريخ التحديث والمعمارية (amd64 للحواسيب والخوادم، وarm64 لحواسيب Mac M وRaspberry). فصورة غامضة لم تُحدّث منذ سنتين خطر أمني، حتى لو وفّرت 50 Mo.

يطبّق إدير الشبكة على كل صورة جديدة : رسمية، وحديثة، وموثّقة — وهي وحدها المقبولة. وما عداها لا يصعد أبدا إلى الإنتاج.

خطأ شائع في الفهم: « latest = الأفضل، وكل الصور سواء ما دام الاسم متطابقا ». لا. فـ latest وسم متحرك قد يغيّر الإصدار الرئيسي في أسوأ لحظة (انحراف صامت)، وصورة باسم مقارب مهجورة منذ سنتين تحمل ثغرات معروفة. نجمّد وسما دقيقا لصورة رسمية وموثّقة وحديثة.
اختيار صورة موثوقة الاسم، والوسم المجمّد، والمصدر الرسمي : الصورة الموثوقة الاسم الرسمي ناشرموثّقوسم مجمّد 16.4، وليسlatest في الإنتاجمصدر حديث التاريخ +المعمارية متحقق منهما
الاسم، والوسم المجمّد، والمصدر الرسمي : الصورة الموثوقة
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) التسمية : ينطلق إدير من الحاجة (قاعدة Postgres) ويحتفظ بالصورة الرسمية، لا بنسخة باسم مقارب. 2) التجميد : يختار الوسم 16.4 بدلا من latest ويدوّنه في versions.txt. 3) التحقق : تاريخ التحديث والمعمارية (amd64/arm64) متحقق منهما على Docker Hub قبل أول pull. الدرس : اسم رسمي، ووسم مجمّد، ومصدر حديث — والوسم نفسه يعيد السلوك نفسه بعد ستة أشهر.

🔎 مثال ملموس — 🔎 مثال ملموس — حسن اختيار Postgres

اختيار إدير لقاعدة تطبيق، دون latest في الإنتاج.

docker pull postgres:16.4
docker images
# يُتجنّب في الإنتاج :
# docker run postgres:latest

القراءة : نجمّد 16.4، ونتحقق من وجودها محليا، ونحظر latest في الإنتاج.

الدرس : بعد ستة أشهر، الوسم نفسه يعيد السلوك نفسه.

مفردات القسم

الوسم
لافتة الإصدار بعد « : » (16 و16.4 وlatest) ؛ تحدد أي نسخة من الصورة نسترجع.

مثال بسيط: يجمّد إدير postgres:16.4 لقاعدة الإنتاج.

ما ليس كذلك: تعليق زخرفي بسيط.

رد فعل: الإنتاج = وسم مجمّد ومدوّن، وليس latest أبدا.

الطبقة (Layer)
شريحة للقراءة فقط من الصورة، مخزّنة مؤقتا ومشتركة بين الصور.

مثال بسيط: قاعدة Debian تُنزّل مرة واحدة لعشر صور.

ما ليس كذلك: نسخة كاملة مكررة لكل صورة.

رد فعل: قواعد مشتركة = تنزيلات موفّرة.

الصورة الرسمية
صورة مُصانة وموثّقة على Docker Hub (شارة، ناشر معروف).

مثال بسيط: postgres الرسمية التي اختارها إدير بدلا من نسخة غامضة.

ما ليس كذلك: أول صورة فيها « postgres » في الاسم.

رد فعل: رسمية، وحديثة، وموثّقة — وإلا نمتنع.

latest
وسم متحرك يتبع آخر إصدار منشور : عملي في التطوير، وغير مستقر في الإنتاج.

مثال بسيط: يستعمله إدير للتجربة، وليس للنشر أبدا.

ما ليس كذلك: إصدار مجمّد وقابل لإعادة الإنتاج.

رد فعل: latest في التطوير، ووسم دقيق في الإنتاج.

في التطبيق — عمليا — دقّقوا صوركم

  1. اسردوا صوركم المحلية (docker images) وحدّدوا latest.
  2. لكل واحدة، جدوا الوسم المجمّد المقابل على Docker Hub.
  3. تحققوا من المعمارية وحداثة التحديث.
  4. دوّنوا اختياركم (image:tag) في ملف versions.txt.
كل صورة تستعملونها لها وسم مجمّد ومبرر ومدوّن.

نص جاهز — برّر صورتك (30 ثانية)

« لقاعدة البيانات، آخذ الصورة الرسمية postgres، بالوسم المجمّد 16.4 — وليس latest، لأبقى قابلا لإعادة الإنتاج. تحققت من تاريخ التحديث والمعمارية على Docker Hub، وأدوّن الاختيار في versions.txt للفريق. »

يُقال مع عرض صفحة Docker Hub وملف versions.txt.

قالب جاهز للنسخ — versions.txt

# versions.txt — إدير، الجزائر
# سطر لكل صورة : name:tag مجمّد + تاريخ الاختيار
postgres:16.4   # قاعدة التطبيق الداخلي (اختيار 2026-10)
nginx:1.27       # الواجهة الأمامية (اختيار 2026-10)
# القاعدة : latest ممنوعة في الإنتاج. كل تغيير = سطر جديد مؤرخ.

قاعدة بيانات إدير

كما أعلاه : postgres:16.4 الرسمية، مجمّدة ومدوّنة — فقاعدة التطبيق الداخلي تعمل بتماثل على كل جهاز.

واجهة أمامية خفيفة

nginx:1.27 الرسمية، بنسخة slim إن غطّت الحاجة : الشبكة نفسها (رسمية، وحديثة، ومعمارية متحقق منها) قبل أول pull.

حاسوب محمول arm64

زميل إدير على Mac M : يتحقق من وجود الوسم المحتفظ به في arm64 على Docker Hub قبل وعد إعادة الإنتاج.

صورة أداة ظرفية

ubuntu:24.04 في -it --rm للتجريب (المستوى 1.2) : حتى في المرمية، نجمّد الوسم بدلا من latest لنجد الأداة نفسها غدا.

✓ ممارسات جيدة

  • جمّد في الإنتاج، وتتبّع في المراقبة.
  • فضّل نسخ slim عندما توجد.
  • اقرأ صفحة Docker Hub قبل أول pull.

✗ أخطاء شائعة

  • نشر latest في الإنتاج (انحراف صامت).
  • أخذ صورة مهجورة لتوفير 50 Mo.
  • تجاهل المعمارية (صورة amd64 بطيئة على Mac M).

النقاط الأساسية

  • الوسم يجمّد الإصدار ؛ وlatest يتحرك.
  • الطبقات مشتركة ومخزّنة مؤقتا.
  • الرسمية والحديثة والموثّقة : وحدها المقبولة.
  • ندوّن إصداراتنا كالشيفرة.

تحدي 48 ساعة — طبّق غدا

اسردوا صوركم مع docker images، وتعقّبوا latest، وجدوا وسمها المجمّد على Docker Hub (رسمية، وحديثة، ومعمارية صحيحة) واكتبوا versions.txt الخاص بكم.

قائمة الخروج من القسم
  • أختار صورا رسمية وحديثة وموثّقة.
  • أجمّد وسما دقيقا في الإنتاج (وليس latest أبدا).
  • أدوّن كل اختيار image:tag في versions.txt.
تقييم ذاتي 1-5 : هل لكل صورة أستعملها وسم مجمّد ومبرر؟هل تحققت من المصدر والحداثة والمعمارية قبل pull؟

أسئلة شائعة

Alpine أم slim، ماذا نختار؟

كلتاهما تخفّف : slim تزيل الزائد من الصورة الرسمية، وalpine تغيّر libc (musl). وAlpine ضئيلة جدا لكنها قد تفاجئ (DNS والأداء) : اختبروا قبل الإنتاج. وفي الحالتين، نجمّد الوسم ونتحقق من الحداثة.

كم تزن الصورة حقا؟

يعطي docker images الحجم بعد فك الضغط ؛ والتنزيل لا يأخذ إلا الطبقات الناقصة. ومن هنا فائدة القواعد المشتركة : فتكديس عشر صور على Debian نفسها لا يكلّف القاعدة إلا مرة واحدة.

تحقّق من فهمك

أي ممارسة لقاعدة بيانات في الإنتاج؟

موارد إضافية (اختياري، للتعمّق أكثر)

اختبار المستوى 1أسئلة جديدة وأصعب للتحقق من مكتسباتك