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
|
|
|
|
|
2022-09-15 09:07:41 +00:00
|
|
|
|
Il est généralement toujours possible d'écrire dans le système de fichier de
|
|
|
|
|
notre conteneur. (Cela n'affecte pas l'image, chaque conteneur est démarré à
|
|
|
|
|
partir de l'image originale.) Cependant, il n'est pas recommandé de chercher à
|
|
|
|
|
stocker des données ainsi. En effet, il n'est pas aisé de récupérer ces données
|
|
|
|
|
une fois l'exécution du conteneur terminée ; les données peuvent même être
|
|
|
|
|
détruite si on a lancé le conteneur avec l'option `--rm`.
|
2015-10-22 03:25:20 +00:00
|
|
|
|
|
2022-09-15 09:07:41 +00:00
|
|
|
|
Docker met donc à notre disposition plusieurs mécanismes pour que les données
|
|
|
|
|
de nos applications persistent et soient prêtes à être migrées d'un conteneur à
|
|
|
|
|
l'autre.
|
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
|
|
|
|
|
2022-09-15 09:07:41 +00:00
|
|
|
|
Il est possible de partager un répertoire de la machine hôte avec un
|
2015-10-22 03:25:20 +00:00
|
|
|
|
conteneur. L'intérêt reste plutôt limité à des fins de facilité ou de test, par
|
2022-09-15 09:07:41 +00:00
|
|
|
|
exemple si vous voulez partager des fichiers en passant par le protocole HTTP,
|
|
|
|
|
mais sans se casser la tête à installer et configurer un serveur web, vous
|
|
|
|
|
pourriez utiliser :
|
2015-10-22 03:25:20 +00:00
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
2022-02-24 19:43:43 +00:00
|
|
|
|
docker 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
|
|
|
|
|
2022-09-15 09:07:41 +00:00
|
|
|
|
Une fois le conteneur lancé, vous pourrez accéder à votre dossier *Downloads*
|
|
|
|
|
en renseignant l'IP de votre machine dans un navigateur !
|
|
|
|
|
|
|
|
|
|
::::: {.warning}
|
2015-10-22 03:25:20 +00:00
|
|
|
|
|
2020-09-21 21:48:16 +00:00
|
|
|
|
Par défaut, `nginx` ne va pas permettre de lister le contenu du répertoire (et
|
|
|
|
|
va afficher une page 404, car il cherche un fichier `index.html` dans votre
|
|
|
|
|
répertoire). Vous pouvez par contre accéder à un fichier directement, par
|
2022-02-24 19:43:43 +00:00
|
|
|
|
exemple : <http://10.42.12.23/dQw4w9WgXcQ.mp4>
|
2020-09-21 21:48:16 +00:00
|
|
|
|
|
2022-09-15 09:07:41 +00:00
|
|
|
|
:::::
|
2015-10-22 03:25:20 +00:00
|
|
|
|
|
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
|
2022-02-24 19:43:43 +00:00
|
|
|
|
volume :
|
2015-10-22 03:25:20 +00:00
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```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
|
|
|
|
|
2022-02-24 19:43:43 +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">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
2022-05-04 09:18:16 +00:00
|
|
|
|
docker container run --mount source=prod_youp0m,target=/images \
|
|
|
|
|
nemunaire/youp0m
|
2018-10-04 03:48:11 +00:00
|
|
|
|
```
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-02-24 19:43:43 +00:00
|
|
|
|
On pourra également faire de même avec un conteneur MySQL :
|
2018-10-04 03:48:11 +00:00
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
2022-05-04 09:18:16 +00:00
|
|
|
|
docker container run --name mydb -e MYSQL_ROOT_PASSWORD=my-secret-pw \
|
2022-09-13 21:19:59 +00:00
|
|
|
|
--mount source=prod_db,target=/var/lib/mysql 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
|
|
|
|
|
2022-09-15 09:07:41 +00:00
|
|
|
|
::::: {.question}
|
|
|
|
|
|
|
|
|
|
Lorsque le volume est vide, si des données sont présentes dans l'image à
|
|
|
|
|
l'endroit du point de montage, celles-ci sont recopiées dans le volume.
|
2015-10-22 03:25:20 +00:00
|
|
|
|
|
2022-09-15 09:07:41 +00:00
|
|
|
|
:::::
|
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
|
2022-09-13 21:19:59 +00:00
|
|
|
|
exclusivement en RAM :
|
2015-10-22 03:25:20 +00:00
|
|
|
|
|
2018-10-04 03:48:11 +00:00
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
2020-09-21 21:48:16 +00:00
|
|
|
|
docker container run --mount type=tmpfs,target=/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.
|
2019-10-16 01:54:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Partage de volumes entre conteneurs
|
|
|
|
|
|
|
|
|
|
Les volumes sont des espaces détachés des conteneurs, particulièrement utiles
|
|
|
|
|
pour mettre à jour ou relancer un conteneur, sans perdre les données. Un autre
|
2021-09-19 22:19:49 +00:00
|
|
|
|
intérêt est de pouvoir partager des fichiers entre plusieurs conteneurs.
|
2019-10-16 01:54:56 +00:00
|
|
|
|
|
|
|
|
|
Il est ainsi parfaitement possible de lancer deux conteneurs qui partagent le
|
2022-02-24 19:43:43 +00:00
|
|
|
|
même volume :
|
2019-10-16 01:54:56 +00:00
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
|
|
|
|
```bash
|
2022-02-24 19:43:43 +00:00
|
|
|
|
docker container run -d --mount source=prod_youp0m,target=/images \
|
|
|
|
|
-p 8080:8080 nemunaire/youp0m
|
|
|
|
|
|
|
|
|
|
docker container run -d --mount source=prod_youp0m,target=/images \
|
|
|
|
|
-p 8081:8080 nemunaire/youp0m
|
2019-10-16 01:54:56 +00:00
|
|
|
|
```
|
|
|
|
|
</div>
|
|
|
|
|
|
2021-09-19 22:19:49 +00:00
|
|
|
|
Dans cet exemple, l'ajout d'une image dans un conteneur l'ajoutera également
|
2019-10-16 01:54:56 +00:00
|
|
|
|
dans le second.
|
|
|
|
|
|
|
|
|
|
Un exemple plus intéressant serait sur une architecture de micro-services
|
2022-02-24 19:43:43 +00:00
|
|
|
|
traitant des fichiers de grande taille : plutôt que de faire passer les
|
2019-10-16 01:54:56 +00:00
|
|
|
|
fichiers par un système de message/socket, on peut partager un volume pour
|
|
|
|
|
épargner les coûts de transferts inutiles, lorsqu'ils ne changent pas de
|
|
|
|
|
machine.
|