Apprentissage de Docker, Partie 6 : Travailler avec des données

Dans la partie d'aujourd'hui de la traduction d'une série de documents sur Docker, nous parlerons du travail avec les données. En particulier, sur les volumes Docker. Dans ces documents, nous avons constamment comparé les mécanismes de programmation Docker avec diverses analogies comestibles. Nous ne dérogerons pas ici à cette tradition. Laissez les données dans Docker être des épices. Il existe de nombreuses épices dans le monde et Docker a de nombreuses façons de travailler avec les données.

Partie 1 : Les bases
Partie 2 : termes et concepts
Partie 3 : Dockerfiles
Partie 4 : Réduire la taille des images et accélérer leur assemblage
Partie 5 : commandes
Partie 6 : travailler avec des données

Apprentissage de Docker, Partie 6 : Travailler avec des données

Veuillez noter que ce matériel a été préparé à l'aide de la version 18.09.1 ​​du moteur Docker et de la version API 1.39.

Les données dans Docker peuvent être stockées de manière temporaire ou permanente. Commençons par les données temporaires.

Stockage temporaire des données

Il existe deux façons de gérer les données temporaires dans les conteneurs Docker.

Par défaut, les fichiers créés par une application s'exécutant dans un conteneur sont stockés dans une couche de conteneur inscriptible. Pour que ce mécanisme fonctionne, rien de spécial n'a besoin d'être configuré. Il s'avère bon marché et gai. L'application doit simplement enregistrer les données et continuer à faire sa propre chose. Cependant, une fois que le conteneur aura cessé d'exister, les données enregistrées de manière aussi simple disparaîtront également.

Le stockage de fichiers temporaires dans Docker est une autre solution qui convient aux cas où vous avez besoin d'un niveau de performance supérieur à ce qui est réalisable en utilisant le 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 vous connecter au conteneur tmpfs - une banque d'informations temporaire qui utilise la RAM de l'hôte. Cela accélérera l'exécution des opérations d'écriture et de lecture des données.

Il arrive souvent que les données doivent être stockées même après que le conteneur a cessé d'exister. Pour ce faire, nous avons besoin de mécanismes de stockage de données persistantes.

Stockage de données persistant

Il existe deux manières 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 lié. Avec cette approche, vous pouvez monter, par exemple, un dossier réel sur le conteneur. Les processus en dehors de Docker pourront également travailler avec des données stockées dans un tel dossier. C'est comme ça regarde technologie de montage et de liaison tmpfs.

Apprentissage de Docker, Partie 6 : Travailler avec des données
Montage de tmpfs et bind mount

Les inconvénients de l'utilisation de la technologie de montage lié sont que son utilisation complique la sauvegarde des données, la migration des données, le partage des données entre plusieurs conteneurs. Il est bien préférable d'utiliser des volumes Docker pour le stockage de données persistantes.

Docker de volumes

Un volume est un système de fichiers situé sur la machine hôte en dehors des conteneurs. Les volumes sont créés et gérés par Docker. Voici les principales propriétés des volumes Docker :

  • Ils constituent 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 une lecture et une écriture efficaces des données.
  • Les volumes peuvent être placés sur les ressources d'un fournisseur de cloud distant.
  • Ils peuvent être cryptés.
  • On peut leur donner des noms.
  • Le conteneur peut organiser le pré-remplissage du volume avec des données.
  • Ils sont pratiques pour les tests.

Comme vous pouvez le voir, les volumes Docker ont des propriétés étonnantes. Parlons de la façon de les créer.

Création de volumes

Les volumes peuvent être créés à l'aide de requêtes Docker ou API.

Voici une instruction dans le Dockerfile qui permet de créer un volume au démarrage d'un conteneur.

VOLUME /my_volume

Lors de l'utilisation d'une instruction similaire, Docker, après avoir créé le conteneur, créera un volume contenant les données qui existent déjà à l'emplacement spécifié. Notez que si vous créez un volume à l'aide d'un Dockerfile, cela ne vous dispense pas de spécifier le point de montage du volume.

Vous pouvez également créer des volumes dans un Dockerfile en utilisant le format JSON.

De plus, les volumes peuvent être créés à l'aide d'outils de ligne de commande pendant que le conteneur est en cours d'exécution.

Travailler avec des volumes à partir de la ligne de commande

▍Création de volumes

Vous pouvez créer un volume autonome avec la commande suivante :

docker volume create —-name my_volume

▍Découvrez les informations sur les volumes

Pour afficher une 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

▍Supprimer un volume

Vous pouvez supprimer un volume comme ceci :

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 un volume est associé à un conteneur, ce volume ne peut pas être supprimé tant que le conteneur correspondant n'est pas supprimé. En même temps, même si le conteneur est supprimé, Docker ne le comprend pas toujours. 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 était auparavant incorrect.

Les indicateurs --mount et --volume

Pour travailler avec des volumes, lorsque vous appelez la commande docker, vous aurez souvent besoin d'utiliser des drapeaux. Par exemple, pour créer un volume lors de la création du 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 était populaire --volume. Initialement, ce drapeau (il peut aussi être utilisé sous une forme abrégée, puis il ressemble -v) a été utilisé pour les conteneurs autonomes, et le drapeau --mount - dans un environnement Docker Swarm. Cependant, depuis Docker 17.06, le drapeau --mount peut être utilisé dans n'importe quel scénario.

Il convient de noter que lors de l'utilisation du drapeau --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 ce drapeau particulier, et non --volume. Drapeau --mount est le seul mécanisme qui vous permet de travailler avec des services ou de spécifier des options de pilote de volume. En outre, ce drapeau est plus facile à utiliser.

Dans les exemples existants de commandes de manipulation de données Docker, vous pouvez voir de nombreux exemples d'utilisation de l'indicateur -v. Lorsque vous essayez d'adapter ces commandes pour vous-même, gardez à l'esprit que les drapeaux --mount и --volume utiliser différents formats de paramètres. Autrement dit, vous ne pouvez pas simplement remplacer -v sur --mount et obtenir une équipe de travail.

La principale différence entre --mount и --volume est-ce que lors de l'utilisation du drapeau --volume tous les paramètres sont rassemblés dans un champ, et lors de l'utilisation --mount les paramètres sont séparés.

Lorsque vous travaillez avec --mount les 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 couramment utilisées --mount:

  • type — type de montage. La valeur de la clé correspondante peut être lier, le volume ou tmpfs. On parle ici de volumes, c'est-à-dire qu'on s'intéresse à la valeur volume.
  • source - source de 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 à 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 le volume prévu uniquement pour la lecture. L'utilisation de cette clé est facultative et aucune valeur ne lui est affectée.

Voici un exemple d'utilisation --mount avec de nombreuses options :

docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image

Les résultats de

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, applicable dans une commande de la forme 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 prochaine étape pour les apprenants de Docker. Ici super bon article sur Docker. Ici un livre sur Docker (lorsque vous achetez ce livre, essayez d'en obtenir l'édition la plus récente). Ici un autre livre pour ceux qui pensent que la pratique est la meilleure façon d'apprendre la technologie.

Chers lecteurs, Quels documents sur Docker recommanderiez-vous aux débutants d'apprendre ?

Apprentissage de Docker, Partie 6 : Travailler avec des données

Source: habr.com

Ajouter un commentaire