‫D'accord. Les volumes semblent assez simples au début, mais en réalité, il y a beaucoup à faire.
‫La première façon de dire à un conteneur qu'il doit s'inquiéter d'un volume est d'utiliser un fichier Docker.
‫Allons vérifier certaines de celles-ci.
‫Je vais juste faire ce que je fais beaucoup.
‫Je vais chercher MySQL.
‫C’est ainsi que j’ai tant appris sur Dockerfiles, et comment les utiliser correctement, est que les référentiels officiels contiennent
‫de véritables valeurs par défaut et des meilleures pratiques intégrées.
‫Quand je vais ici à MySQL, je vais simplement cliquer sur le dernier fichier Docker ici. Je vous parie que c'est une
‫base de données, elle contient probablement une commande de volume.
‫Nous y voilà.
‫C'est l'emplacement par défaut des bases de données MySQL. Cette image est programmée de manière à indiquer à
‫Docker que, lorsque nous démarrons un nouveau conteneur à partir de celui-ci, il faut créer un nouvel emplacement
‫de volume et l'affecter à ce répertoire dans le conteneur. Ce qui signifie que tous les fichiers que nous avons placés dans
‫le conteneur survivront jusqu'à ce que nous supprimions manuellement le volume.
‫Et c’est quelque chose que nous devrions souligner ici, c’est que les volumes doivent être supprimés manuellement.
‫Vous ne pouvez pas les nettoyer simplement en enlevant un conteneur.
‫Ils sont une étape supplémentaire. En réalité, c’est juste pour l’assurance, car l’intérêt d’une
‫commande de volume est de dire que ces données sont particulièrement importantes, du moins beaucoup plus importantes que le conteneur lui-même.
‫Si nous tirons un menu fixe sur MySQL, puis
‫que je vérifie son image, nous ne verrons pas le fichier Docker, car le fichier Docker ne fait pas partie
‫des métadonnées de l'image, comme vous le remarquerez dans cette section. zone de configuration, qu'il a spécifié
‫ce volume là.
‫Je peux toujours dire que la configuration, qui provenait du fichier Docker lors de sa construction, attribuait un volume à
‫ce chemin.
‫Lançons un conteneur à partir de celui-ci.
‫Donc conteneur docker exécuter -d --name mysql.
‫Si vous vous en souvenez, celui de MySQL est un peu spécial.
‫Il nécessite maintenant une variable d'environnement
‫avant de pouvoir fonctionner.
‫C'est MYSQL_ALLOW_EMPTY_PASSWORD.
‫D'ACCORD.
‫Ce que vous voyez est MySQL en cours d'exécution. Si nous faisons un conteneur docker inspecter
‫mysql, nous devrions voir la même chose quand il nous dit dans la config qu'il y a un volume.
‫Ici.
‫Nous pouvons également le voir ici sous les montures. C’est en fait le conteneur en cours d’exécution qui reçoit
‫son propre emplacement unique sur l’hôte, pour stocker ces données, puis en arrière-plan, mappé ou monté, sur cet emplacement du conteneur, de
‫sorte que celui-ci pense en fait qu’il écrit dans /
‫var / lib / mysql.
‫Dans ce cas, nous pouvons voir que les données résident réellement à cet emplacement sur l'hôte. Faisons donc un volume de docker ls,
‫et nous pouvons voir
‫que nous avons maintenant un volume. Maintenant, nous remarquons que cet identifiant unique nous permet de ne jamais
‫savoir à quoi il sert,
‫non?
‫Alors, faisons une inspection à ce sujet.
‫Vous n'avez pas à taper le texte entier.
‫Vous pouvez simplement taper les deux premiers caractères et cliquer sur Tab pour le compléter. Vous obtiendrez des informations
‫similaires sur le volume lui-même.
‫Si vous effectuez cette opération sur une machine Linux, vous pouvez accéder à cet emplacement sur votre disque
‫dur et voir les données.
‫Il y aura effectivement des bases de données là-bas.
‫Si vous êtes sur un Mac ou Windows, rappelez-vous que Docker pour Windows et Docker pour
‫Mac font un peu en arrière-plan, ce qui nous est caché alors qu'il crée une machine virtuelle Linux.
‫Donc, ces données sont techniquement à l'intérieur de cette machine virtuelle Linux. Vous ne pourrez pas accéder à ce chemin sur votre ordinateur
‫Windows ou Mac et consulter les données. C'est en fait à l'intérieur de cette VM.
‫Nous verrons dans quelques instants, avec les volumes montés, comment nous pouvons également contourner cette limitation.
‫En regardant cela, vous remarquerez que ce n’est pas très convivial de nous dire ce qu’il contient
‫ou à quoi ce volume est assigné.
‫Du point de vue du conteneur, nous pouvons voir quel volume il utilise, mais nous ne pouvons pas voir du volume
‫à quoi il est connecté.
‫Droite?
‫Si je devais juste appuyer sur la flèche du haut et, voyons, créer un mysql2.
‫Cela a maintenant créé un autre serveur MySQL fonctionnant en arrière-plan.
‫Si je fais un autre volume de docker ls, vous en verrez deux.
‫Vous commencez à voir le problème, non?
‫Il n'y a pas vraiment de moyen facile de distinguer l'un de l'autre.
‫Si nous voulons simplement prouver un point, faisons un conteneur docker arrêter mysql, et un menu fixe un conteneur
‫arrêter mysql2.
‫Nous faisons un conteneur docker ls, nous ne verrons aucun conteneur en cours d'exécution. Si nous faisons un ls -a, nous
‫pouvons les voir tous. Et remarquez qu'ils sont arrêtés. Et puis nous faisons un volume de docker ls, vous
‫remarquez que nous avons toujours les deux volumes.
‫Si je fais un conteneur docker rm mysql, puis mysql2, parce que je peux réellement faire les deux en
‫une seule commande, les deux conteneurs seront supprimés. Si je fais maintenant un volume de docker ls, mes
‫volumes sont toujours là. Mes données sont toujours en sécurité.
‫Nous avons donc résolu un problème.
‫Les bases de données survivent à l'exécutable.
‫Comment pouvons-nous rendre cela un peu plus convivial?
‫C'est là qu'interviennent les volumes nommés et la possibilité, pour nous, de spécifier des éléments dans la commande d'exécution
‫du menu fixe.
‫Si j'appuie sur la flèche du haut plusieurs fois jusqu'à ce que j'arrive à l'exécution du conteneur docker, peu importe celui que
‫vous allez exécuter à nouveau.
‫Dans ce cas, nous allons réellement lancer une commande -v. Un -v nous permet de spécifier un nouveau volume
‫que nous voulons créer pour ce conteneur sur le point d'être exécuté ou deux autres
‫options.
‫L'un d'eux est de créer un volume nommé.
‫Si je ne faisais que -v, puis var var mysql, cela ferait la même chose, c'est ce que faisait notre commande
‫de volume dans le fichier Docker.
‫Nous n'avons pas vraiment besoin de faire cela ici. Mais ce que nous pouvons faire, c'est que je puisse mettre un nom
‫devant lui avec deux points. C'est ce qu'on appelle un "volume nommé". "Lorsque je
‫fais cela, puis un volume de menu fixe ls, vous verrez que mon nouveau conteneur utilise un nouveau volume et qu’il utilise
‫un nom convivial.
‫Si nous effectuons une inspection du volume de menu fixe sur ce mysql, vous verrez que cela est plus facile à utiliser ici.
‫Si je supprime à nouveau mon conteneur et que nous devons insérer un
‫-f car il est toujours en cours d'exécution, j'en exécute un autre. Et cette fois, je lui donnerai
‫un nom différent. Et puis nous faisons un autre volume docker ls, vous verrez
‫qu’il semble que nous n’ayons pas créé de nouveau volume. Il utilise toujours le même volume.
‫Faisons un conteneur docker inspecter sur le mysql3. Ensuite, ce que nous verrons ici, c’est oui, c’est
‫ce qui a été configuré, mais que courons-nous?
‫Ceci est notre monte ici.
‫Nous verrons ici que non seulement le nom est plus convivial, mais que l'emplacement source a été modifié pour devenir
‫également un peu plus convivial.
‫Pour moi, un petit conseil ici est que lorsque je cours plusieurs jours ou plusieurs semaines à la fois, une base de données particulière, dans
‫un conteneur particulier que je dois continuer à utiliser régulièrement, et je ne veux pas de
‫serveur de base de données vierge, Je vais créer mes conteneurs de cette façon et les nommer pour le projet afin que je sache à quoi
‫sert ce volume et
‫qu’il doit rester en place.
‫Une dernière chose ici.
‫Pourquoi voudriez-vous créer un volume de docker?
‫Si nous pouvons les créer à partir d'une commande d'exécution du conteneur docker au moment de l'exécution, et que nous pouvons les créer en les spécifiant dans le fichier Docker,
‫il est rare que vous souhaitiez le créer à l'avance. Et vous pouvez réellement comprendre cela
‫assez rapidement en utilisant la commande help.
‫Car c’est la seule façon de spécifier un pilote différent.
‫Tu te souviens de ce plug-in dont je parlerai plus tard?
‫Ensuite, toutes les options de pilote sur lesquelles nous souhaitons utiliser le -o.
‫Ensuite, si nous voulons mettre des étiquettes dessus, nous en reparlerons plus tard dans la section production.
‫Parfois, dans des cas particuliers, vous devez créer le volume Docker à l'avance, mais généralement à des fins de développement local, il
‫suffit de le spécifier dans un fichier Dockerfile ou à l'aide de la commande d'exécution.