Dans le volet d'aujourd'hui de la série Docker, nous parlerons de l'utilisation des données. En particulier, les volumes Docker. Dans ces documents, nous avons constamment comparé les mécanismes logiciels de Docker avec diverses analogies comestibles. Nous ne nous écarterons pas de cette tradition ici. Les données Docker doivent être épices. Il existe de nombreux types d'épices dans le monde et, dans Docker, il existe de nombreuses façons de travailler avec les données.
→
Partie 1: les bases→
Partie 2: termes et concepts→
Partie 3: Fichiers Dockerfile→
Partie 4: réduire la taille des images et accélérer leur assemblage→
Partie 5: équipes→
Partie 6: travailler avec des donnéesVeuillez noter que ce matériel a été préparé à l'aide de la version 18.09.1 du moteur Docker et de la version
1.39 de l' API.
Les données Docker peuvent être stockées temporairement ou définitivement. Commençons par les données temporelles.
Stockage temporaire des données
Il existe deux façons d'organiser le travail avec des données temporaires dans des conteneurs Docker.
Par défaut, les fichiers créés par une application s'exécutant dans un conteneur sont enregistrés dans une couche conteneur activée pour l'enregistrement. Pour que ce mécanisme fonctionne, vous n'avez pas besoin de configurer quoi que ce soit spécifiquement. Cela s'avère bon marché et avec colère. Une application a juste besoin de sauvegarder des données et de continuer à faire son propre travail. Cependant, une fois que le conteneur a cessé d'exister, les données stockées de manière si simple disparaissent.
Pour stocker des fichiers temporaires dans Docker, vous pouvez utiliser une autre solution qui convient aux cas où un niveau de performances plus élevé est requis par rapport à ce qui est réalisable à l'aide du mécanisme standard de stockage de données temporaires. Si vous n'avez pas besoin que vos données soient stockées plus longtemps que le conteneur n'existe, vous pouvez connecter tmpfs au conteneur, un stockage temporaire d'informations qui utilise la RAM de l'hôte. Cela accélérera les performances d'écriture et de lecture des données.
Il arrive souvent que les données doivent être stockées même après la fin du conteneur. Pour cela, nous avons besoin de mécanismes utiles pour le stockage permanent des données.
Stockage permanent des données
Il existe deux façons de prolonger la durée de vie des données par rapport à la durée de vie du conteneur. Une façon consiste à utiliser la technologie de montage de liaison. Avec cette approche, vous pouvez par exemple monter un dossier réellement existant dans le conteneur. Les processus situés en dehors de Docker pourront travailler avec des données stockées dans un tel dossier. Voici à
quoi ressemblent les technologies de montage et de montage de tmpfs.
Monter tmpfs et lier le montageLes inconvénients de l'utilisation de la technologie bind mount sont que son utilisation complique la sauvegarde des données, la migration des données, le partage de données entre plusieurs conteneurs. Il est préférable d'utiliser les volumes Docker pour le stockage de données persistantes.
Tom Docker
Un volume est un système de fichiers qui réside sur une machine hôte en dehors des conteneurs. La création et la gestion du volume sont effectuées par Docker. Voici les propriétés de base des volumes Docker:
- Ils représentent un moyen de stockage permanent d'informations.
- Ils sont indépendants et séparés des conteneurs.
- Ils peuvent être partagés entre différents conteneurs.
- Ils vous permettent d'organiser efficacement la lecture et l'écriture des données.
- Les volumes peuvent être hébergés sur le fournisseur de cloud distant.
- Ils peuvent être cryptés.
- On peut leur donner des noms.
- Le conteneur peut organiser le volume à remplir avec des données à l'avance.
- Ils sont pratiques pour les tests.
Comme vous pouvez le voir, les volumes Docker ont de grandes fonctionnalités. Parlons de la façon de les créer.
Création de volume
Les volumes peuvent être créés à l'aide de Docker ou via des demandes d'API.
Voici les instructions du Dockerfile qui vous permettent de créer un volume au démarrage du conteneur.
VOLUME /my_volume
Lorsque vous utilisez une instruction Docker similaire, après avoir créé le conteneur, il crée un volume contenant des données qui existent déjà à l'emplacement spécifié. Veuillez noter que si vous créez un volume à l'aide du Dockerfile, cela ne vous dispense pas de spécifier un point de montage pour le volume.
Vous pouvez également créer des volumes dans Dockerfile en utilisant le format JSON.
De plus, des volumes peuvent être créés à l'aide de la ligne de commande pendant l'exécution du conteneur.
Utilisation de volumes à partir de la ligne de commande
▍Créer un volume
Vous pouvez créer un volume indépendant avec la commande suivante:
docker volume create —-name my_volume
▍Informations sur le volume de pliage
Pour afficher la liste des volumes Docker, utilisez la commande suivante:
docker volume ls
Vous pouvez explorer un volume spécifique comme celui-ci:
docker volume inspect my_volume
▍Retirer le volume
Vous pouvez supprimer un volume comme celui-ci:
docker volume rm my_volume
Afin de supprimer tous les volumes qui ne sont pas utilisés par les conteneurs, vous pouvez recourir à la commande suivante:
docker volume prune
Avant de supprimer des volumes, Docker vous demandera de confirmer cette opération.
Si le volume est associé à un conteneur, un tel volume ne peut pas être supprimé tant que le conteneur correspondant n'est pas supprimé. Dans ce cas, même si le conteneur est supprimé, Docker ne comprend pas toujours cela. Si cela se produit, vous pouvez utiliser la commande suivante:
docker system prune
Il est conçu pour nettoyer les ressources Docker. Après avoir exécuté cette commande, vous devriez pouvoir supprimer les volumes dont l'état a été précédemment incorrectement déterminé.
Drapeaux --mount et --volume
Pour travailler avec des volumes, lorsque vous appelez la
docker
, vous devez souvent utiliser des indicateurs. Par exemple, afin de créer un volume lors de la création d'un conteneur, vous pouvez utiliser cette construction:
docker container run --mount source=my_volume, target=/container/path/for/volume my_image
Dans les temps anciens (jusqu'en 2017), le drapeau
--volume
était
--volume
. Initialement, cet indicateur (il peut également être utilisé sous une forme abrégée, puis il ressemble à
-v
) a été utilisé pour les conteneurs indépendants, et l'indicateur
--mount
a été
--mount
dans l'environnement Docker Swarm. Cependant, à partir de Docker 17.06, l'indicateur
--mount
peut être utilisé dans n'importe quel scénario.
Il convient de noter que lorsque vous utilisez l'indicateur
--mount
, la quantité de données supplémentaires qui doivent être spécifiées dans la commande augmente, mais, pour plusieurs raisons, il est préférable d'utiliser cet indicateur plutôt que
--volume
. L'indicateur
--mount
est le seul mécanisme qui vous permet de travailler avec des services ou de spécifier les paramètres du pilote de volume. De plus, travailler avec ce drapeau est plus facile.
Dans les exemples existants de commandes visant à travailler avec des données dans Docker, vous pouvez trouver de nombreux exemples d'utilisation de l'indicateur
-v
. Lorsque vous essayez d'adapter ces commandes par vous-même, gardez à l'esprit que les
--mount
et
--volume
utilisent des formats de paramètres différents. Autrement dit, vous ne pouvez pas simplement remplacer
-v
par
--mount
et obtenir une commande fonctionnelle.
La principale différence entre
--mount
et
--volume
est que lorsque vous utilisez l'indicateur
--volume
tous les paramètres sont collectés ensemble dans un champ, et lorsque vous utilisez
--mount
paramètres sont séparés.
Lorsque vous travaillez avec
--mount
paramètres sont représentés sous forme de paires clé-valeur, à savoir, il ressemble à
key=value
. Ces paires sont séparées par des virgules. Voici les options
--mount
couramment utilisées:
type
- type
montage. La valeur de la clé correspondante peut être bind , volume ou tmpfs . Nous parlons ici de volumes, c'est-à-dire que nous nous intéressons à la valeur du volume
.source
- source
montage. Pour les volumes nommés, il s'agit du nom du volume. Pour les volumes sans nom, cette clé n'est pas spécifiée. Il peut être raccourci en src
.destination
- le chemin vers lequel le fichier ou le dossier est monté dans le conteneur. Cette clé peut être raccourcie en dst
ou target
.readonly
- monte un volume en lecture seule . L'utilisation de cette clé est facultative, aucune valeur ne lui est affectée.
Voici un exemple d'utilisation de
--mount
avec de nombreuses options:
docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image
Résumé
Voici quelques commandes utiles que vous pouvez utiliser lorsque vous travaillez avec des volumes Docker:
docker volume create
docker volume ls
docker volume inspect
docker volume rm
docker volume prune
Voici une liste des options couramment utilisées pour
--mount
, applicables à une commande comme
docker run --mount my_options my_image
:
type=volume
source=volume_name
destination=/path/in/container
readonly
Maintenant que nous avons terminé cette série Docker, il est temps de dire quelques mots sur la manière dont ceux qui étudient Docker peuvent continuer.
Voici un excellent article sur Docker.
Voici un livre sur Docker (lors de l'achat de ce livre, essayez d'en obtenir la dernière édition).
Voici un autre livre qui conviendra à ceux qui croient que la pratique est la meilleure façon d'apprendre la technologie.
Chers lecteurs! Quels matériaux sur Docker recommanderiez-vous aux débutants d'étudier?
