feat: docs
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
---
|
||||
title: Volumes
|
||||
description: Conserver les données indépendamment du cycle de vie des conteneurs.
|
||||
---
|
||||
|
||||
## Un conteneur est éphémère
|
||||
|
||||
Le système de fichiers propre à un conteneur est jetable. Les écritures disparaissent lorsque le conteneur est détruit ou recréé. Pour une base de données, ce comportement serait inacceptable.
|
||||
|
||||
Un volume est un stockage persistant géré par Docker et découplé du conteneur : le conteneur va et vient, le volume reste.
|
||||
|
||||
## Volume nommé
|
||||
|
||||
```yaml
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
```
|
||||
|
||||
Cette configuration monte le volume `postgres_data` sur `/var/lib/postgresql/data`, l'emplacement où PostgreSQL écrit ses données.
|
||||
|
||||
Les données survivent à un `down` puis un `up`, tant que le volume n'est pas supprimé.
|
||||
|
||||
<Callout title="Attention à down -v" type="warning">
|
||||
docker compose down -v supprime aussi les volumes de la stack. Sur une base contenant des données importantes, cette action est destructive.
|
||||
</Callout>
|
||||
|
||||
## Où vit un volume ?
|
||||
|
||||
Le volume est stocké dans le système de fichiers du Docker Engine :
|
||||
|
||||
- directement sur l'hôte avec Linux ;
|
||||
- dans la VM Linux Docker Desktop avec Mac ou Windows.
|
||||
|
||||
Ce n'est pas un dossier du dépôt. Docker en gère l'emplacement et le cycle de vie.
|
||||
|
||||
## Bind mount : monter un dossier de l'hôte
|
||||
|
||||
En développement, on veut voir les modifications de code immédiatement dans le conteneur :
|
||||
|
||||
```yaml
|
||||
services:
|
||||
backend:
|
||||
volumes:
|
||||
- ./backend:/app
|
||||
- /app/node_modules
|
||||
- /app/dist
|
||||
```
|
||||
|
||||
### Le code local
|
||||
|
||||
`./backend:/app` monte le dossier du projet dans le conteneur. Quand un fichier est modifié sur l'hôte, le serveur dans le conteneur le voit et peut redémarrer en hot-reload.
|
||||
|
||||
### Les dépendances du conteneur
|
||||
|
||||
Le bind mount masquerait le dossier `node_modules` installé dans l'image. Le volume anonyme `/app/node_modules` le protège des fichiers absents ou incompatibles de l'hôte.
|
||||
|
||||
## Développement ou production
|
||||
|
||||
| Contexte | Stockage recommandé |
|
||||
| --- | --- |
|
||||
| Code en développement | Bind mount pour le hot-reload |
|
||||
| Dépendances internes | Volume anonyme si le bind mount les masque |
|
||||
| Données PostgreSQL | Volume nommé |
|
||||
| Code en production | Dans l'image, sans bind mount |
|
||||
| Données persistantes en production | Volume nommé et sauvegardé |
|
||||
Reference in New Issue
Block a user