Faire évoluer Mini-Carnet pour utiliser Redis

Jusqu'ici, le compteur de visites vivait dans un fichier, protégé par un volume depuis le guide 18. Une application avec un vrai service annexe utilise plus souvent un stockage dédié comme Redis. Mettez à jour package.json pour ajouter cette dépendance :

Et modifiez server.js pour stocker et lire le compteur dans Redis plutôt que dans un fichier :

Remarquez la ligne REDIS_HOST = process.env.REDIS_HOST || 'redis' : l'application contacte Redis via un nom d'hôte, pas une adresse IP, exactement comme au guide 20. La valeur par défaut, redis, correspond au nom du service que vous allez déclarer juste en dessous.

Ajouter Redis dans compose.yaml

Un second service, redis, utilise directement image: redis:alpine plutôt que build : contrairement à Mini-Carnet, aucune construction n'est nécessaire, l'image officielle existe déjà. depends_on indique à Compose de démarrer redis avant mini-carnet, dans le bon ordre.

depends_on garantit l'ordre de démarrage, pas que le service soit prêt

depends_on garantit que le conteneur redis a démarré avant mini-carnet, pas que Redis a fini son initialisation interne et accepte déjà des connexions. Pour Redis, ce délai est en pratique quasi instantané, donc sans conséquence ici. Pour des services plus lents à démarrer, il existe des options plus précises dans la documentation officielle de Compose, hors du périmètre de ce parcours.

Reconstruire et tout relancer

Puisque server.js et package.json ont changé, l'image doit être reconstruite. Ajoutez simplement --build à la commande déjà connue :

Ouvrez http://localhost:3000 et rafraîchissez plusieurs fois : le compteur augmente, désormais stocké dans le conteneur Redis, contacté par son nom, sans le moindre docker network create tapé manuellement cette fois.

Ce que Compose vient de vous éviter

Comparez avec le guide 20 : là-bas, un réseau personnalisé devait être créé à la main avant de démarrer chaque conteneur avec l'option --network. Ici, rien de tout cela n'a été écrit explicitement, et pourtant Mini-Carnet joint Redis par son nom sans problème. Le guide suivant explique précisément ce que Compose a fait pour vous, en coulisses.

Vérifiez que vous avez compris

Vous supprimez la ligne depends_on du service mini-carnet, sans rien changer d'autre. Mini-Carnet va-t-il définitivement perdre la possibilité de contacter Redis par son nom ?

Non. depends_on influence uniquement l'ordre de démarrage des conteneurs, pas leur capacité à communiquer entre eux. La résolution de noms entre services d'un même fichier Compose fonctionne indépendamment de depends_on ; sans cette ligne, il est simplement un peu moins garanti que Redis ait déjà démarré au moment exact où Mini-Carnet tente sa première connexion.