تثبيت Docker والتحقق من المتطلبات الأساسية

9 دقيقة
الجمهور
مبتدئ، Windows أو macOS أو Linux
المدة
من 20 إلى 30 دقيقة (بالإضافة إلى تنزيل الصور في الدرس 04)
الوحدة
1/7
الكفاءة المستهدفة
امتلاك Docker يعمل بذاكرة كافية، واستعادة حقيبة المختبر في مجلد lab3، والتعرف على شجرة ملفاتها، وتشغيل قائمة التحقق prerequis، ومعرفة ما يجب فعله عندما تعرض علامة خطأ

حقيبة المختبر، للتنزيلhttps://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr — عبر git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3. هذا الدرس يثبّت Docker (الخطوات من 1 إلى 3)، ويستعيد هذه الحقيبة (الخطوة 4)، ويتجول فيها (الخطوة 5)، ثم يشغّل قائمة التحقق الخاصة بها (الخطوة 6). أما بدء التشغيل نفسه ففي الدرس 04.

في صورة واحدة

لا تضيء لوحة قيادة السيارة بالأخضر بالكامل إلا إذا كان في المحرك وقود كافٍ وكانت الطريق أمامه خالية. .\labo.ps1 prerequis (أو ./labo.sh prerequis) يلعب هذا الدور قبل بدء تشغيل حزمة قابلية المراقبة : Docker هو المحرك، والذاكرة المخصصة هي الوقود، ومنافذ المختبر التسعة هي الطريق التي يجب أن تكون خالية. لا تشغّل demarrer (الدرس 04) إلا عندما تنتهي قائمة التحقق هذه بسطرها الأخضر : Tout est prêt. (كل شيء جاهز).

كيف يعمل ذلك

المختبر موصوف في ملف docker-compose.yml ويُدار بسكريبت بنسختين : labo.ps1 (PowerShell 5.1 أو 7، Windows) وlabo.sh (bash : Linux وmacOS وWSL 2 وGit Bash). لا تثبّت شيئاً غير Docker على جهازك : Prometheus وGrafana وLoki وAlertmanager وAlloy وnode-exporter وcAdvisor وAPI ومولّد الحمل وwebhook تعمل جميعها في حاويات. أربع من هذه الصور تُبنى على جهازك عند أول تشغيل (api وcharge وwebhook انطلاقاً من python:3.13-slim، وloki لإضافة ملف ثنائي للتحقق من الصحة إليه) ؛ أما الست الأخرى فتُنزَّل كما هي.

النظامما تثبّتهضبط الذاكرةالخصوصية
Windows 10/11Docker Desktop، محرك WSL 2الملف %UserProfile%\.wslconfigSet-ExecutionPolicy إذا رفض PowerShell السكريبت
macOSDocker Desktop (Intel أو Apple Silicon)Settings → Resources → Memoryلا شيء آخر ؛ curl موجود مسبقاً
LinuxDocker Engine + الإضافة docker-compose-plugin + curlذاكرة الجهاز، مباشرةالمجموعة docker ؛ لا حاجة لأي ضبط للنواة

ما يتحقق منه prerequis، بالترتيب : وجود الأمر docker ؛ استجابة خدمة Docker الخلفية ؛ توفر docker compose (v2) ؛ وجود curl (نسخة bash فقط : يستخدم labo.ps1 أوامر PowerShell المدمجة) ؛ الذاكرة المرئية لـ Docker لا تقل عن 2 غيغابايت (4 غيغابايت موصى بها : بين 2 و4، يعرض السكريبت تحذيراً لكنه يسمح بالمتابعة) ؛ معالجان على الأقل ؛ وكل منفذ من منافذ المختبر التسعة حر، أو مستخدم مسبقاً من المختبر نفسه.

المنفذالخدمةالمنفذالخدمةالمنفذالخدمة
9090Prometheus3100Loki8080cAdvisor
9093Alertmanager12345Alloy8000API الكتالوج
3000Grafana (GRAFANA_PORT)9100node-exporter8090webhook

المنفذ 3000 حالة خاصة. إنه منفذ Grafana، وهو المنفذ الأكثر طلباً على جهاز مطوّر : تطبيق Node، أو لوحة معلومات أخرى، أو Grafana آخر يشغله غالباً مسبقاً. تتوقع الحقيبة هذه الحالة بمتغير البيئة GRAFANA_PORT. في docker-compose.yml، يُكتب نشر منفذ Grafana هكذا :

yaml
    ports:
      - "${GRAFANA_PORT:-3000}:3000"

ما يجب قراءته : ${GRAFANA_PORT:-3000} يساوي المتغير إذا كان معرَّفاً، و3000 خلاف ذلك. الجزء الأيمن (:3000) هو المنفذ داخل الحاوية ولا يتغير أبداً ؛ الجزء الأيسر هو المنفذ على جهازك. يقرأ السكريبتان labo.ps1 وlabo.sh المتغير نفسه : prerequis يتحقق من المنفذ الصحيح، وdemarrer يعرض العنوان الصحيح، وetat يستعلم Grafana في المكان الصحيح. التوثيق : Docker Compose — Interpolation.

خطوة بخطوة

  1. Windows : تثبيت Docker Desktop مع WSL 2. نزّل Docker Desktop، واترك خيار « Use WSL 2 instead of Hyper-V » محدداً، وأعد التشغيل إذا طُلب منك ذلك، ثم شغّل Docker Desktop وانتظر حتى تستقر أيقونة الحوت. تحت WSL 2، يأخذ Docker افتراضياً نصف ذاكرتك ؛ على جهاز بـ 8 غيغابايت، هذا بالكاد يكفي. لضمان 4 غيغابايت له، أنشئ الملف C:\Users\<أنت>\.wslconfig :

    powershell
    notepad $env:UserProfile\.wslconfig

    الصق هذه الأسطر، واحفظ، ثم أعد تشغيل الجهاز الافتراضي WSL :

    ini
    [wsl2]
    memory=4GB
    processors=4
    powershell
    wsl --shutdown

    ثم أعد تشغيل Docker Desktop.

  2. macOS : تثبيت Docker Desktop والتحقق من الذاكرة. ثبّت ملف .dmg المناسب لمعالجك، وشغّل Docker Desktop، ثم افتح Settings → Resources → Advanced وتحقق من أن مؤشر Memory عند 4 غيغابايت أو أكثر. انقر « Apply & restart » إذا غيّرته.

  3. Linux : Docker Engine وإضافة Compose وcurl والمجموعة docker. ثبّت Docker Engine وإضافة Compose وفقاً لتوثيق توزيعتك (الحزم docker-ce وdocker-ce-cli وcontainerd.io وdocker-compose-plugin)، بالإضافة إلى curl إن كان ناقصاً. ثم، لتجنب كتابة sudo مع كل أمر :

    bash
    sudo usermod -aG docker $USER
    newgrp docker        # ou déconnecte-toi puis reconnecte-toi
    docker run --rm hello-world
  4. استعادة حقيبة المختبر.

    bash
    git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3
    cd lab3

    تُشغَّل جميع أوامر الدورة من هذا المجلد lab3. إذا لم يكن لديك git، يعطي الزر « Code → Download ZIP » في صفحة GitHub المحتوى نفسه : فك ضغطه وأعد تسمية المجلد إلى lab3.

  5. التجول في شجرة الملفات. اعرض قائمة الملفات (ls أو Get-ChildItem -Recurse -File). على جهاز الدورة، تحتوي الحقيبة على 32 ملفاً :

    text
    docker-compose.yml          les 10 services, leurs ports, leurs volumes, leurs healthchecks
    labo.ps1                    le script de pilotage, Windows
    labo.sh                     le même, bash
    README.md                   le mode d'emploi du kit
    LICENSE  .gitattributes  .gitignore
    api/app.py                  l'API catalogue (FastAPI + prometheus_client)
    api/donnees/cours.json      les 64 cours
    api/Dockerfile  api/requirements.txt
    charge/charge.py            le générateur de trafic
    charge/Dockerfile  charge/requirements.txt
    webhook/webhook.py          le récepteur d'alertes
    webhook/Dockerfile  webhook/requirements.txt
    prometheus/prometheus.yml   les 8 cibles, scrape toutes les 15 s
    prometheus/regles/alertes.yml         les 10 règles d'alerte
    prometheus/regles/enregistrement.yml  les règles d'enregistrement (api:taux_erreurs_5m…)
    alertmanager/alertmanager.yml         le routage vers le webhook
    loki/loki.yml  loki/Dockerfile
    alloy/config.alloy          la collecte des logs Docker → Loki
    grafana/provisioning/datasources/sources.yml       Prometheus, Loki, Alertmanager
    grafana/provisioning/dashboards/tableaux-de-bord.yml
    grafana/provisioning/dashboards/api-catalogue.json
    grafana/provisioning/dashboards/hote-conteneurs.json
    grafana/provisioning/dashboards/journaux-api.json
    modules/01-le-labo/requetes.txt        les requêtes PromQL de ce module
    modules/01-le-labo/requetes-logql.txt  les requêtes LogQL de ce module
    outils/generer-cours.py     le script qui a fabriqué cours.json

    ما يجب رؤيته : مجلد لكل خدمة، ومجلد modules/ حيث ترتّب كل وحدة من الدورة ملفات عملها. ليس عليك تعديل أي شيء قبل الوحدة 3.

  6. تشغيل قائمة التحقق.

    powershell
    .\labo.ps1 prerequis
    bash
    ./labo.sh prerequis

    على جهاز الدورة (Windows 11، Docker Desktop، PowerShell 5.1)، قبل أول تشغيل :

    text
    
    == Prérequis ==
      ✔ docker : Docker version 29.3.1, build c2be9cc
      ✔ le démon Docker répond
      ✔ docker compose : 5.1.1
      ✔ mémoire disponible pour Docker : 31 Go
      ✔ processeurs : 20
      ✔ port 9090 libre
      ✔ port 9093 libre
      ✔ port 3000 libre
      ✔ port 3100 libre
      ✔ port 12345 libre
      ✔ port 9100 libre
      ✔ port 8080 libre
      ✔ port 8000 libre
      ✔ port 8090 libre
    
    Tout est prêt. Lancez : .\labo.ps1 demarrer

    ما يجب رؤيته : أربع عشرة علامة صح، والسطر الأخير أخضر. تعتمد الإصدارات والذاكرة على جهازك. تعرض نسخة bash سطراً إضافياً، ✔ curl : présent، وتنتهي بـ Lancez : ./labo.sh demarrer. بمجرد بدء تشغيل المختبر، تعيد إعادة تشغيل prerequis عرض port 9090 : utilisé par le labo lui-même (المنفذ 9090 : مستخدم من المختبر نفسه) بدلاً من libre : هذا طبيعي، وهو ما ستراه في الدرس 04.

  7. إذا كان المنفذ 3000 مشغولاً مسبقاً : اختيار منفذ Grafana. عرّف GRAFANA_PORT قبل prerequis، وأبقِه معرَّفاً لـ demarrer وetat :

    powershell
    $env:GRAFANA_PORT = 3001
    .\labo.ps1 prerequis
    bash
    GRAFANA_PORT=3001 ./labo.sh prerequis

    تعرض قائمة التحقق حينها ✔ port 3001 libre بدلاً من سطر المنفذ 3000، وسيستجيب Grafana على http://localhost:3001. تبقى جميع عناوين الدورة التي تذكر المنفذ 3000 صالحة : استبدل 3000 بـ 3001. لا يعيش المتغير إلا في الطرفية الحالية ؛ إذا فتحت طرفية أخرى، أعد تعريفه.

إذا حدثت مشكلة

الرسائل أدناه استُحضرت فعلياً على جهاز الدورة.

  • Windows فقط — يرفض PowerShell السكريبت.

    text
    .\labo.ps1 : Impossible de charger le fichier C:\Users\<toi>\lab3\labo.ps1, car l'exécution de
    scripts est désactivée sur ce système. Pour plus d'informations, consultez about_Execution_Policies à l'adresse
    https://go.microsoft.com/fwlink/?LinkID=135170.
        + CategoryInfo          : Erreur de sécurité : (:) [], PSSecurityException
        + FullyQualifiedErrorId : UnauthorizedAccess

    سياسة التنفيذ الافتراضية في Windows تحظر السكريبتات غير الموقعة. اسمح بها لحسابك فقط :

    powershell
    Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

    أجب بـ O (نعم) وأعد تشغيل .\labo.ps1 prerequis. هذا أيضاً ما يعرضه labo.ps1 عندما تشغّله دون وسيط.

  • Docker غير مثبّت، أو فُتحت الطرفية قبل التثبيت.

    text
    docker : Le terme «docker» n'est pas reconnu comme nom d'applet de commande, fonction, fichier de script ou
    programme exécutable. Vérifiez l'orthographe du nom, ou si un chemin d'accès existe, vérifiez que le chemin d'accès
    est correct et réessayez.

    (docker: command not found تحت bash.) أغلق الطرفية وأعد فتحها : لم يُعَد تحميل PATH. إذا استمرت الرسالة، فـ Docker غير مثبّت.

  • الخدمة الخلفية لا تستجيب. يعرض prerequis علامة خطأ على le démon Docker répond. تحت Windows وmacOS، Docker Desktop غير مشغّل، أو لا يزال قيد البدء : انتظر حتى تستقر الأيقونة. Linux الأصلي فقط — permission denied while trying to connect to the Docker daemon socket : مستخدمك ليس في المجموعة docker، أو لم تعد تسجيل الدخول بعد usermod ؛ يجب أن يعرض id -nG المجموعة docker.

  • المنفذ 3000 مشغول مسبقاً ببرنامج آخر. عندما لا يكون المختبر قد بدأ بعد ويستمع برنامج آخر على منفذ Grafana، يعرض prerequis علامة الخطأ والعلاج في السطر نفسه :

    text
      ✘ port 3000 déjà occupé par un autre programme — choisissez un autre port pour Grafana :  $env:GRAFANA_PORT = 3001  puis relancez
    
    Corrigez les points marqués ✘ puis relancez .\labo.ps1 prerequis

    افعل ما يقوله السطر (الخطوة 7). لمنفذ آخر مشغول (9090، 8000…)، تكون الرسالة déjà occupé par un autre programme — arrêtez-le ou changez le port dans docker-compose.yml (مشغول مسبقاً ببرنامج آخر — أوقفه أو غيّر المنفذ في docker-compose.yml) : اعثر على البرنامج (Get-NetTCPConnection -LocalPort 9090 تحت Windows، وsudo ss -ltnp | grep 9090 تحت Linux) وأوقفه، أو غيّر الجزء الأيسر من المنفذ في docker-compose.yml ("9091:9090").

  • Windows فقط — ذاكرة غير كافية. ✘ mémoire pour Docker : 1 Go — il en faut au moins 2 (fichier %UserProfile%\.wslconfig : [wsl2] memory=4GB, puis wsl --shutdown). نفّذ الخطوة 1. بين 2 و4 غيغابايت، يعرض السكريبت تحذيراً بدلاً من علامة خطأ ويسمح بالمتابعة.

  • Git Bash تحت Windows — السكريبتان يعملان. على جهاز الدورة، يعطي ./labo.sh prerequis المشغَّل من Git Bash القائمة نفسها التي يعطيها labo.ps1، مع السطر ✔ curl : présent إضافة والألوان معروضة. يمكنك إذن اتباع ملاحق bash في الدورة تحت Windows إذا كنت تفضل هذه الطرفية ؛ يُمرَّر المتغير حينها كما تحت Linux : GRAFANA_PORT=3001 ./labo.sh prerequis.

ما يجب تذكره

لا يتطلب هذا المختبر سوى شيء واحد على جهازك : Docker (Desktop أو Engine، مع إضافة Compose، وcurl لنسخة bash) ؛ الخدمات العشر تعمل جميعها في حاويات، أربع منها تُبنى على جهازك عند أول تشغيل. احسب 2 غيغابايت من الذاكرة كحد أدنى لـ Docker، و4 غيغابايت موصى بها ؛ تحت Windows، يُضبط ذلك في %UserProfile%\.wslconfig متبوعاً بـ wsl --shutdown. يجب أن تكون تسعة منافذ حرة : 9090 و9093 و3000 و3100 و12345 و9100 و8080 و8000 و8090. تُستعاد الحقيبة بـ git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3، ثم cd lab3 : 32 ملفاً، ومجلد لكل خدمة، ومجلد modules/ للدورة. .\labo.ps1 prerequis أو ./labo.sh prerequis هي قائمة التحقق الخاصة بك : أربع عشرة علامة صح (خمس عشرة في bash) وTout est prêt. قبل البدء. إذا كان المنفذ 3000 مشغولاً، ينقل GRAFANA_PORT=3001 Grafana دون المساس بالباقي ؛ يجب أن يبقى المتغير معرَّفاً لـ prerequis وdemarrer وetat. إذا رفض PowerShell السكريبت : Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.

للتعمق أكثر