Docker Compose est un puissant outil d’orchestration conçu pour simplifier la gestion et le déploiement d’applications multi-conteneurs à l’aide de Docker. Le fichier docker-compose.yml rationalise le déploiement en définissant des applications complexes avec plusieurs services, réseaux et volumes dans un seul fichier. L’un des aspects essentiels du travail avec Docker Compose est la gestion des données persistantes à l’aide de volumes.

Cet article explore l’importance de l’utilisation des volumes dans Docker Compose pour gérer les données persistantes et fournit un guide pratique pour utiliser les volumes de manière efficace.

Que sont les volumes Docker ?

Les volumes Docker sont un composant crucial de l’écosystème qui stocke et gère les données persistantes générées par les conteneurs éphémères. Ils permettent aux données de persister même après le retrait ou la mise à jour d’un conteneur afin que les données essentielles de l’application ne soient pas perdues pendant les opérations de routine.

Les volumes sont découplés du système de fichiers du conteneur, de sorte que vous pouvez facilement les sauvegarder, les partager entre plusieurs conteneurs et les migrer entre les hôtes.

L’un des principaux avantages de l’utilisation de volumes par rapport aux montages bind, qui sont des montages de répertoires du système hôte vers un conteneur, est la portabilité. Vous pouvez rapidement déplacer des volumes entre différents hôtes ou conteneurs, alors que vous devez lier les montages bind à un répertoire spécifique sur le système hôte.

Cette portabilité permet une gestion plus souple et plus efficace des données dans les applications basées sur des conteneurs. Les volumes sont également compatibles avec différents pilotes de stockage, ce qui vous permet de choisir la meilleure solution de stockage pour votre cas d’utilisation spécifique.

Types de volumes Docker

Les volumes Docker sont essentiels à la gestion des données dans les applications basées sur des conteneurs. Il en existe deux types distincts : les volumes nommés et les volumes anonymes. Cette section examine les principales différences entre les deux types et montre comment les mettre en œuvre pour gérer les données dans vos applications.

Les volumes nommés et anonymes ont des objectifs différents et offrent des capacités de contrôle et de gestion variées. Bien que les volumes nommés soient généralement préférés dans la plupart des cas d’utilisation en raison de leurs identifiants lisibles par l’homme et de leur facilité de gestion, il est essentiel de comprendre le fonctionnement des deux types de volumes afin d’en optimiser les avantages.

Volumes nommés

Les volumes nommés portent un nom défini par l’utilisateur, ce qui facilite leur identification, leur gestion et leur partage entre plusieurs conteneurs. Docker crée et gère des volumes nommés et stocke leurs données dans un emplacement spécifique sur le système hôte. Cet emplacement se trouve généralement dans le répertoire d’installation de Docker sous un ID unique correspondant au nom du volume.

Les volumes nommés offrent un meilleur contrôle et une plus grande flexibilité, car vous pouvez facilement les référencer et les manipuler à l’aide de leur identifiant lisible par l’homme.

Pour créer un volume nommé dans Docker, exécutez :

docker volume create my_named_volume

Volumes anonymes

Contrairement aux volumes nommés, les volumes anonymes n’ont pas de nom défini par l’utilisateur. Au lieu de cela, Docker les crée automatiquement lorsque vous créez un conteneur et attribue un identifiant unique au volume.

Il est généralement plus difficile de gérer et de stocker des volumes en raison de l’absence d’un identifiant lisible par l’homme. Comme Docker les crée automatiquement, il est courant d’utiliser des volumes anonymes pour le stockage temporaire. Ils peuvent également apparaître si vous ne spécifiez pas de volume nommé lors de la création d’un conteneur.

Pour créer un conteneur avec un volume anonyme, exécutez :

docker run -v /data nginx

Cette commande monte un volume anonyme dans le répertoire /data à l’intérieur du conteneur nginx. Vous pouvez remplacer nginx par le nom du conteneur dans lequel vous montez le volume.

Comment créer et gérer des volumes avec Docker Compose

Docker Compose simplifie la création et la gestion des volumes en vous permettant de les définir dans le fichier docker-compose.yml. Ce fichier contient la configuration des services, des réseaux et des volumes de votre application, ce qui permet de gérer facilement les ressources de votre application en un seul endroit.

1. Définir des volumes dans Docker Compose

Pour créer un volume nommé dans le fichier docker-compose.yml, définissez-le sous la clé volumes. Vous pouvez également spécifier le pilote de volume et les options si nécessaire.

2. Monter des volumes sur des conteneurs

Pour attacher un volume à un conteneur, utilisez la clé volumes dans la définition service du fichier docker-compose.y ml. Spécifiez le nom du volume suivi de deux points et le chemin du conteneur où vous souhaitez monter le volume.

Vous pouvez également partager des volumes entre plusieurs conteneurs en utilisant le même nom de volume.

Voici un exemple de création de volumes nommés web_data et db_data dans votre fichier docker-compose.y ml :

version: '3.8'
services:
  web:
    image: nginx
    volumes:
      - web_data:/var/www/html
  web-test:
    image: nginx
    volumes:
      - web_data:/var/www/html # Web and web test share the web_data volume
  db:
    image: mysql
    volumes:
      - db_data:/var/lib/mysql
volumes:
  web_data:
  db_data:
    driver: local # Define the driver and options under the volume name
    driver_opts:
      type: none
      device: /data/db_data
      o: bind

Cet exemple définit deux volumes nommés. Il monte ensuite les volumes dans leurs conteneurs respectifs sous des chemins spécifiques. Ensuite, il monte le volume web_data dans le répertoire /var/www/html dans le conteneur web et le volume db_data dans le répertoire /var/lib/mysql dans le conteneur db.

Les conteneurs web et web-test partagent le volume web_data, ce qui leur permet d’accéder au même volume de données et de le modifier.

En définissant et en gérant les volumes dans le fichier docker-compose.yml, vous pouvez facilement créer, mettre à jour et supprimer des volumes selon vos besoins sans les gérer manuellement à l’aide des commandes Docker. Ce processus rationalisé vous permet de vous concentrer sur le développement et le déploiement de votre application pendant que Docker Compose s’occupe de la gestion des ressources sous-jacentes.

Comment travailler avec Docker Compose et les commandes de volume

Docker Compose fournit plusieurs commandes qui vous aident à gérer efficacement votre application et ses ressources. Examinons plus en détail ces commandes et la manière dont elles sont liées aux volumes :

  • docker compose up crée et démarre votre application, y compris ses services, ses réseaux et ses volumes. Si vous définissez un volume nommé dans le fichier docker-compose.yml avant qu’il n’existe, cette commande le créera automatiquement.
  • docker compose down arrête et supprime les services et les réseaux de votre application. Par défaut, elle ne supprime pas les volumes nommés. Pour supprimer les volumes nommés, utilisez le drapeau --volumes ou -v.
  • docker compose ps répertorie les conteneurs et leur état actuel, y compris les informations relatives aux volumes.
  • docker compose config valide et affiche la configuration effective générée à partir du fichier docker-compose.yml, y compris les définitions de volume.

Lister les volumes

Pour lister tous les volumes, utilisez ls:

docker volume ls

La sortie affiche tous les volumes nommés, y compris ceux créés par Docker Compose.

Inspecter les volumes

Pour afficher les détails d’un volume spécifique, utilisez inspect . Il fournit des informations sur le volume, telles que son nom, son pilote, son point de montage et ses options :

docker volume inspect db_data

Les détails du volume sont donnés au format JSON. Par exemple, si l’on considère le fichier docker-compose.yml fourni ci-dessus, voici le résultat obtenu :

[
    {
        "CreatedAt": "some-date-here",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/path/on/host/where/volume/is/mounted",
        "Name": "db_data",
        "Options": {
            "device": "/data/db_data",
            "o": "bind",
            "type": "none"
        },
        "Scope": "local",
        "Status": {
            "Mounts": [
                ...
            ]
        }
    }
]

Supprimer un volume Docker par nom

Pour supprimer un volume Docker, vous pouvez utiliser docker volume rm suivi du nom du volume :

docker volume rm volume-name

Nettoyer les volumes inutilisés

Pour supprimer des volumes inutilisés, utilisez prune:

docker volume prune

Cette commande permet de nettoyer votre environnement de développement et de récupérer de l’espace de stockage. Elle supprime tous les volumes inutilisés non associés à des conteneurs, y compris ceux créés par Docker Compose.

En tirant parti de ces commandes et de leurs fonctionnalités liées aux volumes, vous pouvez gérer efficacement les ressources de votre application, en garantissant des performances optimales et une utilisation efficace de l’espace de stockage.

Versions de Docker Compose

Depuis juillet 2023, Docker Compose V1 ne reçoit plus de mises à jour. Il n’est également plus disponible dans les nouvelles versions de Docker Desktop. Cependant, Docker Desktop continue de prendre en charge un alias docker-compose pour rediriger les commandes vers docker compose pour plus de commodité et une meilleure compatibilité avec les outils et les scripts tiers.

Pour faire passer un code existant de Docker Compose version 1 à 2, remplacez simplement le tiret par un espace. Par exemple, docker-compose up devient docker compose up.

Avec la version 2, vous pouvez utiliser la commande &compose directement dans l’interface de ligne de commande (CLI) de Docker, changer le contexte Docker pour construire un conteneur sur un service cloud et utiliser Amazon ECS et Microsoft ACI.

Résumé

Cet article a mis en évidence l’importance de l’utilisation des volumes avec Docker Compose pour la gestion des données persistantes. Les volumes sont un composant crucial de l’écosystème Docker, vous permettant de stocker et de gérer les données générées par les conteneurs Docker. Avec les volumes Docker, les données d’application importantes persistent même après la suppression ou la mise à jour d’un conteneur, ce qui permet de maintenir l’intégrité et la cohérence de votre application.

Docker Compose offre une approche rationalisée de la création et de la gestion des volumes dans le fichier docker-compose.yml. Cette méthode simplifie votre processus de développement et garantit une utilisation efficace des ressources.

L’utilisation de volumes rend également le développement flexible et efficace, Docker Compose fournissant diverses commandes liées aux volumes pour vous aider à superviser efficacement les ressources de l’application. L’utilisation de ces commandes vous permet de créer, d’inspecter et de nettoyer facilement les volumes.

Lorsque vous hébergez votre application chez Kinsta, vous disposez d’une infrastructure rapide, sécurisée et fiable, vos projets étant déployés sur le Premium Tier Network et les machines C2 de Google Cloud Platform. Choisissez entre les 37 centres de données et un CDN compatible HTTP/3 avec 260+ PoP.

Restez en sécurité grâce à la technologie des conteneurs isolés, à deux pare-feu puissants et à une protection DDoS avancée alimentée par Cloudflare. Vous pouvez également intégrer des applications ou automatiser des flux de travail avec l’API Kinsta et les déployer avec Docker.

Kinsta fournit des ressources et du contenu de haute qualité pour les développeurs web, y compris des tutoriels et des guides approfondis pour différents langages et des outils comme Docker Compose. Lisez notre contenu spécifique à Docker sur le blog de Kinsta pour en savoir plus sur Docker.

Marcia Ramos Kinsta

I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 7 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.