Comment utiliser les volumes de données Docker sur Ubuntu 14.04

introduction

Dans cet article, nous allons passer en revue le concept de volumes de données Docker: ce qu’ils sont, pourquoi ils sont utiles, les différents types de volumes, comment les utiliser et quand les utiliser. Nous allons également passer en revue quelques exemples d’utilisation des volumes Docker via l’outil de ligne de commande + docker +.

Au moment où nous atteignons la fin de l’article, vous devriez être à l’aise pour créer et utiliser tout type de volume de données Docker.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants:

Explication des conteneurs Docker

Travailler avec Docker nécessite de comprendre un certain nombre de concepts spécifiques à Docker, et la plupart de la documentation explique en détail comment utiliser les outils de Docker sans trop expliquer pourquoi vous souhaitez utiliser l’un de ces outils. Cela peut être déroutant si vous êtes nouveau dans Docker. Nous allons donc commencer par quelques notions de base, puis passer à l’utilisation des conteneurs Docker. Si vous avez déjà travaillé avec Docker et souhaitez savoir comment utiliser les volumes de données, n’hésitez pas à passer à la section suivante.

Un conteneur Docker est similaire à une machine virtuelle. Il vous permet en principe d’exécuter une «boîte Linux» préemballée dans un conteneur. La principale différence entre un conteneur Docker et une machine virtuelle typique est que Docker n’est pas aussi isolé de l’environnement qui l’entoure qu’une machine virtuelle normale. Un conteneur Docker partage le noyau Linux avec le système d’exploitation hôte, ce qui signifie qu’il n’est pas nécessaire de «démarrer» comme le ferait une machine virtuelle.

Étant donné que tant de choses sont partagées, allumer un conteneur Docker est une opération rapide et économique - dans la plupart des cas, vous pouvez afficher un conteneur Docker complet (l’équivalent d’une machine virtuelle normale) dans le même temps qu’il en faudrait pour exécuter une tâche normale. programme en ligne de commande. C’est formidable, car le déploiement de systèmes complexes est un processus beaucoup plus simple et plus modulaire, mais c’est un paradigme différent de l’approche habituelle de la machine virtuelle et des effets secondaires inattendus pour les utilisateurs du monde de la virtualisation.

Apprentissage des types de volumes de données Docker

Il existe trois principaux cas d’utilisation des volumes de données Docker:

  1. Pour conserver les données lorsque le conteneur est supprimé

  2. Pour partager des données entre le système de fichiers hôte et le conteneur Docker

  3. Pour partager des données avec d’autres conteneurs Docker

Le troisième cas est un peu plus avancé, nous n’entrerons donc pas dans ce didacticiel, mais les deux premiers sont assez courants.

Dans le premier cas (et le plus simple), vous souhaitez simplement que les données restent en mémoire même si vous supprimez le conteneur. Il est donc souvent plus facile de laisser Docker gérer l’emplacement de stockage des données.

Garder les données persistantes

Il n’ya aucun moyen de créer directement un «volume de données» dans Docker. Nous créons donc un conteneur data volume contenant un volume qui lui est associé. Pour tous les autres conteneurs que vous souhaitez ensuite connecter à ce conteneur de volumes de données, utilisez l’option + - volumes-from + de Docker pour extraire le volume de ce conteneur et les appliquer au conteneur actuel. C’est un peu inhabituel au premier abord, voyons un exemple rapide de la façon dont nous pourrions utiliser cette approche pour que notre fichier byebye + reste fidèle même si le conteneur est supprimé.

Tout d’abord, créez un nouveau conteneur de volumes de données pour stocker notre volume:

docker create -v /tmp --name datacontainer ubuntu

Cela a créé un conteneur nommé + datacontainer + basé sur l’image + ubuntu + et dans le répertoire + / tmp +.

Maintenant, si nous exécutons un nouveau conteneur Ubuntu avec l’indicateur + - volumes-from + et exécutons + bash + comme nous l’avons fait précédemment, tout ce que nous écrivons dans le répertoire + / tmp + sera enregistré dans le + / tmp + `volume de notre conteneur + datacontainer + `.

Tout d’abord, démarrez l’image + ubuntu:

docker run -t -i --volumes-from datacontainer ubuntu /bin/bash

Les options de ligne de commande + -t + appellent un terminal depuis l’intérieur du conteneur. Le drapeau + -i + rend la connexion interactive.

A l’invite bash du conteneur + ubuntu, créez un fichier dans` + / tmp`:

echo "I'm not going anywhere" > /tmp/hi

Allez-y et tapez + exit + pour revenir au shell de votre ordinateur hôte. Maintenant, exécutez à nouveau la même commande:

docker run -t -i --volumes-from datacontainer ubuntu /bin/bash

Cette fois le fichier + hi + est déjà là:

cat /tmp/hi

Tu devrais voir:

Output of cat /tmp/hiI'm not going anywhere

Vous pouvez ajouter autant d’indicateurs «+ - volumes-from +» que vous le souhaitez (par exemple, si vous souhaitez assembler un conteneur qui utilise les données de plusieurs conteneurs de données). Vous pouvez également créer autant de conteneurs de volumes de données que vous le souhaitez.

Le seul inconvénient de cette approche est que vous ne pouvez choisir le chemin de montage à l’intérieur du conteneur (+ / tmp + dans notre exemple) lorsque vous créez le conteneur de volume de données.

Partage de données entre l’hôte et le conteneur Docker

L’autre utilisation courante des conteneurs Docker consiste à partager des fichiers entre la machine hôte et le conteneur Docker. Cela fonctionne différemment du dernier exemple. Il n’est pas nécessaire de créer d’abord un conteneur «données uniquement». Vous pouvez simplement exécuter un conteneur de n’importe quelle image Docker et remplacer l’un de ses répertoires par le contenu d’un répertoire sur le système hôte.

Par exemple, dans le monde réel, supposons que vous souhaitiez utiliser l’image officielle de Docker Nginx, mais que vous souhaitiez conserver une copie permanente des fichiers journaux de Nginx à des fins d’analyse ultérieure. Par défaut, l’image Docker + nginx + se connecte au répertoire + / var / log / nginx +, mais il s’agit du + / var / log / nginx + à l’intérieur du conteneur Docker Nginx. Normalement, il n’est pas accessible depuis le système de fichiers hôte.

Créons un dossier pour stocker nos journaux, puis exécutons une copie de l’image Nginx avec un volume partagé de sorte que Nginx écrit ses journaux dans le système de fichiers de notre hôte au lieu du + / var / log / nginx + du conteneur:

mkdir ~/nginxlogs

Puis démarrez le conteneur:

docker run -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 -i nginx

Cette commande + run + est un peu différente de celles que nous avons utilisées jusqu’à présent, alors décomposons-la pièce par pièce:

  • + -v ~ / nginxlogs: / var / log / nginx + - Nous avons créé un volume qui relie le répertoire + / var / log / nginx + de l’intérieur du conteneur Nginx au répertoire + ~ / nginxlogs + du répertoire machine hôte. Docker utilise un +: + pour séparer le chemin de l’hôte du chemin du conteneur, et le chemin de l’hôte vient toujours en premier.

  • + -d + - Détache le processus et exécute en arrière-plan. Sinon, nous ne ferions que regarder une invite Nginx vide et ne pourrions utiliser ce terminal tant que nous n’aurons pas tué Nginx.

  • + -p 5000: 80 + - Configurez un transfert de port. Le conteneur Nginx écoute par défaut le port 80, ce qui mappe le port 80 du conteneur Nginx sur le port 5000 du système hôte.

Si vous portiez une attention particulière, vous avez peut-être également remarqué une autre différence par rapport aux commandes + run + précédentes. Jusqu’à présent, nous spécifions une commande à la fin de toutes nos instructions + run + (habituellement + / bin / bash +) pour indiquer à Docker quelle commande exécuter dans le conteneur. Etant donné que l’image Nginx est une image officielle de Docker, elle est conforme aux meilleures pratiques de Docker et le créateur de l’image définit l’image pour exécuter la commande permettant de démarrer Nginx automatiquement. Nous pouvons simplement laisser ici les habituels + / bin / bash + et laisser les créateurs de l’image choisir la commande à exécuter dans le conteneur pour nous.

Nous avons donc maintenant une copie de Nginx fonctionnant dans un conteneur Docker sur notre machine, et le port 5000 de notre machine hôte mappe directement à cette copie du port 80 de Nginx. Utilisons curl pour faire une demande de test rapide:

curl localhost:5000

Vous obtiendrez une quantité de code HTML de Nginx indiquant que Nginx est opérationnel. Mais plus intéressant encore, si vous regardez dans le dossier + ~ / nginxlogs + sur la machine hôte et regardez dans le fichier + access.log +, vous verrez un message de log de Nginx montrant notre requête:

cat ~/nginxlogs/access.log

Vous verrez quelque chose de similaire à:

Output of `cat ~/nginxlogs/access.log`172.17.42.1 - - [23/Oct/2015:05:22:51 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-"

Si vous apportez des modifications au dossier + ~ / / nginxlogs +, vous pourrez également les voir depuis l’intérieur du conteneur Docker en temps réel.

Conclusion

Ça résume à peu près! Nous avons maintenant expliqué comment créer des conteneurs de volumes de données dont nous pouvons utiliser les volumes pour conserver des données dans d’autres conteneurs, ainsi que le partage de dossiers entre le système de fichiers hôte et un conteneur Docker. Cela couvre tous les cas d’utilisation, sauf les plus avancés, en ce qui concerne les volumes de données Docker.

Si vous utilisez Docker Compose, les volumes de données Docker peuvent être configurés dans votre fichier + docker-compose.yml +. Découvrez Comment installer et utiliser Docker Compose sur Ubuntu 14.04 pour détails.

Bonne chance et joyeux dockering!

Related