Comment utiliser la commande docker compose pause pour mettre des services en pause

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce lab, vous apprendrez à utiliser la commande docker compose pause pour suspendre temporairement les services en cours d'exécution définis dans un fichier docker-compose.yml. Nous commencerons par créer un simple fichier docker-compose.yml définissant un service web utilisant l'image Nginx.

Après la création du fichier docker-compose.yml, vous apprendrez à démarrer les services avec docker compose up, mettre en pause un service spécifique en cours d'exécution avec docker compose pause, vérifier que le service est bien en pause, et enfin, reprendre le service avec docker compose unpause. Cet exercice pratique vous permettra d'acquérir une expérience concrète dans la gestion du cycle de vie des services Docker Compose.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555084{{"Comment utiliser la commande docker compose pause pour mettre des services en pause"}} docker/ps -.-> lab-555084{{"Comment utiliser la commande docker compose pause pour mettre des services en pause"}} docker/inspect -.-> lab-555084{{"Comment utiliser la commande docker compose pause pour mettre des services en pause"}} docker/pull -.-> lab-555084{{"Comment utiliser la commande docker compose pause pour mettre des services en pause"}} end

Créer un fichier docker-compose.yml simple

Dans cette étape, nous allons créer un fichier docker-compose.yml simple. Avant de commencer, nous devons installer Docker Compose. 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.

Tout d'abord, installons Docker Compose. Nous allons télécharger le binaire Docker Compose et le rendre exécutable.

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
sudo chmod +x /usr/local/bin/docker-compose

Après l'installation, vous pouvez vérifier celle-ci en consultant la version de Docker Compose.

docker-compose --version

Vous devriez voir une sortie similaire à Docker Compose version v2.20.2.

Maintenant, créons un répertoire pour notre projet et naviguons dedans.

mkdir my-docker-app
cd my-docker-app

Dans le répertoire my-docker-app, nous allons créer un fichier nommé docker-compose.yml. Ce fichier définira les services de notre application. Nous utiliserons l'éditeur nano pour créer et modifier ce fichier.

nano docker-compose.yml

Dans l'éditeur nano, collez le contenu suivant. Ce fichier docker-compose.yml définit un seul service nommé web qui utilise l'image nginx:latest.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Décomposons ce fichier :

  • version: '3.8' spécifie la version du format de fichier Docker Compose.
  • services: définit les services qui composent votre application.
  • web: est le nom de notre service.
  • image: nginx:latest spécifie l'image Docker à utiliser pour ce service. Dans ce cas, nous utilisons la dernière version de l'image Nginx.
  • ports: mappe les ports entre l'hôte et le conteneur. "80:80" mappe le port 80 de l'hôte vers le port 80 du conteneur.

Après avoir collé le contenu, enregistrez le fichier en appuyant sur Ctrl + X, puis Y, et enfin Entrée.

Avant de démarrer le service, nous devons nous assurer que l'image nginx:latest est disponible localement. Si ce n'est pas le cas, Docker Compose la téléchargera automatiquement lorsque vous démarrerez le service. Cependant, vous pouvez également télécharger l'image manuellement à l'aide de la commande docker pull.

docker pull nginx:latest

Cette commande télécharge l'image nginx:latest depuis Docker Hub.

Démarrer les services définis dans docker-compose.yml

Dans cette étape, nous allons démarrer les services définis dans notre fichier docker-compose.yml. Nous utiliserons la commande docker-compose up pour construire, créer et démarrer les services.

Assurez-vous d'être dans le répertoire ~/project/my-docker-app où vous avez créé le fichier docker-compose.yml à l'étape précédente.

cd ~/project/my-docker-app

Maintenant, exécutez la commande suivante pour démarrer les services. Le drapeau -d exécute les conteneurs en mode détaché, ce qui signifie qu'ils fonctionneront en arrière-plan.

docker-compose up -d

Cette commande lira le fichier docker-compose.yml, créera les conteneurs nécessaires basés sur les définitions de service et les démarrera. Si l'image nginx:latest n'est pas déjà présente sur votre système, Docker Compose la téléchargera automatiquement avant de démarrer le conteneur.

Vous devriez voir une sortie indiquant que le réseau, le volume (le cas échéant) et le conteneur de service sont en cours de création et de démarrage. Par exemple :

[+] Running 1/1
 ⠿ Container my-docker-app-web-1  Started

Pour vérifier que le service fonctionne, vous pouvez utiliser la commande docker-compose ps. Cette commande liste les conteneurs gérés par Docker Compose dans le répertoire courant.

docker-compose ps

Vous devriez voir une sortie similaire à celle-ci, montrant le conteneur du service web avec un état running :

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       2 minutes ago  running       0.0.0.0:80->80/tcp, :::80->80/tcp

Vous pouvez également vérifier que le serveur web Nginx est accessible en utilisant la commande curl pour accéder à localhost sur le port 80.

curl localhost:80

Vous devriez voir le code HTML de la page d'accueil par défaut de Nginx, indiquant que le serveur web fonctionne et est accessible.

Mettre en pause un service en cours d'exécution

Dans cette étape, nous allons mettre en pause le conteneur du service web en cours d'exécution. Mettre un conteneur en pause suspend tous ses processus. Cela diffère de l'arrêt d'un conteneur qui termine ses processus. Lorsqu'un conteneur est en pause, son état est figé et il consomme un minimum de ressources CPU.

Assurez-vous d'être dans le répertoire ~/project/my-docker-app.

cd ~/project/my-docker-app

Pour mettre en pause le service web, utilisez la commande docker-compose pause suivie du nom du service.

docker-compose pause web

Vous devriez voir une sortie indiquant que le service est mis en pause :

[+] Paused 1/1
 ⠿ Container my-docker-app-web-1  Paused

Vérifions maintenant l'état du service avec docker-compose ps.

docker-compose ps

La sortie devrait afficher le conteneur du service web avec l'état paused :

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       5 minutes ago  paused        0.0.0.0:80->80/tcp, :::80->80/tcp

Lorsqu'un conteneur est en pause, il ne devrait pas pouvoir répondre aux requêtes. Essayons d'accéder à nouveau au serveur web Nginx avec curl.

curl localhost:80

Cette commande peut se bloquer ou retourner une erreur, confirmant que le service ne répond pas car il est en pause. Cela valide que les processus du conteneur sont bien suspendus.

Vérifier que le service est en pause

Dans cette étape, nous allons vérifier explicitement que le conteneur du service web est bien dans un état de pause. Bien que nous ayons vérifié le statut avec docker-compose ps à l'étape précédente, il est recommandé de confirmer cet état en utilisant directement les commandes Docker.

Tout d'abord, assurez-vous d'être dans le répertoire ~/project/my-docker-app.

cd ~/project/my-docker-app

Nous pouvons utiliser la commande docker ps pour lister tous les conteneurs en cours d'exécution (y compris ceux en pause). Nous filtrerons la sortie pour trouver notre conteneur de service web et vérifier son statut.

docker ps --filter "name=my-docker-app-web-1"

La sortie de cette commande devrait afficher le conteneur avec la colonne STATUS indiquant Paused.

Alternativement, vous pouvez utiliser la commande docker inspect pour obtenir des informations détaillées sur le conteneur, y compris son état. Nous utiliserons grep pour rechercher spécifiquement l'état "Paused" dans la sortie.

docker inspect my-docker-app-web-1 | grep Paused

Cette commande devrait afficher une ligne similaire à "Paused": true,, confirmant que le conteneur est bien en pause.

Comme démontré à l'étape précédente, toute tentative d'accès au service via curl devrait échouer ou se bloquer, indiquant ainsi que le conteneur ne traite pas activement les requêtes.

curl localhost:80

Cette commande ne devrait pas retourner la page d'accueil de Nginx.

Reprendre le service en pause

Dans cette étape, nous allons reprendre le conteneur du service web que nous avions mis en pause précédemment. Reprendre un conteneur relance tous les processus qui avaient été suspendus lors de la mise en pause.

Assurez-vous d'être dans le répertoire ~/project/my-docker-app.

cd ~/project/my-docker-app

Pour reprendre le service web, utilisez la commande docker-compose unpause suivie du nom du service.

docker-compose unpause web

Vous devriez voir une sortie indiquant que le service est repris :

[+] Unpaused 1/1
 ⠿ Container my-docker-app-web-1  Unpaused

Vérifions à nouveau le statut du service avec docker-compose ps.

docker-compose ps

La sortie devrait maintenant afficher le conteneur du service web avec l'état running :

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       8 minutes ago  running       0.0.0.0:80->80/tcp, :::80->80/tcp

Le conteneur étant maintenant en cours d'exécution, il devrait pouvoir répondre aux requêtes. Essayons d'accéder au serveur web Nginx avec curl.

curl localhost:80

Vous devriez maintenant voir la page d'accueil par défaut de Nginx en sortie HTML, confirmant que le service est à nouveau opérationnel et accessible.

Pour terminer, afin de nettoyer les ressources créées pendant ce lab, vous pouvez arrêter et supprimer les conteneurs, réseaux et volumes définis dans le fichier docker-compose.yml avec la commande docker-compose down.

docker-compose down

Cette commande arrêtera les conteneurs en cours d'exécution et supprimera les conteneurs, réseaux et volumes.

Résumé

Dans ce lab, nous avons appris à utiliser la commande docker compose pause pour gérer l'état des services définis dans un fichier docker-compose.yml. Nous avons commencé par installer Docker Compose et créer un fichier docker-compose.yml simple définissant un service web utilisant l'image Nginx.

Après la configuration, nous avons démarré le service avec docker compose up -d, mis en pause le service en cours d'exécution avec docker compose pause web, vérifié son état de pause, et finalement repris le service avec docker compose unpause web. Cette expérience pratique a démontré l'application concrète des commandes pause et unpause pour suspendre et reprendre temporairement des services Docker Compose.