CodeGym /Cours /Docker SELF /Montage des volumes et des réseaux

Montage des volumes et des réseaux

Docker SELF
Niveau 16 , Leçon 1
Disponible

7.1 Montage des volumes

Le montage des volumes et des réseaux dans Docker Compose permet de créer des applications multi-conteneurs flexibles et efficaces. Les volumes sont utilisés pour stocker les données qui doivent être conservées en dehors des conteneurs, tandis que les réseaux assurent l'interaction entre les conteneurs. Dans cette conférence, nous examinerons en détail comment utiliser les volumes et les réseaux dans Docker Compose.

Les volumes dans Docker permettent de conserver des données en dehors des conteneurs, garantissant leur disponibilité même après l'arrêt ou la suppression des conteneurs. C'est particulièrement utile pour stocker les données des bases de données, les fichiers logs et d'autres données qui doivent être permanentes.

Types de volumes :

  • Volumes nommés (Named Volumes) : gérés par Docker et sauvegardés dans un répertoire spécial sur le host.
  • Volumes montés (Bind Mounts) : montés dans un conteneur depuis un répertoire spécifié sur le host.

Définir des volumes dans Docker Compose

Exemple de volumes nommés

Dans cet exemple, un volume nommé postgres-data est créé et monté dans le répertoire /var/lib/postgresql/data à l'intérieur du conteneur db.

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:

Exemple de volumes montés

Dans cet exemple, les répertoires et fichiers locaux nginx.conf et html sont montés dans le conteneur web en tant que volumes montés.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
<

7.2 Montage des réseaux

Les réseaux dans Docker Compose permettent aux containers de communiquer entre eux. Chaque container peut être connecté à un ou plusieurs réseaux, ce qui assure l'isolation et la gestion du trafic.

Types de réseaux :

  • Réseaux bridge : par défaut, les containers se connectent à un réseau bridge, ce qui leur permet de communiquer sur un même hôte.
  • Réseaux overlay : utilisés pour connecter des containers exécutés sur différents hôtes dans un cluster Docker Swarm.
  • Plugins réseau : permettent d'utiliser des drivers réseau tiers pour des configurations plus complexes.

Exemple de création et d'utilisation de réseaux personnalisés

Dans cet exemple, deux réseaux personnalisés front-end et back-end sont créés. Le service app est connecté aux deux réseaux, le service web uniquement à front-end, et le service db uniquement à back-end.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - front-end

  app:
    image: myapp:latest
    networks:
      - front-end
      - back-end

  db:
    image: postgres:latest
    networks:
      - back-end

networks:
  front-end:
  back-end:

Conseils pratiques :

  1. Utilisation des volumes nommés : les volumes nommés sont gérés par Docker et permettent une utilisation et une gestion des données simplifiées. Les volumes nommés peuvent être montés sur plusieurs services en même temps. Par exemple, un service backend enregistre des logs, et un service de monitoring les analyse et envoie des notifications lorsqu'il détecte des erreurs de niveau error.
  2. Séparation des réseaux : utiliser plusieurs réseaux permet d'isoler différentes parties de l'application et de contrôler leurs interactions.
  3. Stockage des fichiers de configuration : utilisez des volumes montés pour les fichiers de configuration, ce qui permet de modifier facilement les configurations sans reconstruire les images.
  4. Sécurité des réseaux : limitez l'accès aux réseaux de manière à ce que seuls les containers nécessaires puissent interagir, ce qui renforce la sécurité de l'application.

7.3 Exemples d'utilisation des volumes et des réseaux

Exemples d'utilisation des volumes et des réseaux dans Docker Compose :

Exemple 1 : Application avec un serveur web et une base de données

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
    networks:
      - webnet

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - webnet

volumes:
  db-data:

networks:
  webnet:

Dans cet exemple :

  • Le serveur web nginx et la base de données PostgreSQL sont connectés à un seul réseau webnet, ce qui leur permet d'interagir. S'il n'y a qu'un seul réseau, il n'est pas nécessaire de le spécifier - un réseau par défaut sera créé.
  • Les données de la base de données sont stockées dans un volume nommé db-data, garantissant leur persistance lors du redémarrage des conteneurs.

Exemple 2 : Application multi-niveaux

Yaml

version: '3.8'

services:
  frontend:
    image: myfrontend:latest
    networks:
      - front-tier
      - back-tier

  backend:
    image: mybackend:latest
    networks:
      - back-tier
    volumes:
      - backend-data:/var/lib/backend

  database:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - back-tier

volumes:
  backend-data:
  db-data:

networks:
  front-tier:
  back-tier:

Dans cet exemple :

  • Deux réseaux ont été créés : front-tier et back-tier.
  • Le service frontend est connecté aux deux réseaux, ce qui lui permet d'interagir à la fois avec le backend et avec les clients externes.
  • Les services backend et database sont connectés uniquement au réseau back-tier pour garantir leur isolation et leur interaction.
  • Les données des services backend et database sont stockées dans des volumes nommés distincts backend-data et db-data.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION