Comment utiliser la commande docker compose pull pour mettre à jour les images de services

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 pull pour mettre à jour les images de services définies dans un fichier compose.yaml. Nous commencerons par préparer un fichier compose.yaml avec des services utilisant des images Docker.

Après la configuration, vous explorerez différentes façons d'utiliser la commande docker compose pull, notamment pour :

  • Tirer (pull) l'image d'un service spécifique
  • Tirer toutes les images de services
  • Tirer les images en ignorant les services pouvant être construits (buildable)
  • Tirer les images silencieusement sans afficher les informations de progression

Cette expérience pratique vous permettra d'acquérir les compétences nécessaires pour gérer et mettre à jour efficacement vos images de services Docker Compose.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/rmi("Remove Image") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/pull -.-> lab-555087{{"Comment utiliser la commande docker compose pull pour mettre à jour les images de services"}} docker/rmi -.-> lab-555087{{"Comment utiliser la commande docker compose pull pour mettre à jour les images de services"}} docker/images -.-> lab-555087{{"Comment utiliser la commande docker compose pull pour mettre à jour les images de services"}} end

Préparer un fichier compose.yaml avec des services utilisant des images

Dans cette étape, nous allons préparer un fichier compose.yaml qui définit des services utilisant des images Docker. Docker Compose est un outil permettant de définir et gérer des applications multi-conteneurs Docker. Bien que Docker soit déjà installé sur la VM LabEx, Docker Compose ne l'est pas. Nous allons d'abord l'installer.

Commencez par installer 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

Maintenant que Docker Compose est installé, vérifions l'installation en contrôlant la version.

docker-compose --version

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

Ensuite, créons un répertoire pour notre projet et accédons-y.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

Nous allons maintenant créer un fichier compose.yaml dans ce répertoire. Ce fichier définira deux services : un service web utilisant l'image nginx et un service de base de données utilisant l'image redis.

nano compose.yaml

Collez le contenu suivant dans le fichier compose.yaml :

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: redis:latest

Enregistrez le fichier et quittez l'éditeur nano (appuyez sur Ctrl + X, puis Y, puis Entrée).

Ce fichier compose.yaml définit deux services :

  • web : Utilise l'image Docker nginx:latest et mappe le port 80 de l'hôte vers le port 80 du conteneur.
  • db : Utilise l'image Docker redis:latest.

Dans les étapes suivantes, nous utiliserons ce fichier compose.yaml pour récupérer les images des services définis.

Télécharger l'image d'un service spécifique avec docker compose pull

Dans cette étape, nous allons apprendre à télécharger l'image d'un service spécifique défini dans notre fichier compose.yaml en utilisant la commande docker compose pull. Cette fonctionnalité est utile lorsque vous souhaitez uniquement mettre à jour ou télécharger l'image d'un seul service sans affecter les autres.

Tout d'abord, assurez-vous de vous trouver dans le répertoire ~/project/my-compose-app où vous avez créé le fichier compose.yaml à l'étape précédente.

cd ~/project/my-compose-app

Maintenant, téléchargeons l'image pour le service web. La commande à utiliser est docker compose pull <nom_du_service>. Dans notre cas, le nom du service est web.

docker compose pull web

Vous verrez une sortie indiquant que Docker Compose est en train de télécharger l'image nginx:latest. Ce processus télécharge les différentes couches de l'image depuis le registre Docker.

Une fois la commande terminée, vous pouvez vérifier que l'image nginx a bien été téléchargée en listant les images Docker disponibles.

docker images

Vous devriez voir nginx apparaître dans la sortie, accompagné de son tag (latest), de son ID, de sa date de création et de sa taille.

Cette démonstration montre comment télécharger sélectivement l'image d'un service spécifique défini dans votre fichier compose.yaml. Dans l'étape suivante, nous téléchargerons les images pour tous les services.

Télécharger toutes les images de services définies dans le fichier compose.yaml

Dans cette étape, nous allons apprendre à télécharger les images pour tous les services définis dans notre fichier compose.yaml en utilisant la commande docker compose pull sans spécifier de noms de services. Ceci représente le comportement par défaut de docker compose pull lorsqu'aucun nom de service n'est fourni.

Commencez par vous assurer que vous êtes dans le répertoire ~/project/my-compose-app.

cd ~/project/my-compose-app

Maintenant, exécutez la commande docker compose pull sans aucun argument.

docker compose pull

Cette commande va lire le fichier compose.yaml et télécharger les images pour tous les services qui y sont définis. Comme nous avons déjà téléchargé l'image nginx à l'étape précédente, Docker Compose vérifiera si l'image est à jour. Il procédera ensuite au téléchargement de l'image redis:latest, qui n'a pas encore été récupérée.

Vous verrez une sortie indiquant le processus de téléchargement pour l'image redis.

Une fois la commande terminée, vous pouvez vérifier que les images nginx et redis ont bien été téléchargées en listant les images Docker disponibles.

docker images

Vous devriez maintenant voir à la fois nginx et redis apparaître dans la sortie.

Cette démonstration montre comment télécharger facilement toutes les images nécessaires pour votre application multi-conteneurs avec une seule commande.

Télécharger les images de services en ignorant les services "buildables"

Dans cette étape, nous allons explorer comment utiliser le flag --ignore-buildable avec docker compose pull. Ce flag est utile lorsque votre fichier compose.yaml contient à la fois des services construits à partir d'un Dockerfile (services "buildables") et des services utilisant des images pré-construites. Le flag --ignore-buildable indique à Docker Compose de ne télécharger que les images des services spécifiant une clé image, en ignorant ceux avec une clé build.

Commencez par modifier notre fichier compose.yaml pour y inclure un service "buildable". Nous ajouterons un service simple construisant une image basique.

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

cd ~/project/my-compose-app

Créez maintenant un Dockerfile simple pour notre service "buildable".

nano Dockerfile

Collez le contenu suivant dans le Dockerfile:

FROM alpine:latest
CMD ["echo", "Hello from buildable service!"]

Enregistrez le fichier et quittez l'éditeur nano.

Modifiez ensuite le fichier compose.yaml pour ajouter un nouveau service utilisant ce Dockerfile.

nano compose.yaml

Ajoutez la définition de service suivante à votre fichier compose.yaml, après le service db:

builder:
  build: .

Votre fichier compose.yaml complet devrait maintenant ressembler à ceci:

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: redis:latest
  builder:
    build: .

Enregistrez le fichier et quittez l'éditeur nano.

Essayons maintenant de télécharger les images avec docker compose pull --ignore-buildable.

docker compose pull --ignore-buildable

Vous observerez que Docker Compose vérifie les services web et db et télécharge leurs images si nécessaire (elles devraient déjà être présentes des étapes précédentes). Cependant, il ignorera le service builder car il utilise la clé build au lieu de la clé image. Vous ne verrez aucune sortie concernant la construction ou le téléchargement d'une image pour le service builder.

Pour confirmer qu'aucune image n'a été construite ou téléchargée pour le service builder, listez vos images Docker.

docker images

Vous devriez toujours voir uniquement les images nginx et redis. Aucune nouvelle image n'aura été créée à partir du Dockerfile par cette commande.

Cette démonstration montre comment le flag --ignore-buildable permet de sélectivement télécharger uniquement les images pré-construites, ce qui peut être utile dans divers scénarios de développement et de déploiement.

Télécharger les images de services en mode silencieux sans information de progression

Dans cette étape, nous allons apprendre à télécharger les images de services sans afficher les informations détaillées de progression en utilisant le flag --quiet ou -q avec docker compose pull. Ceci est utile lorsque vous souhaitez réduire la quantité de sortie dans votre terminal, par exemple dans des scripts ou des workflows automatisés.

Commencez par vous assurer que vous êtes dans le répertoire ~/project/my-compose-app.

cd ~/project/my-compose-app

Utilisons maintenant la commande docker compose pull --quiet pour télécharger les images. Comme les images pour web et db sont probablement déjà présentes des étapes précédentes, Docker Compose vérifiera si elles sont à jour. Si c'est le cas, la commande se terminera rapidement avec un minimum de sortie. Si une image devait être téléchargée, vous ne verriez pas les barres de progression habituelles ni les informations sur les couches.

docker compose pull --quiet

Vous remarquerez que la sortie est nettement moins verbeuse comparée à l'exécution de docker compose pull sans le flag --quiet. Vous pourriez voir des messages indiquant que les images sont déjà à jour, mais vous ne verrez pas le détail de la progression du téléchargement pour chaque couche.

Pour démontrer l'effet plus clairement, supprimons d'abord une des images puis téléchargeons-la en mode silencieux. Nous allons supprimer l'image redis.

docker rmi redis:latest

Maintenant, téléchargez à nouveau les images en utilisant le flag --quiet.

docker compose pull --quiet

Cette fois, l'image redis sera téléchargée, mais vous ne verrez pas la progression détaillée. La sortie sera minimale, confirmant que l'opération de téléchargement se déroule sans le retour visuel habituel.

Vous pouvez vérifier que l'image redis a bien été téléchargée à nouveau en listant les images Docker.

docker images

Vous devriez voir à la fois nginx et redis listés.

Le flag --quiet est un moyen simple mais efficace de contrôler la verbosité de la commande docker compose pull, la rendant adaptée aux environnements où une sortie détaillée n'est pas souhaitée.

Résumé

Dans ce lab, nous avons appris à utiliser la commande docker compose pull pour mettre à jour les images des services. Nous avons commencé par préparer un fichier compose.yaml définissant des services avec des images Docker spécifiques, y compris l'installation de Docker Compose lui-même.

Ensuite, nous avons exploré :

  • Le téléchargement d'images pour des services individuels
  • Le téléchargement de tous les services définis dans le fichier
  • L'utilisation d'options pour ignorer les services "buildables"
  • La suppression des informations de progression pour un processus de téléchargement plus silencieux