Instalar Docker y verificar los requisitos previos

10 min
Público
principiante, Windows, macOS o Linux
Duración
20 a 30 min (más la descarga de las imágenes en la lección 04)
Módulo
1/7
Competencia objetivo
disponer de un Docker funcional con suficiente memoria, obtener el kit del labo en una carpeta lab3, reconocer su estructura de carpetas, lanzar la lista de control prerequis y saber qué hacer cuando muestra una cruz

El kit del labo, para descargarhttps://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr — mediante git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3. Esta lección instala Docker (pasos 1 a 3), obtiene ese kit (paso 4), lo recorre (paso 5), y luego lanza su lista de control (paso 6). El arranque en sí está en la lección 04.

En una imagen

El tablero de un automóvil solo se enciende todo en verde si el motor tiene suficiente combustible y la ruta está despejada delante de él. .\labo.ps1 prerequis (o ./labo.sh prerequis) desempeña ese papel antes de iniciar la pila de observabilidad: Docker es el motor, la memoria asignada es el combustible, y los nueve puertos del labo son la ruta que debe estar libre. Solo lanzas demarrer (lección 04) cuando esa lista de control termina con su línea verde: Tout est prêt.

Cómo funciona

El labo está descrito en un archivo docker-compose.yml y controlado por un script en dos versiones: labo.ps1 (PowerShell 5.1 o 7, Windows) y labo.sh (bash: Linux, macOS, WSL 2, Git Bash). No instalas nada más que Docker en tu máquina: Prometheus, Grafana, Loki, Alertmanager, Alloy, node-exporter, cAdvisor, la API, el generador de carga y el webhook corren todos en contenedores. Cuatro de esas imágenes se construyen en tu máquina en el primer arranque (api, charge, webhook a partir de python:3.13-slim, y loki para agregarle un binario de verificación de salud); las otras seis se descargan tal cual.

SistemaLo que instalasAjuste de memoriaParticularidad
Windows 10/11Docker Desktop, motor WSL 2archivo %UserProfile%\.wslconfigSet-ExecutionPolicy si PowerShell rechaza el script
macOSDocker Desktop (Intel o Apple Silicon)Settings → Resources → Memorynada más; curl ya está presente
LinuxDocker Engine + plugin docker-compose-plugin + curlla RAM de la máquina, directamentegrupo docker; no se necesita ningún ajuste del kernel

Lo que verifica prerequis, en orden: el comando docker existe; el demonio Docker responde; docker compose (v2) está disponible; curl está presente (solo versión bash: labo.ps1 usa los comandos integrados de PowerShell); la memoria visible para Docker es de al menos 2 GB (4 GB recomendados: entre 2 y 4, el script muestra una advertencia pero deja pasar); al menos dos procesadores; y cada uno de los nueve puertos del labo está libre, o ya está en uso por el propio labo.

PuertoServicioPuertoServicioPuertoServicio
9090Prometheus3100Loki8080cAdvisor
9093Alertmanager12345Alloy8000API de catálogo
3000Grafana (GRAFANA_PORT)9100node-exporter8090webhook

El puerto 3000 es un caso aparte. Es el de Grafana, y es el puerto más solicitado en una computadora de desarrollador: una aplicación Node, otro tablero de control, otro Grafana lo ocupan a menudo. El kit prevé este caso con la variable de entorno GRAFANA_PORT. En docker-compose.yml, la publicación del puerto de Grafana se escribe:

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

Lo que hay que leer: ${GRAFANA_PORT:-3000} vale la variable si está definida, 3000 si no. La parte derecha (:3000) es el puerto dentro del contenedor y nunca cambia; la parte izquierda es el puerto en tu máquina. Los scripts labo.ps1 y labo.sh leen la misma variable: prerequis verifica el puerto correcto, demarrer muestra la URL correcta y etat consulta Grafana en el lugar correcto. Documentación: Docker Compose — Interpolation.

Paso a paso

  1. Windows: instalar Docker Desktop con WSL 2. Descarga Docker Desktop, deja marcado «Use WSL 2 instead of Hyper-V», reinicia si se solicita, luego lanza Docker Desktop y espera a que el ícono de la ballena esté estable. Bajo WSL 2, Docker toma por defecto la mitad de tu RAM; en una máquina de 8 GB, es justo. Para garantizarle 4 GB, crea el archivo C:\Users\<tú>\.wslconfig:

    powershell
    notepad $env:UserProfile\.wslconfig

    Pega estas líneas, guarda, y luego reinicia la máquina virtual WSL:

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

    Después vuelve a lanzar Docker Desktop.

  2. macOS: instalar Docker Desktop y verificar la memoria. Instala el .dmg correspondiente a tu chip, lanza Docker Desktop, luego abre Settings → Resources → Advanced y verifica que el control deslizante Memory esté en 4 GB o más. Haz clic en «Apply & restart» si lo cambiaste.

  3. Linux: Docker Engine, plugin Compose, curl y grupo docker. Instala Docker Engine y el plugin Compose según la documentación de tu distribución (paquetes docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin), más curl si falta. Luego, para no escribir sudo en cada comando:

    bash
    sudo usermod -aG docker $USER
    newgrp docker        # ou déconnecte-toi puis reconnecte-toi
    docker run --rm hello-world
  4. Obtener el kit del labo.

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

    Todos los comandos del curso se lanzan desde esta carpeta lab3. Si no tienes git, el botón «Code → Download ZIP» de la página de GitHub da el mismo contenido: descomprímelo y renombra la carpeta como lab3.

  5. Recorrer la estructura de carpetas. Lista los archivos (ls o Get-ChildItem -Recurse -File). En la máquina del curso, el kit contiene 32 archivos:

    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

    Lo que hay que ver: una carpeta por servicio, y una carpeta modules/ donde cada módulo del curso guarda sus archivos de trabajo. No tienes nada que modificar antes del módulo 3.

  6. Lanzar la lista de control.

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

    En la máquina del curso (Windows 11, Docker Desktop, PowerShell 5.1), antes del primer arranque:

    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

    Lo que hay que ver: catorce marcas de verificación, y la última línea en verde. Las versiones y la memoria dependen de tu máquina. La versión bash muestra una línea más, ✔ curl : présent, y termina con Lancez : ./labo.sh demarrer. Una vez iniciado el labo, relanzar prerequis muestra port 9090 : utilisé par le labo lui-même en lugar de libre: es normal, y es lo que verás en la lección 04.

  7. Si el puerto 3000 ya está ocupado: elegir el puerto de Grafana. Define GRAFANA_PORT antes de prerequis, y mantenla definida para demarrer y etat:

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

    La lista de control muestra entonces ✔ port 3001 libre en lugar de la línea del puerto 3000, y Grafana responderá en http://localhost:3001. Todas las direcciones del curso que mencionan el puerto 3000 siguen siendo válidas: reemplaza 3000 por 3001. La variable solo vive en la terminal actual; si abres otra terminal, vuelve a definirla.

Si algo falla

Los mensajes siguientes fueron provocados de verdad en la máquina del curso.

  • Solo Windows — PowerShell rechaza el 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 política de ejecución por defecto de Windows bloquea los scripts sin firma. Autorízalos solo para tu cuenta:

    powershell
    Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

    Responde O (sí) y relanza .\labo.ps1 prerequis. Es también lo que labo.ps1 muestra cuando lo lanzas sin argumento.

  • Docker no está instalado, o la terminal se abrió antes de la instalación.

    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 en bash.) Cierra y vuelve a abrir la terminal: el PATH no se recargó. Si el mensaje persiste, Docker no está instalado.

  • El demonio no responde. prerequis muestra una cruz en le démon Docker répond. En Windows y macOS, Docker Desktop no está lanzado, o todavía está arrancando: espera a que el ícono esté estable. Solo Linux nativo — permission denied while trying to connect to the Docker daemon socket: tu usuario no está en el grupo docker, o no volviste a iniciar sesión después de usermod; id -nG debe listar docker.

  • El puerto 3000 ya está ocupado por otro programa. Cuando el labo todavía no está iniciado y otro programa escucha en el puerto de Grafana, prerequis muestra la cruz y el remedio en la misma línea:

    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

    Haz lo que dice la línea (paso 7). Para otro puerto ocupado (9090, 8000…), el mensaje es déjà occupé par un autre programme — arrêtez-le ou changez le port dans docker-compose.yml: encuentra el programa (Get-NetTCPConnection -LocalPort 9090 en Windows, sudo ss -ltnp | grep 9090 en Linux) y deténlo, o cambia la parte izquierda del puerto en docker-compose.yml ("9091:9090").

  • Solo Windows — no hay suficiente memoria. ✘ mémoire pour Docker : 1 Go — il en faut au moins 2 (fichier %UserProfile%\.wslconfig : [wsl2] memory=4GB, puis wsl --shutdown). Haz el paso 1. Entre 2 y 4 GB, el script muestra una advertencia en lugar de una cruz y deja pasar.

  • Git Bash en Windows — los dos scripts funcionan. En la máquina del curso, ./labo.sh prerequis lanzado desde Git Bash da la misma lista que labo.ps1, con la línea ✔ curl : présent adicional y los colores mostrados. Puedes por lo tanto seguir los anexos bash del curso en Windows si prefieres esa terminal; la variable se pasa entonces como en Linux: GRAFANA_PORT=3001 ./labo.sh prerequis.

Para recordar

Este labo exige una sola cosa en tu máquina: Docker (Desktop o Engine, con el plugin Compose, y curl para la versión bash); los diez servicios corren todos en contenedores, cuatro de ellos construidos en tu máquina en el primer arranque. Calcula 2 GB de memoria mínimo para Docker, 4 GB recomendados; en Windows, se ajusta en %UserProfile%\.wslconfig seguido de wsl --shutdown. Nueve puertos deben estar libres: 9090, 9093, 3000, 3100, 12345, 9100, 8080, 8000 y 8090. El kit se obtiene con git clone https://github.com/hrhouma2/aiopsatlas-observabilite-labo-fr.git lab3, luego cd lab3: 32 archivos, una carpeta por servicio, una carpeta modules/ para el curso. .\labo.ps1 prerequis o ./labo.sh prerequis es tu lista de control: catorce marcas (quince en bash) y Tout est prêt. antes de iniciar. Si el puerto 3000 está ocupado, GRAFANA_PORT=3001 desplaza Grafana sin tocar el resto; la variable debe seguir definida para prerequis, demarrer y etat. Si PowerShell rechaza el script: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.

Para ir más allá