Εγκατάσταση Docker και έλεγχος των προαπαιτούμενων

10 λεπτά
Κοινό
αρχάριοι, Windows, macOS ή Linux
Διάρκεια
20 έως 30 λεπτά (πλέον η λήψη των εικόνων στο μάθημα 04)
Ενότητα
1/7
Στόχος δεξιότητας
να διαθέτεις ένα λειτουργικό Docker με αρκετή μνήμη, να ανακτήσεις το kit του εργαστηρίου σε έναν φάκελο lab3, να αναγνωρίζεις τη δενδρική του δομή, να εκτελείς τη λίστα ελέγχου prerequis και να ξέρεις τι να κάνεις όταν εμφανίζει έναν σταυρό

Το kit του εργαστηρίου, να το κατεβάσειςhttps://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr — με git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3. Αυτό το μάθημα εγκαθιστά το Docker (βήματα 1 έως 3), ανακτά αυτό το kit (βήμα 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 τρέχουν όλα μέσα σε containers. Τέσσερις από αυτές τις εικόνες κατασκευάζονται στον υπολογιστή σου στην πρώτη εκκίνηση (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 + plugin docker-compose-plugin + curlη RAM του μηχανήματος, απευθείαςομάδα docker· καμία ρύθμιση πυρήνα δεν είναι απαραίτητη

Τι ελέγχει το prerequis, με τη σειρά: η εντολή docker υπάρχει· ο δαίμονας Docker απαντά· το docker compose (v2) είναι διαθέσιμο· το curl είναι παρόν (μόνο στην έκδοση bash: το labo.ps1 χρησιμοποιεί τις ενσωματωμένες εντολές του PowerShell)· η μνήμη που βλέπει το Docker είναι τουλάχιστον 2 GB (4 GB συνιστώνται: μεταξύ 2 και 4, το σενάριο εμφανίζει μια προειδοποίηση αλλά αφήνει να περάσει)· τουλάχιστον δύο επεξεργαστές· και καθεμία από τις εννέα θύρες του εργαστηρίου είναι ελεύθερη, ή ήδη σε χρήση από το ίδιο το εργαστήριο.

ΘύραΥπηρεσίαΘύραΥπηρεσίαΘύραΥπηρεσία
9090Prometheus3100Loki8080cAdvisor
9093Alertmanager12345Alloy8000API καταλόγου
3000Grafana (GRAFANA_PORT)9100node-exporter8090webhook

Η θύρα 3000 είναι ξεχωριστή περίπτωση. Είναι αυτή του Grafana, και είναι η πιο ζητούμενη θύρα σε έναν σταθμό προγραμματιστή: μια εφαρμογή Node, ένας άλλος πίνακας ελέγχου, ένα άλλο Grafana την καταλαμβάνουν συχνά ήδη. Το kit προβλέπει αυτή την περίπτωση με τη μεταβλητή περιβάλλοντος GRAFANA_PORT. Στο docker-compose.yml, η δημοσίευση της θύρας του Grafana γράφεται:

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

Τι πρέπει να διαβάσεις: το ${GRAFANA_PORT:-3000} ισούται με τη μεταβλητή αν είναι ορισμένη, 3000 αλλιώς. Το δεξιό μέρος (:3000) είναι η θύρα μέσα στο container και δεν αλλάζει ποτέ· το αριστερό μέρος είναι η θύρα στον δικό σου υπολογιστή. Τα σενάρια labo.ps1 και labo.sh διαβάζουν την ίδια μεταβλητή: το prerequis ελέγχει τη σωστή θύρα, το demarrer εμφανίζει το σωστό URL και το 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 παίρνει από προεπιλογή τη μισή RAM σου· σε ένα μηχάνημα με 8 GB, είναι οριακό. Για να του εγγυηθείς 4 GB, δημιούργησε το αρχείο 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 GB ή περισσότερο. Κάνε κλικ στο «Apply & restart» αν το άλλαξες.

  3. Linux: Docker Engine, plugin Compose, curl και ομάδα docker. Εγκατάστησε το Docker Engine και το plugin 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. Ανάκτηση του kit του εργαστηρίου.

    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). Στο μηχάνημα του μαθήματος, το kit περιέχει 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 αντί για 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: βρες το πρόγραμμα (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 GB, το σενάριο εμφανίζει μια προειδοποίηση αντί για σταυρό και αφήνει να περάσει.

  • 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, με το plugin Compose, και το curl για την έκδοση bash)· οι δέκα υπηρεσίες τρέχουν όλες μέσα σε containers, από τις οποίες τέσσερις κατασκευάζονται στον υπολογιστή σου στην πρώτη εκκίνηση. Υπολόγισε 2 GB μνήμης ελάχιστο για το Docker, 4 GB συνιστώμενο· σε Windows, αυτό ρυθμίζεται στο %UserProfile%\.wslconfig ακολουθούμενο από wsl --shutdown. Εννέα θύρες πρέπει να είναι ελεύθερες: 9090, 9093, 3000, 3100, 12345, 9100, 8080, 8000 και 8090. Το kit ανακτάται με 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.

Για να πας παρακάτω

  • Docker Desktop — Install on Windows, on Mac, Docker Engine — Install on Linux: οι επίσημες σελίδες εγκατάστασης, ενημερωμένες για την έκδοση του συστήματός σου.
  • WSL — Προχωρημένη ρύθμιση (.wslconfig): όλα τα κλειδιά του αρχείου, ανάμεσά τους memory, processors και swap.
  • Docker Compose — Variable interpolation: η σύνταξη ${VARIABLE:-προεπιλογή} που χρησιμοποιείται για τη GRAFANA_PORT, και το αρχείο .env που επιτρέπει να ορίσεις τη μεταβλητή μια για πάντα στη ρίζα του lab3.
  • about_Execution_Policies: τι αλλάζει το RemoteSigned, και γιατί είναι η συνιστώμενη ρύθμιση για έναν σταθμό εργασίας.
  • Το μάθημα 04 ξεκινά το εργαστήριο: η λήψη των εικόνων, η κατασκευή των τεσσάρων τοπικών εικόνων, η πλήρης έξοδος του demarrer και μετά του etat, και ο γύρος των εννέα διεπαφών.