Connecter des conteneurs avec Link

DockerBeginner
Pratiquer maintenant

Introduction

Docker est un outil incontournable pour le déploiement d'applications, bien que sa prise en main puisse paraître complexe de prime abord. Ce défi vous accompagnera dans l'apprentissage de la liaison entre conteneurs Docker afin de structurer une application multi-conteneurs. Nous débuterons par des manipulations simples avant de monter en puissance vers une architecture plus élaborée. Que vous fassiez vos premiers pas avec Docker ou non, ce parcours est conçu pour être fluide. Nous explorerons comment établir une communication entre les conteneurs, un aspect fondamental pour bâtir des applications robustes et scalables.

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 concevoir un Dockerfile pour votre image my-app. Ce fichier définira l'environnement d'exécution et l'application qui sera lancée au sein du conteneur.

Tâche

L'objectif de cette étape est de créer un Dockerfile fonctionnel pour générer votre image my-app.

Prérequis

  • Docker doit être installé sur votre machine.
  • Vous devez disposer d'une application my-app prête à être conteneurisée.

Exemple de résultat

  1. Préparez les fichiers nécessaires pour le défi :

    Créez un nouveau fichier nommé Dockerfile dans le répertoire /home/labex/project/ avec le contenu suivant :

    • Utilisez python:3.7-slim comme image de base.
    • Définissez le répertoire de travail sur /app.
    • Copiez le contenu du répertoire actuel dans le conteneur sous /app.
    • Installez les paquets requis.
    • Exposez le port 80 pour l'accès externe.
    • Définissez une variable d'environnement (même si elle n'est pas utilisée ici, conservez l'instruction).
    • Lancez app.py au démarrage du conteneur.

    Créez un fichier nommé app.py dans 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.txt dans votre répertoire de projet /home/labex/project/ avec le contenu suivant :

    webssh==1.6.2
    labex: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
  2. Utilisez la commande docker build pour construire l'image my-app.

    labex:project/ $ docker images | grep my-app
    my-app latest 266edf714faf 30 seconds ago 170MB
  3. Démarrez un nouveau conteneur à partir de l'image my-app et vérifiez 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/tcp
  4. Ouvrez un navigateur web et accédez à http://localhost:8080 pour confirmer que votre application fonctionne correctement.

    Application web tournant dans le navigateur
✨ Vérifier la solution et pratiquer

Lier deux conteneurs Docker

Maintenant que nous avons une application conteneurisée, passons à la liaison de conteneurs. Dans cette étape, nous allons apprendre à connecter deux conteneurs Docker pour leur permettre de communiquer entre eux. Ce processus est essentiel pour concevoir des applications multi-services.

Tâche

Lier un conteneur serveur web Apache à un conteneur de base de données MySQL.

Prérequis

  • Vous aurez besoin de deux conteneurs : l'un exécutant Apache et l'autre MySQL.
  • Docker doit être installé sur votre machine.

Astuce

  • Pensez à ouvrir un nouveau terminal pour cette étape afin d'éviter tout conflit avec vos conteneurs précédents.

Exemple de résultat

Accéder à MySQL depuis le conteneur Apache :

  1. Lancez un conteneur Apache nommé my_apache basé sur l'image httpd, en mappant le port hôte 80 sur le port 80 du conteneur.

    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/tcp
  2. Lancez un conteneur MySQL nommé my_mysql, en définissant la variable d'environnement MYSQL_ROOT_PASSWORD sur password, en utilisant l'image mysql.

    labex:project/ $ docker ps | grep mysql
    0cb864cf97c6 mysql "docker-entrypoint.s…" 42 seconds ago Up 35 seconds 3306/tcp, 33060/tcp my_mysql
  3. Liez le conteneur Apache au conteneur MySQL.
    Note : Pour cette étape, aucune sortie 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_app
  4. Utilisez la commande docker exec pour accéder à l'interface en ligne de commande MySQL depuis le conteneur my_app (adaptez la commande si vos liens sont nommés 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)]>
✨ Vérifier la solution et pratiquer

Lier plusieurs conteneurs et utiliser des variables d'environnement

En nous appuyant sur l'étape précédente, nous allons maintenant explorer la liaison de plusieurs conteneurs simultanément et l'utilisation des variables d'environnement pour la configuration. Cette étape démontre comment créer des environnements multi-conteneurs plus complexes et flexibles.

Tâche

Lancer 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.
  • Docker doit être installé sur votre machine.

Exemple de résultat

  1. Lancez les conteneurs Apache et MySQL comme décrit à l'étape 2.

  2. Lancez un conteneur d'application personnalisée nommé my_app2 capable d'accéder à MySQL et Apache.

    labex:project/ $ docker ps | grep app2
    8945b42659a6 my-app "python app.py" 15 seconds ago Up 15 seconds 80/tcp my_app2
  3. Utilisez curl pour accéder à l'application personnalisée via le conteneur Apache.

    <html>
      <body>
        <h1>It works!</h1>
      </body>
    </html>
✨ Vérifier la solution et pratiquer

Résumé

Au cours de ce défi, vous avez appris à lier des conteneurs Docker pour structurer des applications multi-conteneurs. Nous avons progressé d'un conteneur unique vers des paires liées, pour finir sur une architecture à trois conteneurs. Vous comprenez désormais comment exploiter les liens entre conteneurs et la commande docker exec pour permettre la communication entre différents services, vous permettant ainsi de bâtir des applications plus sophistiquées. Continuez à expérimenter et amusez-vous bien !