Introduction
Dans ce lab, vous apprendrez à utiliser la commande docker compose stop pour gérer les services définis dans un fichier Docker Compose. Nous commencerons par préparer un projet Docker Compose simple, qui inclut l'installation de Docker Compose et la création d'un fichier docker-compose.yml de base.
Après la configuration du projet, vous pratiquerez le démarrage des services définis dans le fichier Compose. Le cœur du lab se concentre sur l'utilisation de la commande docker compose stop pour arrêter tous les services en cours d'exécution, arrêter un service spécifique et arrêter les services avec un délai d'attente spécifié. Cette expérience pratique vous fournira des compétences concrètes pour contrôler le cycle de vie de vos applications Docker multi-conteneurs à l'aide de Docker Compose.
Préparer un projet Docker Compose simple
Dans cette étape, nous allons préparer un projet Docker Compose simple. Docker Compose est un outil permettant de définir et d'exécuter des applications Docker multi-conteneurs. Avec Compose, vous utilisez un fichier YAML pour configurer les services de votre application. Ensuite, avec une seule commande, vous créez et démarrez tous les services à partir de votre configuration.
Comme Docker Compose n'est pas préinstallé dans l'environnement LabEx, nous devons d'abord l'installer. Nous allons télécharger le binaire Docker Compose et le rendre exécutable.
Tout d'abord, téléchargeons le binaire Docker Compose. Nous utiliserons curl pour télécharger la dernière version stable.
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Cette commande télécharge le binaire Docker Compose pour votre architecture système et l'enregistre dans /usr/local/bin/docker-compose.
Ensuite, nous devons rendre le binaire téléchargé exécutable.
sudo chmod +x /usr/local/bin/docker-compose
Cette commande ajoute les permissions d'exécution au binaire Docker Compose.
Maintenant, vérifions l'installation en contrôlant la version de Docker Compose.
docker-compose --version
Vous devriez voir la version installée de Docker Compose dans la sortie, confirmant que l'installation a réussi.
Maintenant que Docker Compose est installé, créons un projet Docker Compose simple. Nous allons créer un répertoire pour notre projet puis un fichier docker-compose.yml à l'intérieur.
Commencez par créer un répertoire nommé my-compose-app dans votre répertoire personnel.
mkdir ~/project/my-compose-app
Accédez au répertoire nouvellement créé.
cd ~/project/my-compose-app
Maintenant, nous allons créer un fichier docker-compose.yml. Ce fichier définira les services de notre application. Nous utiliserons nano pour créer et éditer le fichier.
nano docker-compose.yml
Dans l'éditeur nano, collez le contenu suivant :
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
app:
image: ubuntu:latest
command: tail -f /dev/null
Analysons ce fichier docker-compose.yml :
version: '3.8'spécifie la version du format de fichier Docker Compose.services:définit les services qui composent votre application.web:définit un service nomméweb.image: nginx:latestspécifie que ce service utilisera l'image Dockernginx:latest. Si l'image n'est pas disponible localement, Docker Compose la téléchargera depuis Docker Hub.ports:mappe le port 80 de la machine hôte vers le port 80 du conteneurweb.
app:définit un service nomméapp.image: ubuntu:latestspécifie que ce service utilisera l'image Dockerubuntu:latest.command: tail -f /dev/nullspécifie la commande à exécuter lors du démarrage du conteneurapp. Cette commande maintient le conteneur en fonctionnement indéfiniment sans quitter.
Enregistrez le fichier en appuyant sur Ctrl + X, puis Y, puis Entrée.
Avant de pouvoir démarrer les services, nous devons nous assurer que les images Docker requises sont disponibles. Bien que Docker Compose télécharge les images si elles ne sont pas présentes, il est bon de les télécharger explicitement au préalable, surtout dans des environnements avec un accès Internet limité ou pour un démarrage plus rapide.
Téléchargeons l'image nginx:latest.
docker pull nginx:latest
Cette commande télécharge l'image nginx:latest depuis Docker Hub.
Ensuite, téléchargeons l'image ubuntu:latest.
docker pull ubuntu:latest
Cette commande télécharge l'image ubuntu:latest depuis Docker Hub.
Vous avez maintenant préparé avec succès un projet Docker Compose simple avec deux services, web et app, et téléchargé les images Docker nécessaires.
Démarrer les services définis dans le fichier Compose
Dans cette étape, nous allons démarrer les services définis dans le fichier docker-compose.yml créé précédemment. Docker Compose fournit une commande simple pour construire, créer et démarrer tous les services de votre configuration.
Assurez-vous d'être dans le répertoire ~/project/my-compose-app où se trouve votre fichier docker-compose.yml.
cd ~/project/my-compose-app
Pour démarrer les services, nous utiliserons la commande docker-compose up. Par défaut, docker-compose up lance les conteneurs au premier plan et affiche les logs de chaque conteneur.
docker-compose up
Lorsque vous exécutez cette commande, Docker Compose va :
- Rechercher le fichier
docker-compose.ymldans le répertoire courant - Construire ou télécharger les images Docker nécessaires pour chaque service si elles ne sont pas déjà disponibles
- Créer et démarrer les conteneurs pour chaque service
- Afficher les logs de tous les conteneurs en cours d'exécution dans votre terminal
Vous verrez une sortie indiquant que les réseaux et conteneurs sont en cours de création et de démarrage. Les logs des conteneurs web (nginx) et app (ubuntu) seront affichés.
Comme nous voulons que les services s'exécutent en arrière-plan pour pouvoir continuer à utiliser le terminal, nous pouvons arrêter l'exécution actuelle en appuyant sur Ctrl + C.
Pour exécuter les services en mode détaché (en arrière-plan), nous pouvons utiliser l'option -d avec la commande docker-compose up.
docker-compose up -d
Cette commande démarrera les services en arrière-plan et affichera les noms des conteneurs créés.
Maintenant que les services s'exécutent en mode détaché, vous pouvez vérifier l'état des conteneurs en cours d'exécution avec la commande docker ps.
docker ps
Vous devriez voir deux conteneurs en cours d'exécution : un pour le service web (basé sur l'image nginx) et un pour le service app (basé sur l'image ubuntu). La sortie affichera des informations sur les conteneurs, y compris leurs ID, images, statut et ports.
Pour vérifier que le service web est accessible, nous pouvons utiliser curl pour accéder au serveur nginx fonctionnant sur le port 80. Comme nous avons mappé le port 80 de l'hôte vers le port 80 du conteneur web, nous pouvons y accéder directement depuis la VM LabEx.
curl http://localhost:80
Vous devriez voir le contenu HTML par défaut servi par le serveur web nginx, ce qui confirme que le service web fonctionne et est accessible.
Arrêter tous les services en cours d'exécution
Dans cette étape, nous allons apprendre comment arrêter tous les services actuellement en cours d'exécution dans le cadre de notre projet Docker Compose. Docker Compose fournit une commande pratique pour arrêter tous les conteneurs définis dans le fichier docker-compose.yml.
Assurez-vous d'être dans le répertoire ~/project/my-compose-app où se trouve votre fichier docker-compose.yml.
cd ~/project/my-compose-app
Pour arrêter tous les services en cours d'exécution, nous utilisons la commande docker-compose down. Cette commande arrête et supprime les conteneurs, réseaux et volumes définis dans le fichier docker-compose.yml.
docker-compose down
Lorsque vous exécutez cette commande, Docker Compose va :
- Arrêter proprement les conteneurs en cours d'exécution
- Supprimer les conteneurs arrêtés
- Supprimer les réseaux créés par Docker Compose pour ce projet
- Supprimer les volumes définis dans le fichier
docker-compose.yml(sauf indication contraire)
Vous verrez une sortie indiquant que les conteneurs et réseaux sont en cours d'arrêt et de suppression.
Après avoir exécuté docker-compose down, vous pouvez vérifier que les conteneurs ne sont plus en cours d'exécution en utilisant la commande docker ps.
docker ps
Cette commande liste les conteneurs actuellement en cours d'exécution. Comme nous avons arrêté tous les services, vous ne devriez pas voir les conteneurs web ou app dans la sortie. La sortie ne devrait afficher que l'en-tête ou être vide si aucun autre conteneur ne fonctionne sur votre système.
L'arrêt des services avec docker-compose down est la méthode standard pour nettoyer les ressources de votre projet Docker Compose lorsque vous avez terminé avec elles.
Arrêter un service spécifique
Dans cette étape, nous allons apprendre comment arrêter un service spécifique au sein de notre projet Docker Compose, plutôt que d'arrêter tous les services simultanément. Cette fonctionnalité est utile lorsque vous avez besoin de redémarrer ou d'arrêter un seul composant de votre application.
Tout d'abord, assurons-nous que nos services sont en cours d'exécution. Accédez au répertoire du projet et démarrez les services en mode détaché.
cd ~/project/my-compose-app
docker-compose up -d
Vérifiez que les services web et app sont bien en cours d'exécution à l'aide de docker ps.
docker ps
Vous devriez voir les deux conteneurs listés comme étant en cours d'exécution.
Maintenant, arrêtons uniquement le service app. Pour arrêter un service spécifique, nous utilisons la commande docker-compose stop suivie du nom du service.
docker-compose stop app
Cette commande enverra un signal d'arrêt au conteneur du service app et attendra qu'il s'arrête proprement.
Après avoir exécuté la commande, vérifions à nouveau l'état des conteneurs.
docker ps
Vous devriez maintenant voir uniquement le conteneur web listé comme étant en cours d'exécution. Le conteneur app ne devrait plus apparaître dans la liste des conteneurs actifs.
Pour confirmer que le conteneur app s'est bien arrêté, vous pouvez également utiliser docker ps -a, qui affiche tous les conteneurs, y compris ceux qui sont arrêtés.
docker ps -a
Vous devriez voir le conteneur app listé avec un statut Exited.
L'arrêt d'un service spécifique vous permet de gérer individuellement les composants de votre application sans affecter les autres. Cette fonctionnalité est particulièrement utile pendant le développement ou lors du dépannage d'un service particulier.
Arrêter les services avec un délai d'attente
Dans cette étape, nous allons explorer comment arrêter les services avec un délai d'attente spécifié. Lorsque vous arrêtez un conteneur, Docker envoie un signal SIGTERM au processus principal du conteneur, lui donnant le temps de s'arrêter proprement. Si le processus ne se termine pas dans un certain délai, Docker envoie un signal SIGKILL pour le forcer à s'arrêter. Par défaut, ce délai est de 10 secondes. Vous pouvez ajuster ce délai en utilisant l'option -t ou --timeout avec les commandes docker-compose stop ou docker-compose down.
Tout d'abord, assurons-nous que nos services sont en cours d'exécution. Accédez au répertoire du projet et démarrez les services en mode détaché.
cd ~/project/my-compose-app
docker-compose up -d
Vérifiez que les deux services sont en cours d'exécution :
docker ps
Maintenant, arrêtons le service web avec un délai d'attente de 5 secondes.
docker-compose stop -t 5 web
Cette commande indique à Docker Compose d'arrêter le service web et d'attendre un maximum de 5 secondes après l'envoi du signal SIGTERM pour que le conteneur s'arrête proprement. Si le conteneur ne s'arrête pas dans les 5 secondes, Docker enverra un signal SIGKILL.
Vous verrez une sortie indiquant que le service web est en cours d'arrêt.
Vérifions à nouveau l'état des conteneurs :
docker ps
Vous devriez maintenant voir uniquement le conteneur app en cours d'exécution. Le conteneur web devrait être arrêté.
De même, vous pouvez appliquer un délai d'attente lors de l'arrêt de tous les services avec docker-compose down. Arrêtons tous les services avec un délai de 3 secondes.
docker-compose down -t 3
Cette commande tentera d'arrêter tous les services définis dans le fichier docker-compose.yml, en attendant un maximum de 3 secondes pour que chaque conteneur s'arrête proprement avant de l'arrêter de force.
Vérifiez qu'aucun conteneur n'est en cours d'exécution après l'exécution de la commande :
docker ps
La sortie ne devrait afficher aucun conteneur en cours d'exécution.
L'utilisation de l'option de délai d'attente est importante pour s'assurer que vos applications disposent de suffisamment de temps pour effectuer des tâches de nettoyage avant d'être arrêtées, évitant ainsi la corruption de données ou d'autres problèmes.
Résumé
Dans ce lab, nous avons appris à préparer un projet simple avec Docker Compose. Cela a impliqué l'installation de Docker Compose en téléchargeant le binaire et en le rendant exécutable, puis en vérifiant l'installation. Nous avons ensuite créé un répertoire de projet et un fichier docker-compose.yml pour définir les services de notre application.
Nous avons également appris à gérer le cycle de vie des services définis dans le fichier Compose en utilisant la commande docker compose stop. Cela incluait le démarrage de tous les services, l'arrêt de tous les services en cours d'exécution, l'arrêt d'un service spécifique et l'arrêt des services avec un délai d'attente spécifié.



