⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Partager des données entre conteneurs

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

Étapes suivantes