Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Deux services dans un fichier Compose

Après cette leçon: Je peux décrire deux services qui travaillent ensemble dans un fichier Compose.

Leçon de 55 min4 commandesLab Docker : apprendre conteneurs, journaux et redémarrages en réparant un service en panne

Démarrer le cache, puis la boutique

Un fichier Compose décrit plusieurs services et leurs liens, et une seule commande les démarre tous. Il évite les erreurs d’ordre et de nom.

Une boutique a besoin d’un serveur web et d’un cache. Démarrer chacun à la main, c’est taper de longues commandes, dans le bon ordre, avec les bons noms.

Au troisième essai, quelqu’un les démarre dans le mauvais sens. Un seul fichier peut le dire une fois, pour tout le monde.

À la fin de cette leçon

Remarque

Je peux décrire deux services qui travaillent ensemble dans un fichier Compose.

Mots-clés

MotCe que ça veut direExemple
Serviceun programme d’un fichier Compose, lancé en un ou plusieurs conteneurs
Fichier Composeun fichier texte qui décrit des services et leurs liens
Port publiéune porte du conteneur ouverte sur l’hôte8080:80
Depends onune règle : un service attend un autre
Test de santéun test que Docker répète pour voir si un service répond

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Ce que le labo ne peut pas faire

Remarque

Le terminal du labo n’a pas de commande docker compose. Le labo a démarré ses trois services depuis un fichier Compose, que vous ouvrez avec Modifier le fichier. Nous avons lancé le fichier de cette leçon sur notre machine. Vous le lisez, regardez ce qu’a fait celui du labo, et vérifiez l’ordre de démarrage dans le devoir.

Un seul fichier décrit tous les services

Sous services:, chaque service a un nom et l’image qu’il lance. D’autres clés disent ses liens : ses portes, ses réglages, le volume qu’il garde et ce qu’il attend.

docker compose up lit le fichier et démarre tout dans le bon ordre. Voici un serveur web et un cache.

Deux services dans un fichier Compose

Code: bash
services:
  web:
    image: nginx:1.27-alpine
    ports:
      - "8080:80"
    environment:
      CACHE_HOST: cache
    depends_on:
      cache:
        condition: service_healthy
  cache:
    image: valkey/valkey:8.1-alpine
    healthcheck:
      test: ["CMD", "valkey-cli", "ping"]
      interval: 3s
    volumes:
      - cache-data:/data
volumes:
  cache-data:

Trouver le cache par son nom de service

Commande
docker exec web getent hosts cache

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Voir quel service a démarré quand

Commande
docker inspect --format '{{.Name}} {{.State.StartedAt}}' web cache worker

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple travaillé : ce que fait chaque clé

CléCe qu’elle faitCe que nous avons vu
imagedit quelle image lancerle labo lance nginx et valkey
depends_onfait attendre un service pour un autredans le labo, worker a démarré quelques secondes après web et cache
healthcheckdit à Docker comment tester un servicecache répond à valkey-cli ping : il est healthy
environmentdonne un réglage au programmeprintenv CACHE_HOST a affiché cache
volumesgarde un dossier hors du conteneurcache-data reste quand les services sont supprimés

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un port publié ouvre une porte

Dans le réseau, les services s’atteignent par leur nom. Un visiteur sur l’hôte a besoin d’une porte.

"8080:80" veut dire : le port 8080 de l’hôte va vers le port 80 du conteneur. Le côté de l’hôte est en premier. Sur notre machine, curl http://localhost:8080 a répondu 200. Le web du labo n’a pas de port publié : seuls les autres services et le bouton Ouvrir du labo l’atteignent.

Une erreur fréquente

Attention

On croit souvent que depends_on attend que l’autre programme soit prêt. Seul, il attend seulement que l’autre conteneur ait démarré. Donnez à l’autre service un test de santé et utilisez condition: service_healthy. Alors web ne démarre que lorsque le cache répond.

Le dossier partagé est-il modifiable dans web ?

Commande
docker inspect --format '{{range .Mounts}}{{.Destination}} {{.RW}}{{end}}' web

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Et dans worker ?

Commande
docker inspect --format '{{range .Mounts}}{{.Destination}} {{.RW}}{{end}}' worker

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour aller plus loin

Ajoutez un troisième service au fichier d’exemple : un worker qui dépend de web et de cache. Écrivez seulement ses trois lignes : le nom, une image et son depends_on.

Cherchez ensuite dans quel ordre Compose démarre les trois. Le devoir pose la même question pour n’importe quelle liste.

À propos de ce labo et de sa source: Lab Docker : apprendre conteneurs, journaux et redémarrages en réparant un service en panne

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.