Dépendances et dépannage avec Docker Compose

Docker : niveau intermédiaire

Mike Metzger

Data Engineering Consultant

Qu'est-ce qu'une dépendance ?

  • Les dépendances définissent l'ordre de démarrage des ressources
  • Les ressources (conteneurs) peuvent en nécessiter d'autres
  • Exemple d'application web
    • Le conteneur de base de données postgresql doit démarrer en premier

Exemple de dépendance de conteneur - postgres

Docker : niveau intermédiaire

Qu'est-ce qu'une dépendance ?

  • Les dépendances définissent l'ordre des ressources
  • Les ressources (conteneurs) peuvent en nécessiter d'autres
  • Exemple d'application web
    • Le conteneur postgresql doit démarrer en premier
    • Puis python_app

Exemple de dépendance de conteneur - python_app

Docker : niveau intermédiaire

Qu'est-ce qu'une dépendance ?

  • Les dépendances définissent l'ordre des ressources
  • Les ressources (conteneurs) peuvent en nécessiter d'autres
  • Exemple d'application web
    • Le conteneur postgresql doit démarrer en premier
    • Puis python_app
    • Enfin, le serveur web nginx

Exemple de dépendance de conteneur - complet

Docker : niveau intermédiaire

depends_on

  • Définies avec l'attribut depends_on
  • Possibilité d'enchaîner les dépendances, comme dans l'exemple
  • Ou d'avoir plusieurs dépendances par ressource si nécessaire
  • L'ordre du fichier compose.yaml n'a pas d'importance
services:
  postgresql:
    image: postgresql:latest

python_app: image: custom_app depends_on: - postgresql
nginx: image: nginx/latest depends_on: - python_app
Docker : niveau intermédiaire

Arrêt des applications

  • L'arrêt d'une application se fait dans l'ordre inverse
  • Arrête la ressource nginx

Exemple de dépendance de conteneur - complet

Docker : niveau intermédiaire

Arrêt des applications

  • L'arrêt d'une application se fait dans l'ordre inverse
  • Arrête la ressource nginx
  • Puis la ressource python_app

Exemple de dépendance de conteneur - python_app

Docker : niveau intermédiaire

Arrêt des applications

  • L'arrêt d'une application se fait dans l'ordre inverse
  • Arrête la ressource nginx
  • Puis la ressource python_app
  • Et enfin la ressource postgresql

Exemple de dépendance de conteneur - postgres

Docker : niveau intermédiaire

Autres options

  • Docker Compose propose d'autres options pour les dépendances
  • condition: définit quand une ressource est prête
    • service_started : la ressource a démarré normalement
      • Comportement par défaut
    • service_completed_successfully : la ressource s'est exécutée jusqu'au bout, par ex. config initiale, etc.
    • service_healthy : la ressource satisfait un critère défini par healthcheck
services:
  nginx:
    image: nginx/latest
    depends_on:
      python_app:
        condition: service_started

python_app: image: custom_app depends_on: postgresql: condition: service_healthy
Docker : niveau intermédiaire

Outils de dépannage Docker Compose

  • Docker Compose offre d'autres outils de dépannage
  • docker compose logs : agrège la sortie de toutes les ressources de l'application
    redis-1  | * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    redis-1  | * Running mode=standalone, port=6379.
    redis-1  | * Server initialized
    redis-1  | * Ready to accept connections tcp
    web-1    | * Serving Flask app 'app.py'
    web-1    |  * Running on all addresses (0.0.0.0)
    web-1    |  * Running on http://172.20.0.2:5000
    web-1    | Press CTRL+C to quit
    
  • docker compose logs <resourcename>
Docker : niveau intermédiaire

docker compose top

  • docker compose top affiche l'état des ressources d'une application
composetest-redis-1
UID   PID    PPID   C    STIME   TTY   TIME       CMD
999   2767   2726   0    01:16   ?     00:03:27   redis-server *:6379

composetest-web-1
UID    PID    PPID   C    STIME   TTY   TIME       CMD
root   2768   2740   0    01:16   ?     00:00:23   /usr/local/bin/python /usr/local/bin/flask run
Docker : niveau intermédiaire

Passons à la pratique !

Docker : niveau intermédiaire

Preparing Video For Download...