Partager des données entre conteneurs
Table des matières
Cette page explique les différentes façons de partager des données entre conteneurs dans une application Docker Compose.
Présentation
Docker Compose offre plusieurs méthodes pour partager des données entre conteneurs :
- Volumes nommés
- Volumes anonymes
- Bind mounts
- tmpfs mounts
Volumes nommés
Les volumes nommés sont la méthode recommandée pour partager des données persistantes.
services:
web:
image: nginx
volumes:
- web-data:/var/www/html
app:
image: myapp
volumes:
- web-data:/app/public
volumes:
web-data:
Avantages :
- Gérés par Docker
- Portables entre environnements
- Peuvent être sauvegardés facilement
Bind mounts
Les bind mounts lient un répertoire de l'hôte à un conteneur :
services:
web:
image: nginx
volumes:
- ./html:/var/www/html
app:
image: myapp
volumes:
- ./html:/app/public
Avantages :
- Accès direct aux fichiers de l'hôte
- Utile pour le développement
- Modifications en temps réel
Volumes de conteneur
Partager les volumes d'un autre conteneur :
services:
data:
image: busybox
volumes:
- data-volume:/data
app1:
image: myapp
volumes_from:
- data
app2:
image: myapp2
volumes_from:
- data
volumes:
data-volume:
Exemples pratiques
Base de données partagée
services:
db:
image: postgres
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- db-data:/var/lib/postgresql/data
backup:
image: postgres
command: pg_dump -h db -U user myapp
volumes:
- db-data:/var/lib/postgresql/data
- ./backups:/backups
depends_on:
- db
volumes:
db-data:
Logs partagés
services:
app:
image: myapp
volumes:
- logs:/var/log/app
logrotate:
image: logrotate
volumes:
- logs:/logs
depends_on:
- app
volumes:
logs:
Développement avec code source
services:
web:
build: .
volumes:
- .:/app
- node_modules:/app/node_modules
watcher:
image: node:alpine
working_dir: /app
command: npm run watch
volumes:
- .:/app
- node_modules:/app/node_modules
volumes:
node_modules:
Bonnes pratiques
Sécurité
- Utilisez des volumes nommés pour les données sensibles
- Limitez les bind mounts aux environnements de développement
- Définissez des permissions appropriées
Performance
- Utilisez tmpfs pour les données temporaires :
services:
app:
image: myapp
tmpfs:
- /tmp
- /var/cache
Sauvegarde
Créez des stratégies de sauvegarde pour vos volumes :
services:
backup:
image: alpine
command: tar czf /backup/data.tar.gz /data
volumes:
- data-volume:/data:ro
- ./backups:/backup
volumes:
data-volume:
Dépannage
Permissions
Si vous rencontrez des problèmes de permissions :
services:
app:
image: myapp
user: "1000:1000"
volumes:
- data:/app/data
volumes:
data:
driver_opts:
type: none
o: bind,uid=1000,gid=1000
device: /host/path
Vérification des volumes
Listez les volumes :
$ docker volume ls
Inspectez un volume :
$ docker volume inspect myapp_data-volume