1.1الصور : الوسوم والطبقات وDocker Hub
الأساسي في 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.
يطبّق إدير الشبكة على كل صورة جديدة : رسمية، وحديثة، وموثّقة — وهي وحدها المقبولة. وما عداها لا يصعد أبدا إلى الإنتاج.
🔎 مثال ملموس — 🔎 مثال ملموس — حسن اختيار 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 في التطوير، ووسم دقيق في الإنتاج.
في التطبيق — عمليا — دقّقوا صوركم
- اسردوا صوركم المحلية (docker images) وحدّدوا latest.
- لكل واحدة، جدوا الوسم المجمّد المقابل على Docker Hub.
- تحققوا من المعمارية وحداثة التحديث.
- دوّنوا اختياركم (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.
أسئلة شائعة
Alpine أم slim، ماذا نختار؟
كلتاهما تخفّف : slim تزيل الزائد من الصورة الرسمية، وalpine تغيّر libc (musl). وAlpine ضئيلة جدا لكنها قد تفاجئ (DNS والأداء) : اختبروا قبل الإنتاج. وفي الحالتين، نجمّد الوسم ونتحقق من الحداثة.
كم تزن الصورة حقا؟
يعطي docker images الحجم بعد فك الضغط ؛ والتنزيل لا يأخذ إلا الطبقات الناقصة. ومن هنا فائدة القواعد المشتركة : فتكديس عشر صور على Debian نفسها لا يكلّف القاعدة إلا مرة واحدة.
أي ممارسة لقاعدة بيانات في الإنتاج؟