virli/tutorial/docker-basis/volumes.md

104 lines
3.3 KiB
Markdown
Raw Normal View History

2015-10-22 03:25:20 +00:00
\newpage
2017-10-04 23:42:56 +00:00
Stockage de données applicatives
================================
2015-10-22 03:25:20 +00:00
Le concept principal de Docker est de concevoir des conteneurs applicatifs : on
2017-10-16 20:59:22 +00:00
va préférer assigner un unique rôle à un conteneur (donc généralement on ne va
2015-10-22 03:25:20 +00:00
lancer qu'une seule application par conteneur) et concevoir un service complet
2017-10-16 20:59:22 +00:00
en créant un groupe de conteneurs, partageant des données entre eux par des
2015-10-22 03:25:20 +00:00
volumes.
2017-10-04 23:42:56 +00:00
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
2017-10-16 20:59:22 +00:00
manière, car elles ne vont pas persister une fois que le conteneur aura terminé
son exécution ; elles seront alors plus compliquées à retrouver manuellement.
2017-10-04 23:42:56 +00:00
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.
2015-10-22 03:25:20 +00:00
2016-09-08 01:44:20 +00:00
## Partage avec la machine hôte
2015-10-22 03:25:20 +00:00
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 :
2017-10-17 06:29:07 +00:00
<div lang="en-US">
```bash
docker container run --rm -p 80:80 -v ~/Downloads:/usr/share/nginx/html:ro -d nginx
2015-10-22 03:25:20 +00:00
```
2017-10-17 06:29:07 +00:00
</div>
2015-10-22 03:25:20 +00:00
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 !
2017-10-04 23:42:56 +00:00
## Les volumes
2015-10-22 03:25:20 +00:00
2017-10-04 23:42:56 +00:00
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.
2015-10-22 03:25:20 +00:00
2017-10-04 23:42:56 +00:00
Comme il s'agit d'un objet, la première chose à faire va être de créer notre
volume :
2015-10-22 03:25:20 +00:00
2017-10-17 06:29:07 +00:00
<div lang="en-US">
```bash
docker volume create prod_youp0m
docker volume create prod_foodp0m
2017-10-04 23:42:56 +00:00
```
2017-10-17 06:29:07 +00:00
</div>
2015-10-22 03:25:20 +00:00
2017-10-16 20:59:22 +00:00
Ensuite, nous pouvons démarrer un conteneur utilisant, par exemple :
2015-10-22 03:25:20 +00:00
2018-10-04 03:48:11 +00:00
<div lang="en-US">
```bash
docker container run --mount source=prod_youp0m,target=/srv/images nemunaire/youp0m
2018-10-04 03:48:11 +00:00
```
</div>
On pourra également faire de même avec un conteneur MySQL :
2017-10-17 06:29:07 +00:00
<div lang="en-US">
```bash
docker container run --name mydb --mount source=prod_db,target=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
2015-10-22 03:25:20 +00:00
```
2017-10-17 06:29:07 +00:00
</div>
2015-10-22 03:25:20 +00:00
2017-10-04 23:42:56 +00:00
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.
2015-10-22 03:25:20 +00:00
2017-10-04 23:42:56 +00:00
Si plus tard, vous souhaitez créer un conteneur chargé de faire des
sauvegardes, vous pourriez le lancer comme ceci :
2015-10-22 03:25:20 +00:00
2017-10-17 06:29:07 +00:00
<div lang="en-US">
```bash
docker container run -it --volume-from mydb busybox /bin/bash
2017-10-04 23:42:56 +00:00
```
2017-10-17 06:29:07 +00:00
</div>
2015-10-22 03:25:20 +00:00
2017-10-04 23:42:56 +00:00
## Volumes temporaires
2015-10-22 03:25:20 +00:00
2017-10-04 23:42:56 +00:00
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\ :
2015-10-22 03:25:20 +00:00
2018-10-04 03:48:11 +00:00
<div lang="en-US">
```bash
docker container run --mount type=tmpfs,target=/srv/images nemunaire/youp0m
2018-10-04 03:48:11 +00:00
```
</div>
2015-10-22 03:25:20 +00:00
2018-10-04 03:48:11 +00:00
En cas de crash de la machine, le contenu sera perdu, mais il reste
possible d'utiliser `--volume-from` afin de partager le volume avec un
autre conteneur.