Article

Docker : bien utiliser les volumes et les réseaux

Connecter tes conteneurs entre eux et gérer les données persistantes avec les volumes et les réseaux Docker, sans te retrouver avec une base de données effacée par erreur.

Docker : bien utiliser les volumes et les réseaux

Docker : bien utiliser les volumes et les réseaux

Lancer docker run avec une image publique, c'est sympa. Mais très vite tu as besoin de deux choses :

  • garder les données (base de données, fichiers d'upload, etc.) même quand tu recrées un conteneur ;
  • faire discuter plusieurs conteneurs entre eux (API + base, front + API, worker + broker, etc.).

Pour ça, Docker te donne deux outils clés : les volumes et les réseaux.


Volumes : où vivent tes données

Sans volume, tout ce qui vit dans le système de fichiers du conteneur disparaît dès qu'il est supprimé.

Types de volumes

En pratique, tu verras surtout :

  • Volumes nommés : gérés par Docker.
  • Bind mounts : montage d'un dossier de ta machine hôte dans le conteneur.
# Volume nommé
docker volume create db-data

docker run -d --name db \
  -v db-data:/var/lib/postgresql/data \
  postgres:16

# Bind mount (développement)
docker run -d --name api \
  -v "$PWD/src":/app/src \
  my-api-image:latest

Quelques règles simples :

  • Pour la prod, privilégie les volumes nommés → Docker gère l'emplacement, la portabilité.
  • Pour le dev, les bind mounts sont parfaits pour éditer le code en live.

Inspecter et nettoyer les volumes

docker volume ls
docker volume inspect db-data
docker volume rm db-data

Attention au ménage : supprimer un volume = perdre les données qui sont dedans.
Sur une base de dev, ce n'est pas grave. Sur une base prod… tu vois l'idée.


Réseaux Docker : faire parler les conteneurs

Par défaut, Docker crée un réseau bridge. Tu peux déjà faire :

docker run -d --name db postgres:16
docker run -d --name api --link db postgres:16

Mais la bonne pratique moderne, c'est de créer ton propre réseau.

docker network create mon-app-net

docker run -d --name db --network mon-app-net postgres:16
docker run -d --name api --network mon-app-net my-api-image:latest

Dans ce réseau :

  • Le conteneur api peut joindre la base via db:5432.
  • Tu n'as pas besoin d'exposer le port 5432 vers l'extérieur pour qu'ils se parlent.

Ports vs réseaux : ne pas tout exposer

On distingue :

  • Port exposé vers l'hôte : -p 8080:80 → tu ouvres 8080 sur ta machine.
  • Port interne au réseau : --network mon-app-net → seulement visible entre conteneurs.

Bonne pratique :

  • N'ouvre vers l'extérieur que ce qui est vraiment nécessaire (souvent le reverse proxy ou l'API publique).
  • Laisse les bases, brokers, workers cachés derrière le réseau Docker.

Exemple concret : API + base de données

docker network create app-net

docker run -d --name postgres \
  --network app-net \
  -e POSTGRES_PASSWORD=secret \
  -v db-data:/var/lib/postgresql/data \
  postgres:16

docker run -d --name api \
  --network app-net \
  -e DATABASE_URL=postgresql://postgres:secret@postgres:5432/appdb \
  -p 8080:3000 \
  my-api-image:latest
  • L'extérieur parle à l'API via localhost:8080.
  • L'API parle à la base via postgres:5432 dans le réseau app-net.

Volumes et réseaux avec docker-compose

Dans le prochain article, on utilisera docker-compose pour décrire ce genre de stack dans un fichier YAML :

  • services (api, db, redis, etc.)
  • réseaux (frontend, backend)
  • volumes (db-data, uploads, etc.).

L'idée : pouvoir tout lancer/arrêter avec un simple docker compose up / down.

Articles recommandés

Devis par e-mail

Recevoir votre devis

Indiquez votre e-mail : le PDF part tout de suite, sans engagement.

Récapitulatif

    Total HT
    TTC (TVA 20 %)

    Où envoyer votre devis ?

    Le PDF arrive à cette adresse en quelques secondes.

    Préciser votre besoin facultatif
    • Sans engagement
    • Réponse sous 24 h ouvrées
    • Devis PDF par e-mail

    Tarif HT selon les options choisies. Devis PDF envoyé par e-mail.