Faire persister les données d'un conteneur

La couche inscriptible éphémère et les trois montages (volume nommé, montage lié, tmpfs) ; les options -v et --mount ; les commandes docker volume ; ce qui survit à stop, à rm et à une nouvelle image.

  • 24 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. Comprendre

Quelques cartes du deck

  • Couche inscriptible : de quoi s'agit-il ?

    Voir la réponse

    Espace propre à un conteneur où vont tous les fichiers qu'il écrit hors d'un montage ; elle est détruite avec lui.

    Elle survit à docker stop puis docker start, mais pas à docker rm. Écrire dedans est aussi plus lent qu'écrire dans un volume.

  • On écrit a.txt dans /data (volume nommé), b.txt dans /tmp et c.txt dans /src (montage lié). On lance docker rm puis docker run avec les mêmes montages. Quels fichiers sont encore là ?

    • a.txt et c.txt
    • a.txt seulement
    • a.txt, b.txt et c.txt
    • b.txt et c.txt
    Voir la réponse

    a.txt et c.txt

    /tmp est dans la couche inscriptible, supprimée avec le conteneur. Le volume nommé vit en dehors du conteneur, et le montage lié est un dossier de l'hôte : ni l'un ni l'autre n'est touché par docker rm.

  • Dans -v pgdata:/var/lib/postgresql/data, pgdata est le nom du … et /var/lib/postgresql/data le chemin où il apparaît ….

    Voir la réponse

    Dans -v pgdata:/var/lib/postgresql/data, pgdata est le nom du volume et /var/lib/postgresql/data le chemin où il apparaît dans le conteneur.

    Quand la partie gauche est un nom, c'est un volume nommé ; quand elle commence par / ou ./, c'est un montage lié vers l'hôte.

  • Volume nommé : de quoi s'agit-il ?

    Voir la réponse

    Espace de stockage créé et géré par Docker, désigné par un nom, qui vit indépendamment de tout conteneur.

    Docker le range dans son propre dossier (/var/lib/docker/volumes/...) : on n'a pas à choisir de chemin sur l'hôte. C'est le choix standard pour les données d'une base.

  • Un conteneur postgres:16 est lancé sans option -v. Après chaque mise à jour de l'image, la base est vide. Quelle est la cause probable, et la solution ?

    • La nouvelle image écrase les tables au démarrage ; figer l'étiquette de l'image sur latest
    • Le démon Docker supprime les bases après une mise à jour ; désactiver la mise à jour automatique
    • Les données restent attachées à l'ancien conteneur ; monter un volume nommé sur le dossier de données
    • Le port de la base n'est pas publié ; ajouter l'option -p 5432:5432
    Voir la réponse

    Les données restent attachées à l'ancien conteneur ; monter un volume nommé sur le dossier de données

    Mettre à jour l'image oblige à recréer le conteneur. Sans -v, l'image postgres:16 range ses données dans un volume anonyme propre à l'ancien conteneur, que le nouveau ne reprend pas : il repart d'une base vide. Un volume nommé sur /var/lib/postgresql/data est rattaché à chaque nouveau conteneur.