دورة أساسيات Docker و Kubernetes

دورة منظمة للمستوى المتوسط تغطي صور Docker والحاويات والأحجام والشبكات و Compose، وعمليات Kubernetes الأساسية والخدمات والتخزين واستكشاف الأخطاء.

المستوى: Docker & Kubernetes الصعوبة: intermediate 5 دروس 90 دقيقة
تقدم الدورة 0 / 5
العودة إلى الدورات

ما ستتعلمه

  • إنشاء وتحسين صور Docker باستخدام Dockerfile
  • تشغيل وفحص الحاويات وتخزين البيانات بشكل دائم عبر الأحجام
  • ربط الحاويات بشبكات Docker و Compose
  • نشر عمليات Kubernetes الأساسية باستخدام ConfigMap و Secret
  • كشف التطبيقات واستكشاف أخطاء مجموعات Kubernetes

قبل أن تبدأ

  • خبرة أساسية في سطر أوامر Linux
  • الإلمام بـ HTTP والمنافذ ونشر التطبيقات
  • بنك أسئلة Docker و Kubernetes مفيد للتقييم الذاتي

درس 1 صور Docker و Dockerfile

صورة Docker هي قالب للقراءة فقط يحتوي على التطبيق وبيئة التشغيل والمكتبات والإعدادات. تُبنى الصور من Dockerfile باستخدام طبقات: كل تعليمة مثل FROM أو COPY أو RUN أو ENV تُنشئ طبقة، ويُخزَّن الطبقات غير المتغيرة في الذاكرة المؤقتة لتسريع إعادة البناء. الصور الأصغر والأكثر أمانًا تفضّل صورًا أساسية بسيطة، وتجمع أوامر RUN ذات الصلة، وتنسخ فقط الملفات التي يحتاجها التطبيق.

تعليمة FROM تختار الصورة الأساسية. تنقل COPY الملفات من سياق البناء إلى الصورة، بينما تنفّذ RUN الأوامر أثناء البناء. توفر CMD الأمر والوسائط الافتراضية المستخدمة عند بدء الحاوية، وتعرف ENTRYPOINT الملف القابل للتنفيذ الذي يعمل دائمًا. وعند وجودهما معًا، يستقبل نقطة الدخول وسائط سطر الأوامر كمعاملاتها. يمكن إضافة فحص الصحة أو مستخدم غير الجذر باستخدام HEALTHCHECK و USER.

استخدم docker build -t myapp:latest . لبناء صورة و docker image ls لعرض الصور. ضع علامات إصدار ذات معنى على الصور وتجنب استخدام latest فقط في الإنتاج. الهدف هو صورة حتمية وصغيرة وقابلة لإعادة الإنتاج من Dockerfile وحده.

نصيحة تدريبية صور Docker و Dockerfile: راجع هذا الدرس في جلسات قصيرة يوميًا. بعد كل تمرين، اذكر القاعدة أو الخطوة التي استخدمتها؛ إذا لم تستطع، راجع الموضوع قبل المتابعة. الاستمرارية تثبت المادة أفضل من جلسة طويلة.

مثال

تطبيق Node.js يحتاج فقط إلى ملفات الحزم لتثبيت التبعيات وإلى الكود المصدري للتشغيل. يبدأ Dockerfile بـ FROM node:20-alpine، وينسخ package.json أولًا، وينفذ npm ci، ثم ينسخ الكود المصدري، ويحوّل إلى مستخدم غير الجذر، ويعرّف CMD ["node", "server.js"]. نسخ التبعيات قبل الكود المصدري يتيح لـ Docker إعادة استخدام طبقة التبعيات حتى تتغير ملفات الحزم.

أعد قراءة السؤال قبل الانتهاء وتأكد من معنى إجابتك.

درس 2 دورة حياة الحاويات والتخزين الدائم

الحاوية هي مثيل قيد التشغيل لصورة. ينشئ Docker الحاويات ويبدأها ويوقفها ويعيد تشغيلها ويزيلها بأوامر مثل docker create و docker start و docker stop و docker rm. الاختصار الشائع docker run ينشئ حاوية ويبدأها في خطوة واحدة. استخدم docker ps لعرض الحاويات قيد التشغيل، و docker ps -a لتضمين الحاويات المتوقفة، و docker logs لفحص مخرجات التطبيق.

أنظمة ملفات الحاويات مؤقتة: عند إزالة حاوية، تختفي التغييرات المكتوبة بداخلها. تحل الأحجام والربط المباشر هذه المشكلة. الحجم المسمّى يديره Docker ويبقى بعد إزالة الحاوية؛ بينما يربط الربط المباشر دليلًا من المضيف داخل الحاوية. تُرفق علامتا -v و --mount التخزين، ويمكن للحاويات مشاركة نفس الحجم. تمنع عمليات التركيب للقراءة فقط التعديلات العرضية.

لتصحيح الأخطاء، يفتح docker exec -it container bash غلافًا داخل حاوية قيد التشغيل، ويعرض docker inspect تفاصيل الإعداد والحالة. أضف سياسات --restart فقط عندما يجب أن يتعافى التطبيق تلقائيًا، وأبقِ السجلات والبيانات خارج الحاوية عندما تكون الحاوية نفسها قابلة للاستبدال.

نصيحة تدريبية دورة حياة الحاويات والتخزين الدائم: راجع هذا الدرس في جلسات قصيرة يوميًا. بعد كل تمرين، اذكر القاعدة أو الخطوة التي استخدمتها؛ إذا لم تستطع، راجع الموضوع قبل المتابعة. الاستمرارية تثبت المادة أفضل من جلسة طويلة.

مثال

يُبدأ تشغيل حاوية قاعدة بيانات بالأمر docker run -d --name postgres -v pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=secret postgres:16. يحتفظ الحجم المسمّى pgdata بملفات قاعدة البيانات بعد docker rm postgres، لذا فإن حاوية بديلة تستخدم نفس الحجم تستعيد البيانات نفسها.

أعد قراءة السؤال قبل الانتهاء وتأكد من معنى إجابتك.

درس 3 شبكات Docker و Compose

تتيح شبكات Docker للحاويات التواصل بالاسم أو بعنوان IP. توفر شبكة bridge الافتراضية DNS تلقائيًا بين الحاويات على نفس الشبكة، بينما تشارك شبكة host مكدس الشبكة الخاص بالمضيف وتزيل العزل. يُنصح باستخدام شبكات bridge المعرّفة من قبل المستخدم لأنها تدعم تحليل DNS ويمكن ربطها أو فك ربطها دون إعادة إنشاء الحاويات. انشر منفذ حاوية إلى المضيف باستخدام -p 8080:80؛ الجانب الأيسر هو منفذ المضيف والجانب الأيمن هو منفذ الحاوية.

يعرّف Docker Compose تطبيقات متعددة الحاويات في ملف YAML. تعلن الخدمات عن الصور وسياقات البناء والمنافذ والأحجام ومتغيرات البيئة والشبكات. يؤدي تشغيل docker compose up -d إلى إنشاء الشبكة وتشغيل الخدمات معًا؛ بينما يزيل docker compose down الحاويات والشبكة الافتراضية مع الحفاظ على الأحجام المسمّاة. يدعم Compose أيضًا التبعيات وفحوصات الصحة وتوسيع نطاق نسخ الخدمة.

شخّص الاتصال باستخدام docker network ls و docker network inspect و docker exec. من الأعطال الشائعة حاوية ويب لا تستطيع الوصول إلى قاعدة بيانات لأنها على شبكات مختلفة أو لأن التطبيق يستخدم localhost بدلًا من اسم الخدمة. استخدم أسماء الخدمات في Compose ليتمكن DNS المدمج من حل الاسم إلى الحاوية الصحيحة.

نصيحة تدريبية شبكات Docker و Compose: راجع هذا الدرس في جلسات قصيرة يوميًا. بعد كل تمرين، اذكر القاعدة أو الخطوة التي استخدمتها؛ إذا لم تستطع، راجع الموضوع قبل المتابعة. الاستمرارية تثبت المادة أفضل من جلسة طويلة.

مثال

يعرّف ملف compose خدمتين: web و db. يربط خدمة الويب "8080:3000" ويتصل بقاعدة البيانات باستخدام اسم المضيف db والمنفذ 5432. يركّب خدمة قاعدة البيانات حجمًا مسمّى ويضبط فحص صحة عند بدء التشغيل. يؤدي تشغيل docker compose up -d إلى تشغيل الخدمتين على شبكة خاصة واحدة، ويصل المتصفح إلى التطبيق عبر http://localhost:8080.

أعد قراءة السؤال قبل الانتهاء وتأكد من معنى إجابتك.

درس 4 عمليات Kubernetes الأساسية

يشغّل Kubernetes التطبيقات المعبأة في حاويات على مجموعة من العقد. أصغر وحدة قابلة للنشر هي Pod، وتضم حاوية واحدة أو أكثر مع تخزين وشبكة ودورة حياة مشتركة. عادةً ما تُنشئ وحدات التحكم الـ Pod. يدير Deployment النسخ المتماثلة عديمة الحالة مع تحديثات متدرجة وتراجع؛ ويمنح StatefulSet هويات شبكة ثابتة وتوسيعًا منظمًا للتطبيقات ذات الحالة؛ ويشغّل DaemonSet Pod واحدًا بالضبط على كل عقدة محددة؛ ويشغّل Job حمل العمل حتى الاكتمال؛ ويشغّل CronJob الـ Jobs وفقًا لجدول زمني.

تُفصل الإعدادات عن الكود باستخدام ConfigMap و Secret. يحتفظ ConfigMap بالبيانات غير الحساسة مثل متغيرات البيئة أو ملفات الإعداد، بينما يخزن Secret القيم الحساسة مثل كلمات المرور ورموز API. يمكن تركيب كلاهما كأحجام أو حقنهما كمتغيرات بيئة. تُرمَّز الـ Secrets بـ base64 في الواجهة البرمجية، لكن يجب حمايتها مع ذلك عبر RBAC والتشفير عند السكون.

توفّق وحدات التحكم بين الحالة المطلوبة: تعلن العدد المطلوب من النسخ، وينشئ Kubernetes الـ Pods أو يزيلها حتى تطابق الواقع. تربط التسميات والمحددات وحدات التحكم بالـ Pods، لذا استخدم تسميات ذات معنى مثل app و tier. طبّق الملفات التعريفية باستخدام kubectl apply -f وافحص حالة حمل العمل باستخدام kubectl get pods و kubectl describe deployment و kubectl rollout status.

نصيحة تدريبية عمليات Kubernetes الأساسية: راجع هذا الدرس في جلسات قصيرة يوميًا. بعد كل تمرين، اذكر القاعدة أو الخطوة التي استخدمتها؛ إذا لم تستطع، راجع الموضوع قبل المتابعة. الاستمرارية تثبت المادة أفضل من جلسة طويلة.

مثال

يعلن ملف تعريف Deployment عن ثلاث نسخ من حاوية nginx مع تسميات app: web. يوفر ConfigMap قيمة APP_MODE، ويوفر Secret قيمة DB_PASSWORD. إذا تعطلت عقدة، ينشئ وحدة التحكم Pods بديلة على عقد سليمة، مع إبقاء العدد المطلوب عند ثلاث.

أعد قراءة السؤال قبل الانتهاء وتأكد من معنى إجابتك.

درس 5 خدمات Kubernetes والتخزين واستكشاف الأخطاء

توفر الخدمة (Service) نقطة نهاية شبكة ثابتة لمجموعة من الـ Pods. يكشف ClusterIP الخدمة داخل المجموعة، ويفتح NodePort منفذًا على كل عقدة، ويتكامل LoadBalancer مع موفر السحابة لحركة المرور الخارجية. يوجّه Ingress حركة HTTP و HTTPS إلى الخدمات باستخدام أسماء المضيفين والمسارات، عادةً عبر وحدة تحكم ingress. يجب أن تتطابق المحددات في الخدمة مع تسميات الـ Pods، ويجب أن يتطابق targetPort في الخدمة مع منفذ الحاوية.

يستخدم التخزين الدائم PersistentVolumeClaim (PVC) لطلب التخزين، و PersistentVolume (PV) لتوفيره، و StorageClass لتحديد سلوك التوفير. يمكن تركيب PVC مرتبط بـ PV داخل Pod؛ ويتحكم ReclaimPolicy في ما إذا كان الحجم يُحتفظ به أو يُحذف عند تحرير PVC. يجب أن تستخدم الأحمال ذات الحالة مثل قواعد البيانات تخزينًا ثابتًا وأن تفهم كيف ترتبط مطالبات الأحجام بالـ Pods.

يتبع استكشاف الأخطاء ترتيبًا منظمًا: kubectl get pods لرؤية الحالة، و kubectl describe pod للأحداث والشروط، و kubectl logs لمخرجات التطبيق، و kubectl exec للفحص التفاعلي. تحقق من أخطاء سحب الصور وأسباب CrashLoopBackOff ومسبارات الجاهزية ومحددات الخدمات وسياسات الشبكة. إن سير عمل مراجعة يبني الصور ويختبرها محليًا وينشر تغييرات صغيرة ويتراجع بسرعة يحوّل ممارسة Kubernetes إلى مهارة قابلة للتكرار.

نصيحة تدريبية خدمات Kubernetes والتخزين واستكشاف الأخطاء: راجع هذا الدرس في جلسات قصيرة يوميًا. بعد كل تمرين، اذكر القاعدة أو الخطوة التي استخدمتها؛ إذا لم تستطع، راجع الموضوع قبل المتابعة. الاستمرارية تثبت المادة أفضل من جلسة طويلة.

مثال

يبقى Pod في حالة CrashLoopBackOff بعد نشر علامة صورة جديدة. يعرض kubectl describe pod رمز خروج الحاوية، ويكشف kubectl logs عن متغير بيئة مفقود، ويشير Deployment إلى ConfigMap غير موجود. بعد إنشاء ConfigMap وإعادة النشر، يصل Pod إلى حالة Running ويبدأ Service في إرجاع حركة المرور.

أعد قراءة السؤال قبل الانتهاء وتأكد من معنى إجابتك.