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
.
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.
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.
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 :
- 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
. - Séparation des réseaux : utiliser plusieurs réseaux permet d'isoler différentes parties de l'application et de contrôler leurs interactions.
- 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.
- 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
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
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.
GO TO FULL VERSION