Comment connecter en réseau deux conteneurs avec docker-compose
La mise en réseau est l’un des aspects fondamentaux de l’utilisation des conteneurs dans Docker. À l’aide de Docker Compose, vous pouvez facilement connecter plusieurs conteneurs et gérer des applications complexes composées de plusieurs services. Dans cet article, nous allons explorer comment connecter efficacement deux conteneurs à l’aide de Docker Compose. À la fin, vous aurez une compréhension claire de la façon de définir les réseaux dans votre configuration et de permettre une communication transparente entre vos services.
Dans ce tutoriel, vous allez apprendre :
- Comment définir un réseau dans votre fichier
docker-compose.yml - Comment connecter plusieurs services au même réseau
- Les avantages de l’utilisation des réseaux Docker pour la communication de conteneurs
Configuration logicielle requise et conventions de ligne de commande Linux
Comment connecter deux conteneurs avec docker-compose
COMPRENDRE LA MISE EN RÉSEAU DOCKER
La définition correcte des réseaux dans Docker Compose est cruciale pour la communication des conteneurs. Les conteneurs d’un même réseau peuvent communiquer en utilisant uniquement leurs noms de service.
La connexion de conteneurs dans Docker Compose implique la création d’un fichier docker-compose.yml qui spécifie les services et le réseau par lequel ils communiqueront. Plongeons dans la configuration.
Instructions étape par étape
Créez un fichier docker-compose.yml : commencez par créer un nouveau répertoire et un fichier
docker-compose.ymlà l’intérieur de celui-ci.mkdir my_project && cd my_projecttouch docker-compose.ymlCe fichier définira les services et les réseaux de votre application.
Définissez vos services : ouvrez le fichier
docker-compose.ymlet définissez les services que vous souhaitez connecter. Deux options s’offrent à vous pour la mise en réseau : utiliser un réseau explicite ou autoriser Docker à créer un réseau par défaut.
Option 1 : Réseau explicite
Cette méthode vous donne plus de contrôle sur la mise en réseau en définissant explicitement un réseau personnalisé nommé
my_network.version: '3' services: web: image: nginx networks: - my_network db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example networks: - my_network networks: my_network:Dans cette configuration :
- Un
my_networkréseau personnalisé est explicitement créé.
- Un
- Les services
webetdbsont tous deux rattachés àmy_network. - Cela isole les services des autres conteneurs, à moins qu’ils ne soient ajoutés manuellement au même réseau.
- Docker Compose crée automatiquement un réseau nommé
your_project_default. Webetdbsont tous deux connectés à ce réseau par défaut.- Les conteneurs peuvent toujours communiquer à l’aide de noms de service (par exemple,
db). - Utilisez le réseau explicite si vous avez besoin d’une meilleure gestion du réseau, de plusieurs réseaux ou d’une isolation de service.
- Utilisez le réseau par défaut si tous les services doivent communiquer automatiquement au sein d’un même projet, sans configuration supplémentaire.
Exécutez votre configuration Docker Compose : une fois le fichier
docker-compose.ymlen place, lancez vos services à l’aide de la commande suivante.docker-compose up -dTester la communication du conteneur : pour voir si les conteneurs peuvent communiquer, vous pouvez entrer le conteneur Web et envoyer une commande ping au conteneur de base de données à l’aide de son nom de service.
docker exec -it my_project_web_1 /bin/bashEnsuite, à l’intérieur du conteneur docker, exécutez :
root@container:/# apt update && apt install -y iputils-ping root@container:/# ping db
Option 2 : Réseau par défaut (créé automatiquement)
Si vous ne définissez pas de réseau, Docker Compose crée automatiquement un réseau nommé your_project_default. Les conteneurs peuvent toujours communiquer à l’aide de noms de service.
version: '3'
services:
web:
image: nginx
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: exampleDans cette configuration :
Principales différences entre les réseaux explicites et les réseaux par défaut
| Caractéristique | Réseau explicite | Réseau par défaut |
|---|---|---|
| Nom du réseau | Défini par l’utilisateur (par exemple, my_network) | Créé automatiquement (your_project_default) |
| Résolution de noms de service | Oui | Oui |
| Réseaux multiples | Oui (peut attribuer des services à plusieurs réseaux) | Non (tous les services sont dans un réseau par défaut) |
| Isolement | Oui (seuls les conteneurs d’un même réseau personnalisé peuvent communiquer) | Oui (seuls les conteneurs d’un même projet communiquent) |
| Nettoyage manuel requis ? | Oui (le réseau est supprimé lorsque les conteneurs s’arrêtent) | Oui (le réseau par défaut est supprimé lorsque les conteneurs s’arrêtent) |
Quelle option devriez-vous choisir ?
Cette commande démarre vos services en mode détaché, ce qui leur permet de s’exécuter en arrière-plan.
Utilisez
toujours des noms de service spécifiques pour garantir la clarté de vos configurations et éviter les conflits potentiels.
Conclusion
La connexion de conteneurs avec Docker Compose est un processus simple qui améliore la communication entre les services de vos applications. En utilisant les réseaux Docker, vous pouvez vous assurer que vos services sont regroupés logiquement et peuvent communiquer efficacement les uns avec les autres. Ce tutoriel fournit un exemple pratique de configuration d’une connexion de base à un service Web et de base de données. Au fur et à mesure que vous créez des applications plus complexes, il est essentiel de comprendre ces concepts de mise en réseau.
Foire aux questions (FAQ)
Qu’est-ce que Docker Compose ?
Docker Compose est un outil permettant de définir et d’exécuter des applications Docker multi-conteneurs. Il vous permet de configurer les services de votre application dans un seul fichier.
Comment puis-je accéder à un service à partir d’un autre conteneur ?
Vous pouvez accéder à un service à partir d’un autre conteneur à l’aide du nom de service défini dans votre fichier
docker-compose.ymlcomme nom d’hôte.Puis-je connecter un conteneur à plusieurs réseaux ?
Oui, vous pouvez connecter un seul conteneur à plusieurs réseaux en spécifiant des réseaux supplémentaires dans votre définition de service.
Que se passe-t-il si je ne définis pas de réseau ?
Si vous ne définissez pas de réseau, Docker créera un réseau de pont par défaut pour vos conteneurs, mais il est

