Introduction
Docker est un outil puissant pour le déploiement d'applications, mais il peut sembler complexe au premier abord. Ce défi vous guidera dans la liaison de conteneurs Docker afin de créer une application multi-conteneurs. Nous commencerons par des exemples simples pour progresser graduellement vers une application plus complexe. Même si vous êtes novice avec Docker, vous trouverez ce guide facile à suivre. Nous explorerons comment faire communiquer les conteneurs entre eux, ce qui est un aspect fondamental pour construire des applications robustes avec Docker.
Créer une image avec un Dockerfile
Avant de pouvoir lier des conteneurs, nous devons disposer d'au moins une application conteneurisée. Dans cette étape, vous allez créer un Dockerfile pour votre image my-app. Ce Dockerfile définira l'environnement et l'application à exécuter au sein du conteneur.
Tâche
L'objectif de cette étape est de créer un Dockerfile pour votre image my-app.
Prérequis
- Docker doit être installé sur votre machine.
- Vous devez disposer d'une application
my-appexistante que vous souhaitez conteneuriser.
Exemple de résultat
Créez les fichiers nécessaires pour le défi :
Créez un nouveau fichier nommé
Dockerfiledans le répertoire/home/labex/project/avec le contenu suivant :- Utilisez
python:3.7-slimcomme image de base. - Définissez le répertoire de travail sur
/app. - Copiez le contenu du répertoire actuel dans le conteneur à
/app. - Installez les paquets requis.
- Exposez le port
80vers l'extérieur. - Définissez une variable d'environnement (bien que nous ne l'utilisions pas dans cet exemple, conservez l'instruction).
- Exécutez
app.pyau démarrage du conteneur.
Créez un fichier nommé
app.pydans votre répertoire de projet/home/labex/project/avec le contenu suivant :import os os.system("wssh --address='0.0.0.0' --port=80")Créez un fichier nommé
requirements.txtdans votre répertoire de projet/home/labex/project/avec le contenu suivant :webssh==1.6.2labex:project/ $ pwd /home/labex/project labex:project/ $ ll total 12K -rw-r--r-- 1 labex labex 59 Jan 24 15:21 app.py -rw-r--r-- 1 labex labex 163 Jan 24 15:19 Dockerfile -rw-r--r-- 1 labex labex 14 Jan 24 15:21 requirements.txt- Utilisez
Utilisez la commande
docker buildpour construire l'imagemy-app.labex:project/ $ docker images | grep my-app my-app latest 266edf714faf 30 seconds ago 170MBDémarrez un nouveau conteneur en utilisant l'image
my-appet notez le mappage des ports.labex:project/ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11f06f08d2d3 my-app "python app.py" 4 seconds ago Up 4 seconds 0.0.0.0:8080- hopeful_elgamal > 80/tcpOuvrez un navigateur web et accédez à
http://localhost:8080pour vérifier que votre application fonctionne correctement.
Lier deux conteneurs Docker
Maintenant que nous avons une application conteneurisée, passons à la liaison des conteneurs. Dans cette étape, nous apprendrons à lier deux conteneurs Docker, leur permettant ainsi de communiquer entre eux. Ce processus est essentiel pour créer des applications multi-services avec Docker.
Tâche
Lier un conteneur de serveur web Apache avec un conteneur de base de données MySQL.
Prérequis
- Vous aurez besoin de deux conteneurs Docker : un exécutant Apache et un autre exécutant MySQL.
- Docker doit être installé sur votre machine.
Astuce
- N'oubliez pas d'ouvrir un nouveau terminal pour démarrer cette étape afin d'éviter tout conflit avec votre conteneur précédent.
Exemple de résultat
Accéder à MySQL depuis le conteneur Apache :
Lancez un conteneur Apache nommé
my_apachebasé sur l'imagehttpd, en mappant le port hôte80sur le port conteneur80.labex:project/ $ docker ps | grep my_apache a91a93216e84 httpd "httpd-foreground" 52 seconds ago Up 47 seconds 0.0.0.0:80- my_apache > 80/tcpLancez un conteneur MySQL nommé
my_mysql, en définissant la variable d'environnementMYSQL_ROOT_PASSWORDsurpassword, en utilisant l'imagemysql.labex:project/ $ docker ps | grep mysql 0cb864cf97c6 mysql "docker-entrypoint.s…" 42 seconds ago Up 35 seconds 3306/tcp, 33060/tcp my_mysqlLiez le conteneur Apache au conteneur MySQL. Note : Pour cette étape, aucune sortie de commande directe n'est attendue, mais le lien sera visible dans les variables d'environnement du conteneur. Vous pouvez inspecter le conteneur avec la commande
docker inspect my_apache.labex:project/ $ docker ps | grep my_app 859c201b7267 my-app "python app.py" 53 seconds ago Up 52 seconds 80/tcp my_appUtilisez la commande
docker execpour accéder à l'interface de ligne de commande MySQL depuis le conteneurmy_app(vous devrez adapter la commande si vous avez effectué la liaison différemment).Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.3.0 MySQL Community Server - GPL Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>
Lier plusieurs conteneurs Docker et utiliser des variables d'environnement
En nous appuyant sur l'étape précédente, cette partie ajoute deux nouveaux concepts : un conteneur d'application qui se lie aux deux services, et le conteneur qui reçoit les paramètres de connexion via des variables d'environnement. À l'étape 2, vous avez seulement prouvé que les conteneurs liés peuvent se joindre. Dans cette étape, vous devez démarrer my_app2 avec les deux options --link et les variables d'environnement qui décrivent les hôtes MySQL et Apache.
Tâche
Lancez trois conteneurs : un exécutant Apache, un exécutant MySQL et un exécutant une application personnalisée. L'application personnalisée doit pouvoir accéder à la fois à MySQL et à Apache.
Prérequis
- Vous aurez besoin de trois conteneurs Docker : Apache, MySQL et une application personnalisée.
- Démarrez
my_app2avec les deux liens et ces variables d'environnement :DB_HOST=mysql,DB_USER=root,DB_PASSWORD=passwordetAPACHE_HOST=apache. - Installez
curlà l'intérieur demy_app2avant de tester la connexion Apache, car l'imagemy-appne l'inclut pas par défaut. - Docker doit être installé sur votre machine.
Exemple de résultat
Lancez un conteneur Apache et un conteneur MySQL comme décrit à l'étape 2.
Lancez un conteneur d'application personnalisée nommé
my_app2capable d'accéder à la fois à MySQL et à Apache.labex:project/ $ docker ps | grep app2 8945b42659a6 my-app "python app.py" 15 seconds ago Up 15 seconds 80/tcp my_app2Entrez dans
my_app2, installezcurlet exécutezcurl http://apache/pour confirmer que le conteneur Apache lié est accessible.<html> <body> <h1>It works!</h1> </body> </html>
Résumé
Dans ce défi, vous avez appris à lier des conteneurs Docker entre eux pour créer des applications multi-conteneurs. Nous sommes passés d'un seul conteneur à des paires liées, pour finir par une configuration à trois conteneurs. Vous comprenez désormais comment tirer parti des liens entre conteneurs et de la commande docker exec pour permettre la communication entre différents services, ce qui vous permet de construire des applications plus complexes. Continuez à expérimenter et amusez-vous bien !



