Installer Docker et vérifier les prérequis

10 min
Public
débutant, Windows, macOS ou Linux
Durée
20 à 30 min (plus le téléchargement des images à la leçon 04)
Module
1/7
Compétence visée
disposer d'un Docker fonctionnel avec assez de mémoire, récupérer le kit du labo dans un dossier lab3, reconnaître son arborescence, lancer la liste de contrôle prerequis et savoir quoi faire quand elle affiche une croix

Le kit du labo, à téléchargerhttps://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr — par git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3. Cette leçon installe Docker (étapes 1 à 3), récupère ce kit (étape 4), en fait le tour (étape 5), puis lance sa liste de contrôle (étape 6). Le démarrage lui-même est à la leçon 04.

En une image

Le tableau de bord d'une voiture ne s'allume tout en vert que si le moteur a assez d'essence et que la route est dégagée devant lui. .\labo.ps1 prerequis (ou ./labo.sh prerequis) joue ce rôle avant de démarrer la stack d'observabilité : Docker est le moteur, la mémoire allouée est l'essence, et les neuf ports du labo sont la route qui doit être libre. Tu ne lances demarrer (leçon 04) que lorsque cette liste de contrôle se termine par sa ligne verte : Tout est prêt.

Comment ça marche

Le labo est décrit dans un fichier docker-compose.yml et piloté par un script en deux versions : labo.ps1 (PowerShell 5.1 ou 7, Windows) et labo.sh (bash : Linux, macOS, WSL 2, Git Bash). Tu n'installes rien d'autre que Docker sur ta machine : Prometheus, Grafana, Loki, Alertmanager, Alloy, node-exporter, cAdvisor, l'API, le générateur de charge et le webhook tournent tous dans des conteneurs. Quatre de ces images sont construites sur ta machine au premier démarrage (api, charge, webhook depuis python:3.13-slim, et loki pour lui ajouter un binaire de vérification de santé) ; les six autres sont téléchargées telles quelles.

SystèmeCe que tu installesRéglage de mémoireParticularité
Windows 10/11Docker Desktop, moteur WSL 2fichier %UserProfile%\.wslconfigSet-ExecutionPolicy si PowerShell refuse le script
macOSDocker Desktop (Intel ou Apple Silicon)Settings → Resources → Memoryrien d'autre ; curl est déjà présent
LinuxDocker Engine + plugin docker-compose-plugin + curlla RAM de la machine, directementgroupe docker ; aucun réglage noyau n'est nécessaire

Ce que vérifie prerequis, dans l'ordre : la commande docker existe ; le démon Docker répond ; docker compose (v2) est disponible ; curl est présent (version bash seulement : labo.ps1 utilise les commandes intégrées de PowerShell) ; la mémoire visible par Docker est d'au moins 2 Go (4 Go conseillés : entre 2 et 4, le script affiche un avertissement mais laisse passer) ; au moins deux processeurs ; et chacun des neuf ports du labo est libre, ou déjà utilisé par le labo lui-même.

PortServicePortServicePortService
9090Prometheus3100Loki8080cAdvisor
9093Alertmanager12345Alloy8000API catalogue
3000Grafana (GRAFANA_PORT)9100node-exporter8090webhook

Le port 3000 est à part. C'est celui de Grafana, et c'est le port le plus demandé sur un poste de développeur : une application Node, un autre tableau de bord, un autre Grafana l'occupent souvent déjà. Le kit prévoit ce cas avec la variable d'environnement GRAFANA_PORT. Dans docker-compose.yml, la publication du port de Grafana s'écrit :

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

Ce qu'il faut lire : ${GRAFANA_PORT:-3000} vaut la variable si elle est définie, 3000 sinon. La partie droite (:3000) est le port dans le conteneur et ne change jamais ; la partie gauche est le port sur ta machine. Les scripts labo.ps1 et labo.sh lisent la même variable : prerequis vérifie le bon port, demarrer affiche la bonne URL et etat interroge Grafana au bon endroit. Documentation : Docker Compose — Interpolation.

Pas à pas

  1. Windows : installer Docker Desktop avec WSL 2. Télécharge Docker Desktop, laisse coché « Use WSL 2 instead of Hyper-V », redémarre si demandé, puis lance Docker Desktop et attends que l'icône de la baleine soit stable. Sous WSL 2, Docker prend par défaut la moitié de ta RAM ; sur une machine à 8 Go, c'est juste. Pour lui garantir 4 Go, crée le fichier C:\Users\<toi>\.wslconfig :

    powershell
    notepad $env:UserProfile\.wslconfig

    Colle ces lignes, enregistre, puis redémarre la machine virtuelle WSL :

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

    Relance ensuite Docker Desktop.

  2. macOS : installer Docker Desktop et vérifier la mémoire. Installe le .dmg correspondant à ta puce, lance Docker Desktop, puis ouvre Settings → Resources → Advanced et vérifie que le curseur Memory est à 4 Go ou plus. Clique « Apply & restart » si tu l'as changé.

  3. Linux : Docker Engine, plugin Compose, curl et groupe docker. Installe Docker Engine et le plugin Compose selon la documentation de ta distribution (paquets docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin), plus curl s'il manque. Puis, pour ne pas taper sudo à chaque commande :

    bash
    sudo usermod -aG docker $USER
    newgrp docker        # ou déconnecte-toi puis reconnecte-toi
    docker run --rm hello-world
  4. Récupérer le kit du labo.

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

    Toutes les commandes du cours se lancent depuis ce dossier lab3. Si tu n'as pas git, le bouton « Code → Download ZIP » de la page GitHub donne le même contenu : décompresse-le et renomme le dossier en lab3.

  5. Faire le tour de l'arborescence. Liste les fichiers (ls ou Get-ChildItem -Recurse -File). Sur la machine du cours, le kit contient 32 fichiers :

    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

    Ce qu'il faut voir : un dossier par service, et un dossier modules/ où chaque module du cours range ses fichiers de travail. Tu n'as rien à modifier avant le module 3.

  6. Lancer la liste de contrôle.

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

    Sur la machine du cours (Windows 11, Docker Desktop, PowerShell 5.1), avant le premier démarrage :

    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

    Ce qu'il faut voir : quatorze coches, et la dernière ligne verte. Les versions et la mémoire dépendent de ta machine. La version bash affiche une ligne de plus, ✔ curl : présent, et se termine par Lancez : ./labo.sh demarrer. Une fois le labo démarré, relancer prerequis affiche port 9090 : utilisé par le labo lui-même au lieu de libre : c'est normal, et c'est ce que tu verras à la leçon 04.

  7. Si le port 3000 est déjà pris : choisir le port de Grafana. Définis GRAFANA_PORT avant prerequis, et garde-la définie pour demarrer et etat :

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

    La liste de contrôle affiche alors ✔ port 3001 libre à la place de la ligne du port 3000, et Grafana répondra sur http://localhost:3001. Toutes les adresses du cours qui mentionnent le port 3000 restent valables : remplace 3000 par 3001. La variable ne vit que dans le terminal courant ; si tu ouvres un autre terminal, redéfinis-la.

Si ça coince

Les messages ci-dessous ont été provoqués pour de vrai sur la machine du cours.

  • Windows seulement — PowerShell refuse le script.

    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

    La stratégie d'exécution par défaut de Windows bloque les scripts non signés. Autorise-les pour ton compte seulement :

    powershell
    Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

    Réponds O (oui) et relance .\labo.ps1 prerequis. C'est aussi ce que labo.ps1 affiche quand tu le lances sans argument.

  • Docker n'est pas installé, ou le terminal a été ouvert avant l'installation.

    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 sous bash.) Ferme et rouvre le terminal : le PATH n'a pas été rechargé. Si le message persiste, Docker n'est pas installé.

  • Le démon ne répond pas. prerequis affiche une croix sur le démon Docker répond. Sous Windows et macOS, Docker Desktop n'est pas lancé, ou encore en train de démarrer : attends que l'icône soit stable. Linux natif seulement — permission denied while trying to connect to the Docker daemon socket : ton utilisateur n'est pas dans le groupe docker, ou tu ne t'es pas reconnecté après usermod ; id -nG doit lister docker.

  • Le port 3000 est déjà occupé par un autre programme. Quand le labo n'est pas encore démarré et qu'un autre programme écoute sur le port de Grafana, prerequis affiche la croix et le remède sur la même ligne :

    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

    Fais ce que dit la ligne (étape 7). Pour un autre port occupé (9090, 8000…), le message est déjà occupé par un autre programme — arrêtez-le ou changez le port dans docker-compose.yml : trouve le programme (Get-NetTCPConnection -LocalPort 9090 sous Windows, sudo ss -ltnp | grep 9090 sous Linux) et arrête-le, ou change la partie gauche du port dans docker-compose.yml ("9091:9090").

  • Windows seulement — pas assez de mémoire. ✘ mémoire pour Docker : 1 Go — il en faut au moins 2 (fichier %UserProfile%\.wslconfig : [wsl2] memory=4GB, puis wsl --shutdown). Fais l'étape 1. Entre 2 et 4 Go, le script affiche un avertissement au lieu d'une croix et laisse passer.

  • Git Bash sous Windows — les deux scripts fonctionnent. Sur la machine du cours, ./labo.sh prerequis lancé depuis Git Bash donne la même liste que labo.ps1, avec la ligne ✔ curl : présent en plus et les couleurs affichées. Tu peux donc suivre les annexes bash du cours sous Windows si tu préfères ce terminal ; la variable se passe alors comme sous Linux : GRAFANA_PORT=3001 ./labo.sh prerequis.

À retenir

Ce labo n'exige qu'une seule chose sur ta machine : Docker (Desktop ou Engine, avec le plugin Compose, et curl pour la version bash) ; les dix services tournent tous dans des conteneurs, dont quatre construits sur ta machine au premier démarrage. Compte 2 Go de mémoire minimum pour Docker, 4 Go conseillés ; sous Windows, ça se règle dans %UserProfile%\.wslconfig suivi de wsl --shutdown. Neuf ports doivent être libres : 9090, 9093, 3000, 3100, 12345, 9100, 8080, 8000 et 8090. Le kit se récupère avec git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3, puis cd lab3 : 32 fichiers, un dossier par service, un dossier modules/ pour le cours. .\labo.ps1 prerequis ou ./labo.sh prerequis est ta liste de contrôle : quatorze coches (quinze en bash) et Tout est prêt. avant de démarrer. Si le port 3000 est pris, GRAFANA_PORT=3001 déplace Grafana sans toucher au reste ; la variable doit rester définie pour prerequis, demarrer et etat. Si PowerShell refuse le script : Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.

Pour aller plus loin