Gérer les volumes et réseaux docker
Gérer les volumes et les réseaux Docker
Cet article explique comment gérer les volumes et les réseaux Docker pour les données persistantes et une communication sécurisée entre services dans les applications multi-conteneurs.
Prérequis
- Docker Engine 24.0 ou supérieur - Docker Compose V2 (intégré à Docker Desktop ou installé séparément) - Connaissances de base des conteneurs Docker et du fichier `docker-compose.yml` - Terminal ou CLI avec la commande `docker` disponible
Étapes
1. Créez un volume nommé pour les données persistantes
Utilisez `docker volume create` plutôt que des bind mounts. Cela donne à Docker un contrôle total sur le stockage.
docker volume create mijn-data
2. Définissez les volumes de manière déclarative dans docker-compose.yml Ajoutez une section `volumes` de niveau supérieur et liez-la à un service. Cela garantit la reproductibilité et une séparation claire.
volumes:
db-data:
services:
database:
image: postgres:16
volumes:
- db-data:/var/lib/postgresql/data3. Créez un réseau bridge défini par l'utilisateur Au lieu du réseau par défaut, utilisez un réseau nommé pour une meilleure résolution DNS et une meilleure isolation.
networks:
app-net:
driver: bridge4. Connectez les services au réseau Indiquez quels services doivent communiquer entre eux. Une base de données ne doit pas nécessairement être accessible directement depuis l'extérieur.
services:
web:
image: nginx:latest
networks:
- app-net
database:
image: postgres:16
networks:
- app-net5. Isolez un réseau avec `internal: true` Utilisez cela pour les bases de données ou les services backend qui n'ont pas besoin d'accès à Internet.
networks:
internal-net:
driver: bridge
internal: true6. Ajoutez un service à plusieurs réseaux Un service applicatif peut par exemple se trouver à la fois dans un réseau public et un réseau interne.
services:
app:
image: my-app:latest
networks:
- frontend-net
- backend-net7. Nettoyez les volumes inutilisés
Les volumes qui ne sont plus liés à un conteneur continuent d'occuper de l'espace disque. Nettoyez-les périodiquement.
docker volume prune
8. Utilisez des plugins de volume pour les configurations multi-hôtes Pour les clusters (Docker Swarm, Kubernetes), utilisez un stockage externe via des plugins. Cela permet la migration des volumes entre hôtes.
volumes:
shared-data:
driver: nfs
driver_opts:
server: nfs-server.example.com
path: /exports/dataVérification
Vérifiez que les volumes sont correctement créés et que les réseaux fonctionnent :
Liste tous les volumes
docker volume ls</p><p>Inspecte un volume
docker volume inspect mijn-data</p><p>Affiche les réseaux et les conteneurs connectés
docker network ls
docker network inspect app-netTestez la résolution DNS entre les services :
docker compose exec web ping database
Problèmes fréquents
1. Le conteneur ne trouve pas un autre service par nom d'hôte Cause : Les services ne se trouvent pas dans le même réseau défini par l'utilisateur. Solution : Ajoutez explicitement les deux services au même réseau nommé dans `docker-compose.yml`.
2. Les données disparaissent après la suppression du conteneur Cause : Utilisation du stockage interne du conteneur au lieu d'un volume. Solution : Définissez un volume nommé et liez-le au service. Committer des conteneurs ne remplace pas cela.
3. L'espace du volume est plein, mais le conteneur tourne toujours Cause : Les volumes inutilisés persistent. Solution : Exécutez `docker volume prune` régulièrement ou automatisez-le via une tâche cron. Ajoutez `--filter` pour conserver des volumes spécifiques.
Les erreurs courantes proviennent du mélange de bind mounts et de volumes dans la même application — choisissez une seule stratégie et tenez-vous-y.