introduction
En général, les conteneurs Docker sont éphémères et s’exécutent aussi longtemps que nécessaire pour que la commande émise dans le conteneur s’achève. Par défaut, toutes les données créées dans le conteneur ne sont disponibles que depuis le conteneur et uniquement pendant son exécution.
Les volumes Docker peuvent être utilisés pour partager des fichiers entre un système hôte et le conteneur Docker. Par exemple, supposons que vous souhaitiez utiliser l’image officielle de Docker Nginx et conserver une copie permanente des fichiers journaux de Nginx pour l’analyser ultérieurement. Par défaut, l'image Docker denginx
sera journalisée dans le répertoire/var/log/nginx
inside le conteneur Docker Nginx. Normalement, il n’est pas accessible depuis le système de fichiers hôte.
Dans ce didacticiel, nous verrons comment rendre les données de l’intérieur du conteneur accessibles sur la machine hôte.
Conditions préalables
Pour suivre cet article, vous aurez besoin d’un serveur Ubuntu 18.04 avec les éléments suivants:
-
Un utilisateur non root avec des privilèges sudo, suivant le guideInitial Server Setup with Ubuntu 18.04.
-
Docker installé avec les instructions deStep 1 etStep 2 deHow To Install and Use Docker on Ubuntu 18.04.
Si vous êtes nouveau dans Docker, la sérieThe Docker Ecosystem fournit un aperçu détaillé des concepts clés.
[.note] #Note: Même si les prérequis donnent des instructions pour installer Docker sur Ubuntu 18.04, les commandesdocker
pour les volumes de données Docker dans cet article devraient fonctionner sur d'autres systèmes d'exploitation tant que Docker est installé.
#
[[step-1 -—- bindmounting-a-volume]] == Étape 1 - Bindmounting a Volume
La commande suivante crée un répertoire appelénginxlogs
dans le répertoire personnel de votre utilisateur actuel et le lie à/var/log/nginx
dans le conteneur:
docker run --name=nginx -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 nginx
Prenons un moment pour examiner cette commande en détail:
-
--name=nginx
nomme le conteneur afin que nous puissions y faire référence plus facilement. -
-d
détache le processus et l'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. -
-v ~/nginxlogs:/var/log/nginx
configure un volume bindmount qui relie le répertoire/var/log/nginx
depuis l'intérieur du conteneur Nginx au répertoire~/nginxlogs
sur la 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. -
-p 5000:80
configure une redirection de port. Le conteneur Nginx écoute par défaut sur le port80
. Cet indicateur mappe le port80
du conteneur au port5000
sur le système hôte. -
nginx
spécifie que le conteneur doit être construit à partir de l'image Nginx, qui émet la commandenginx -g "daemon off"
pour démarrer Nginx.
[.Remarque]##
Note: L'indicateur-v
est très flexible. Il peut lier ou nommer un volume avec juste un léger ajustement de syntaxe. Si le premier argument commence par un/
ou~/
, vous créez un bindmount. Supprimez cela et vous nommez le volume.
-
-v /path:/path/in/container
monte le répertoire hôte,/path
au/path/in/container
-
-v path:/path/in/container
crée un volume nommépath
sans relation avec l'hôte.
Pour plus d'informations sur les volumes nommés, voirHow to Share Data Between Docker Containers
[[step-2 -—- access-data-on-the-host]] == Étape 2 - Accès aux données sur l'hôte
Nous avons maintenant une copie de Nginx fonctionnant dans un conteneur Docker sur notre machine, et le port5000
de notre machine hôte est directement mappé à cette copie du port80
de Nginx.
Chargez l'adresse dans un navigateur Web, en utilisant l'adresse IP ou le nom d'hôte de votre serveur et le numéro de port:http://your_server_ip:5000
. Tu devrais voir:
Plus intéressant encore, si nous regardons dans le répertoire~/nginxlogs
sur l'hôte, nous verrons lesaccess.log
créés par lesnginx
du conteneur qui afficheront notre requête:
cat ~/nginxlogs/access.log
Cela devrait afficher quelque chose comme:
Output203.0.113.0 - - [11/Jul/2018:00:59:11 +0000] "GET / HTTP/1.1" 200 612 "-"
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" "-"
Si vous apportez des modifications au dossier~/nginxlogs
, vous pourrez également les voir de l'intérieur du conteneur Docker en temps réel.
Conclusion
Dans ce didacticiel, nous avons montré comment créer un volume de données Docker pour partager des informations entre un conteneur et le système de fichiers hôte. Cela est utile dans les environnements de développement, où il est nécessaire d'avoir accès aux journaux pour le débogage. Pour en savoir plus sur le partage de données persistantes entre conteneurs, jetez un œil àHow To Share Data between Docker Containers.