2.9 KiB
\newpage
Stockage de données applicatives
Le concept principal de Docker est de concevoir des conteneurs applicatifs : on va préférer assigner un unique rôle à un conteneur (donc géralement on ne va lancer qu'une seule application par conteneur) et concevoir un service complet en créant un groupe de conteneur, partageant des données entre-eux par des volumes.
Il est possible d'utiliser la dernière couche en lecture/écriture pour inscrire des données. Il n'est cependant pas recommandé de stocker des données de cette manière, car les données ne vont pas persister une fois que le conteneur aura terminé son exécution ; elles seront alors plus compliqués à retrouver manuellement.
Docker met à notre disposition plusieurs mécanismes pour que les données de nos applications persistent et soient prêtes à migrer plus facilement vers une solution plus apte à la décentralisation.
Partage avec la machine hôte
Il est possible de monter un répertoire de la machine hôte dans un conteneur. L'intérêt reste plutôt limité à des fins de facilité ou de test, par exemple si vous voulez partager des fichiers avec votre voisin, en passant par le protocole HTTP, mais sans se casser la tête à installer et configurer un serveur web :
docker container run --rm -p 80:80 -v ~/Downloads:/usr/share/nginx/html:ro -d nginx
Une fois cette commande lancée, votre voisin pourra accéder à votre dossier Downloads en renseignant l'IP de votre machine dans son navigateur favori !
Les volumes
Les volumes sont des espaces créés via Docker (il s'agit d'objets Docker). Ils permettent de partager facilement des données entre conteneurs, sans avoir à se soucier de leur réel emplacement.
Comme il s'agit d'un objet, la première chose à faire va être de créer notre volume :
docker volume create prod_db
Ensuite, nous pouvons démarrer un conteneur l'utilisant, par exemple :
docker container run --name mydb --mount source=prod_db,target=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
Lorsque le volume est vide, si des données sont présentes à l'endroit du point de montage, celles-ci sont recopiées dans le volume.
Si plus tard, vous souhaitez créer un conteneur chargé de faire des sauvegardes, vous pourriez le lancer comme ceci :
docker container run -it --volume-from mydb busybox /bin/bash
Volumes temporaires
Lorsque vous n'avez pas besoin de stocker les données et que vous ne désirez
pas qu'elles persistent (des données sensibles par exemple) ou si cela peut
améliorer les performances de votre conteneur, il est possible de créer des
points de montages utilisant le système de fichiers tmpfs
et donc résidant
exclusivement en RAM.
Rendu
Exercice
Modifiez le Dockerfile
de l'exercice précédent pour que les logs de votre
application web (ok, c'est juste un index.html
...) soient contenus dans un
volume.