Fermer

mars 4, 2021

Docker Bootcamp – Stockage persistant


Bienvenue dans ma série Docker Bootcamp. Dans le premier article, j'ai couvert l'arrière-plan et l'installation de Docker et dans le suivant, j'ai examiné la terminologie Docker et a donné des exemples à tester. Dans cet article, je vais vous montrer comment stocker des données persistantes en dehors de vos conteneurs et injecter des données dans un conteneur.

  • Bind Volume – Connecté à un fichier ou un répertoire spécifié par l'utilisateur sur le système hôte. Utile pour partager des données entre le système hôte et le conteneur et vice versa. Lie un conteneur portable à un chemin connu sur le système hôte. Peut provoquer un conflit si plusieurs conteneurs tentent d'écrire sur le même volume de liaison.
  • Volume géré – Connecté à un emplacement géré par Docker. Garde un conteneur portable car il ne nécessite aucune connaissance du système hôte. Nécessite une diligence supplémentaire lors du retrait des conteneurs pour s'assurer que le volume est supprimé.
  • Montage – Processus du système d'exploitation qui met un périphérique de stockage de données (lecteur flash, stockage réseau, lecteur optique) à la disposition du système.
  • Point de montage – Un répertoire où le contenu d'un périphérique monté sera affiché.
  • Union File System – Toutes les couches d'une image empilées les unes sur les autres. Le conteneur voit la combinaison de toutes les couches. Facilite l'ajout de modifications par-dessus une image de base. Seule la couche supérieure est accessible en écriture par le conteneur.
  • Volume – Une connexion entre un conteneur et le système de fichiers hôte où les données persistantes peuvent être stockées sur l'hôte et partagées entre les conteneurs.
  • Volume Container – Un modèle d'utilisation où un conteneur fournit simplement une poignée à un volume.
  • create – Créer un nouveau conteneur à l'état arrêté
  • rm – Supprimer un conteneur
  • volume – Gérer les volumes
  • volume inspect – Afficher les détails d'un volume
  • volume ls – Lister les volumes
  • volume rm – Supprimer un volume

Vous pouvez trouver une liste complète des commandes et tous les indicateurs disponibles sur https://docs.docker.com/engine/reference/commandline/docker/ .

create

docker create [options] image [command] [args…]
Outputs: ContainerID

–volume -v O Monter un volume
–volumes-from O Monter les volumes définis sur le conteneur répertorié
  • Créer un lier le volume de montage
    • -v :
    • Le chemin de votre hôte doit être un chemin absolu
      • Vous pouvez utiliser $ PWD et $ PWD / path si vous exécutez la commande docker à partir du chemin souhaité sur l'hôte
  • Créer un volume géré par docker
    • -v
  • Créer un volume en lecture seule
    • -v : ro
  • Lors de l'utilisation de l'indicateur volumes-from
    • Vous ne pouvez pas modifier les points de montage de volume à partir du conteneur source
    • Vous ne pouvez pas modifier les autorisations d'écriture de volume à partir du conteneur source
    • Tous les volumes définis sur le conteneur seront inclus
    • Vous pouvez créer un conteneur à l'aide du indicateur volumes-from plusieurs fois
      • Attention aux conflits de volume

rm

docker rm [options] container [container…]

–volumes -v O Supprimez tous les volumes associés au conteneur

volume inspect

docker volume inspect volume_name

volume ls

docker volume ls

Stockage de conteneurs

  • Créer un conteneur interactif
    • docker create -it –name bbtest busybox / bin / sh
      • Notez l'identifiant du conteneur
  • Démarrez le conteneur
  • Créer un fichier
    • cd home
    • touch test.txt
    • ls
    • quitter
      • Quitter et arrêter le conteneur
  • Démarrer le conteneur
  • Vérifier les sorties de fichier
    • accueil cd
    • ls
    • quitter
      • Sortir et arrêter le conteneur
  • Retirer le conteneur
  • Créer un conteneur interactif
    • docker -it –nom bbtest2 busybox / bin / sh
      • Notez que l'identifiant du conteneur est différent de celui d'avant
  • Démarrer le conteneur
  • Voir si le fichier existe
    • accueil cd
    • ls
      • Voir le fichier n'existe pas
    • exit
      • Sortir et arrêter le conteneur
  • Retirer le conteneur

Chaque fois qu'un conteneur est créé, l'image est installée dans le conteneur vide. Seuls les fichiers qui font partie de l'image sont inclus dans le conteneur nouvellement créé. Vous pouvez créer des fichiers à l'intérieur du conteneur. Les fichiers créés resteront dans le conteneur après un certain nombre d'arrêts et de démarrages. Ils seront définitivement perdus lorsque le conteneur sera retiré.

Fixation de la monture

  • Créez un dossier sur l'hôte pour servir de volume de données
  • Créez un fichier texte dans le dossier de données hôte et entrez du contenu dans le fichier
  • Créer, démarrer et exécuter un conteneur interactif avec un volume
    • docker run -it –name bindmount -v data: / home busybox / bin / sh
  • Validez que le fichier existe dans le conteneur
    • accueil cd
    • ls
    • chat hostfile.txt
      • Afficher le contenu du fichier
  • Créer un nouveau fichier
  • Afficher le dossier de données sur l'hôte
    • Vérifiez que containerfile.txt est créé sur l'hôte
  • Arrêtez le conteneur
  • Retirez le conteneur
  • Afficher le dossier de données hôte
    • Validez que les fichiers n'ont pas été supprimés
  • Créez, démarrez et exécutez un nouveau conteneur avec le même volume qu'auparavant
    • Docker run -it –name bindmount -v data: / home busybox / bin / sh
  • Validez que les fichiers existent dans le conteneur
    • accueil cd
    • ls
      • Vérifiez que les deux fichiers existent
  • Mettez à jour le fichier containerfile.txt à partir de l'hôte
    • Modifier data containerfile.txt
  • Afficher le fichier modifié dans le conteneur
  • Créer un fichier sur l'hôte
    • data hostfile2.txt
  • Validez que le fichier existe dans le conteneur
  • Arrêtez le conteneur
  • Retirez le conteneur

En utilisant un montage de liaison, vous pouvez injecter des dossiers et des fichiers dans votre conteneur au démarrage ainsi que conserver les fichiers après la suppression d'un conteneur. Le conteneur et l'hôte sont tous deux conscients des modifications apportées au volume en temps réel. Il n'est pas nécessaire de redémarrer le conteneur pour actualiser le contenu du volume. Il y a plusieurs choses à retenir lors de l'utilisation de montages de liaison:

  • Le chemin de l'hôte doit être un chemin absolu
  • Si le chemin n'existe pas sur l'hôte, docker supposera qu'il s'agit d'un dossier et le créera pour vous
    • Il n'est pas recommandé de s'appuyer sur cette fonctionnalité
  • Vous pouvez lier monter un dossier
    • Si le dossier n'existe pas dans le conteneur, il sera disponible au point de montage défini
    • Si le dossier existe déjà dans le conteneur, il sera remplacé par le contenu du volume
  • Vous pouvez lier monter un fichier individuel
    • Si le fichier n'existe pas dans le conteneur, il sera disponible au point de montage défini
      • Si le point de montage est un répertoire, le fichier sera ajouté aux autres fichiers du répertoire
    • Si le fichier existe déjà dans le conteneur, il sera remplacé par le contenu du volume
  • Réutilisation du le même volume de montage de liaison dans plusieurs conteneurs en même temps peut provoquer des conflits

Managed Volume

  • Créer, démarrer et exécuter un conteneur interactif avec un volume géré
    • docker run -it –name géré -v / data busybox / bin / sh
  • Créer un nouveau fichier
    • données cd
    • touch managedfile.txt
    • ls
  • Arrêtez le conteneur
  • Afficher les détails du conteneur
    • docker inspect géré
      • Notez le nom et les propriétés source de la clé JSON Mounts
  • Créez, démarrez et exécutez un conteneur interactif à l'aide de volumes d'un autre conteneur
    • docker run -it –name managed2 –volumes-from managed busybox / bin / sh
  • Validez que les fichiers existent dans le conteneur
    • données cd
    • ls
      • Voir que le managedfile.txt existe
  • Créer un nouveau fichier
    • touchez managed2file.txt
    • ls
  • Arrêtez le conteneur
  • Afficher les détails du conteneur
    • docker inspect géré2
      • Notez le nom et les propriétés source de la clé JSON Mounts
          • Ils correspondent à ceux du conteneur géré
  • Supprimer le conteneur managed2
    • docker rm -v managed2
        • Assurez-vous d'utiliser l'indicateur -v pour supprimer la référence au volume
  • Validez que le volume existe toujours
    • docker start -ia managed
    • cd data
    • ls
      • Vérifiez que les deux fichiers existent
  • Arrêtez le conteneur
  • Répertorier tous les volumes de docker
    • volume du docker ls
      • Le nom du volume du JSON Montages des conteneurs est répertorié
  • Voir les détails du volume
    • contrôle du volume de docker
      • Le point de montage du volume correspond à la source du JSON Mounts des conteneurs
  • Supprimer le conteneur géré
    • Docker rm -v géré
      • Assurez-vous d'utiliser l'indicateur -v pour supprimer la référence au volume
  • Répertorier tous les volumes du docker
    • Volume Docker ls
      • Le nom du volume du JSON des montages des conteneurs n'est plus répertorié

Les volumes gérés sont indépendants de tout conteneur mais ne peuvent être référencés que par les conteneurs qui les utilisent. Les volumes gérés découplent les conteneurs et les volumes du système de fichiers de l'hôte. Docker peut supprimer un volume géré lorsque le dernier conteneur référençant le volume est supprimé (docker rm -v). Si vous utilisez le modèle de conteneur de volume, il peut être utile de préfixer le nom de vos conteneurs avec «vc_» pour les rendre facilement identifiables.

J'espère que vous avez trouvé cela utile. Gardez un œil sur le prochain article de la série.




Source link