Docker - Liaison entre Conteneurs
Introduction à la Liaison entre Conteneurs
Bonjour, chers passionnés de Docker ! Aujourd'hui, nous allons plonger dans le monde passionnant de la liaison entre conteneurs. En tant qu'enseignant en informatique de votre quartier, je suis là pour vous guider dans ce périple, même si vous n'avez jamais écrit une ligne de code auparavant. Alors, bouclez votre ceinture et mettons les voiles sur la mer des conteneurs !
La liaison entre conteneurs est comme présenter deux amis à une fête. Elle permet aux conteneurs de communiquer entre eux, partageant des informations et des ressources. Imaginez que vous êtes à un dîner de potluck (c'est notre hôte Docker), et que chaque plat (conteneur) doit savoir quels autres plats sont disponibles. C'est essentiellement ce que nous faisons avec la liaison entre conteneurs !
Pourquoi la Liaison entre Conteneurs est Importante
Vous vous demandez peut-être : "Pourquoi devrais-je m'intéresser à la liaison entre conteneurs ?" Eh bien, laissez-moi vous raconter une petite histoire. Il fut un temps, dans un centre de données bien lointain, où les applications vivaient en isolement. Elles ne pouvaient pas communiquer entre elles, partager des données ou travailler ensemble. C'était une existence solitaire. Mais alors, la liaison entre conteneurs est apparue et a changé tout !
La liaison entre conteneurs nous permet de :
- Créer des applications complexes multi-conteneurs
- Partager des données entre les conteneurs
- Améliorer la sécurité en isolant les services
- Étendre nos applications plus facilement
Liaison entre Conteneurs de Base
Commençons par un exemple simple. Nous allons créer deux conteneurs : un serveur web et une base de données, et les relier ensemble.
Étape 1 : Créer le Conteneur de Base de Données
Premièrement, nous allons créer notre conteneur de base de données. Nous utiliserons MySQL pour cet exemple.
docker run -d --name mydb -e MYSQL_ROOT_PASSWORD=secret mysql:latest
Décomposons cela :
-
-d
: Exécuter le conteneur en mode détaché (en arrière-plan) -
--name mydb
: Donner un nom à notre conteneur -
-e MYSQL_ROOT_PASSWORD=secret
: Définir une variable d'environnement pour le mot de passe root -
mysql:latest
: Utiliser l'image MySQL la plus récente
Étape 2 : Créer le Conteneur du Serveur Web
Maintenant, créons notre conteneur de serveur web et liez-le à la base de données.
docker run -d --name myweb --link mydb:db -p 80:80 nginx:latest
Voici ce qui se passe :
-
--link mydb:db
: C'est la magie ! Nous lions notre conteneurmydb
et l'appelonsdb
à l'intérieur de notre conteneur web -
-p 80:80
: Mapper le port 80 de l'hôte au port 80 du conteneur
Comprendre le Liaison
Lorsque nous utilisons l'option --link
, Docker fait plusieurs choses pour nous :
- Il ajoute une entrée dans le fichier
/etc/hosts
du conteneur web - Il définit des variables d'environnement dans le conteneur web
- Il permet au conteneur web de se connecter au conteneur de base de données
Jetons un coup d'œil à l'intérieur de notre conteneur web pour voir ce qui se passe :
docker exec -it myweb bash
Une fois à l'intérieur, nous pouvons vérifier le fichier /etc/hosts
:
cat /etc/hosts
Vous devriez voir une entrée pour le conteneur db
avec son adresse IP.
Variables d'Environnement
Docker configure également des variables d'environnement pour nous. Listons-les :
env | grep DB_
Vous verrez des variables comme DB_PORT
, DB_NAME
, etc. Cela rend facile pour notre application de se connecter à la base de données.
Liaison Héritée vs. Réseaux Définis par l'Utilisateur
Maintenant, j'ai une confession à faire. Le drapeau --link
que nous venons d'utiliser est en fait considéré comme obsolète dans Docker. C'est comme utiliser un téléphone à clapet dans l'ère des smartphones - ça marche, mais il y a de meilleures options disponibles.
La méthode moderne pour relier les conteneurs est d'utiliser des réseaux définis par l'utilisateur. Voyons comment cela fonctionne :
Étape 1 : Créer un Réseau
docker network create mynetwork
Étape 2 : Exécuter les Conteneurs sur le Réseau
docker run -d --name mydb --network mynetwork -e MYSQL_ROOT_PASSWORD=secret mysql:latest
docker run -d --name myweb --network mynetwork -p 80:80 nginx:latest
Maintenant, nos conteneurs peuvent communiquer en utilisant leurs noms comme noms d'hôte, sans aucun lien explicite !
Avantages des Réseaux Définis par l'Utilisateur
Les réseaux définis par l'utilisateur offrent plusieurs avantages :
- Une meilleure isolation
- Une résolution DNS automatique
- La capacité de connecter/déconnecter les conteneurs des réseaux à la volée
Exemple Pratique : WordPress et MySQL
Mettons nos connaissances à l'œuvre avec un exemple du monde réel : configurer WordPress avec MySQL.
Étape 1 : Créer un Réseau
docker network create wordpress-network
Étape 2 : Exécuter le Conteneur MySQL
docker run -d --name wordpress-db --network wordpress-network -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpresspassword mysql:5.7
Étape 3 : Exécuter le Conteneur WordPress
docker run -d --name wordpress-site --network wordpress-network -e WORDPRESS_DB_HOST=wordpress-db -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpresspassword -e WORDPRESS_DB_NAME=wordpress -p 8080:80 wordpress:latest
Maintenant, si vous allez sur http://localhost:8080
dans votre navigateur, vous devriez voir la page de configuration de WordPress !
Conclusion
Félicitations ! Vous avez刚刚 pris vos premiers pas dans le monde de la liaison entre conteneurs. Nous avons couvert beaucoup de terrain, de la liaison de base aux réseaux définis par l'utilisateur, et même configuré un site WordPress utilisant des conteneurs.
Souvenez-vous, la liaison entre conteneurs permet à nos applications de travailler ensemble en harmonie. C'est comme diriger un orchestre - chaque conteneur est un instrument, et lorsqu'ils sont correctement liés, ils créent une belle musique ensemble.
Comme vous continuez votre voyage avec Docker, continuez à expérimenter avec différents conteneurs et options de networking. Plus vous pratiquez, plus vous deviendrez à l'aise avec ces concepts.
Bonne conteneurisation, et puissent vos images Docker toujours se construire avec succès !
Méthode | Description | Exemple |
---|---|---|
Liaison Héritée | Utilise le drapeau --link pour connecter les conteneurs |
docker run --name myweb --link mydb:db nginx:latest |
Réseaux Définis par l'Utilisateur | Crée un réseau personnalisé pour que les conteneurs puissent communiquer | docker network create mynetwork |
Variables d'Environnement | Définies automatiquement par Docker lors de la liaison des conteneurs |
DB_PORT , DB_NAME , etc. |
Résolution DNS | Permet aux conteneurs de communiquer en utilisant les noms des conteneurs | mysql://wordpress-db:3306 |
Mapper les Ports | Expose les ports du conteneur à l'hôte | -p 8080:80 |
Credits: Image by storyset