4204d4

🐳 Applications – Multi-services

Source : https://4204d4.ve2cuy.com/docker-application-multi-service/ Date : 11 février 2021 - Actualisé 2025.12.04

Et pourquoi pas un défi de taille

Docker - Application Multi-services

Pré-requis


1 – Les variables d’environnement

Mise en situation

Lors de l’assemblage d’une application multi-conteneurs (appelĂ© aussi MICRO-SERVICES), il sera peut-ĂȘtre nĂ©cessaire de fournir, Ă  un conteneur, des paramĂštres fonctionnels d’un autre conteneur : 🙃.

đŸ€– Quel est cet autre conteneur? đŸ€–

Prenons une application constituĂ©e d’un conteneur, pour une base de donnĂ©es de type ‘MySQL’ et, un autre conteneur pour l’application Web de gestion du SGBD MySQL, ‘phpmyadmin’.

Lors de l’instanciation de l’image de type ‘phpmyadmin’, il sera nĂ©cessaire de renseigner des informations tel que le port IP de la BD, du nom du compte, du mot de passe Ă  la BD, 


Ce transfert d’information sera effectuĂ©, gĂ©nĂ©ralement, par l’utilisation de variables d’environnement.

Par exemple, pour fixer le mot de passe de l’utilisateur ‘root’, lors du dĂ©marrage d’un conteneur de type mariaDB, il faudra utiliser la syntaxe suivante:

docker run --net reseau01 -it -d --name maBD -e MYSQL_ROOT_PASSWORD=password mariadb

NOTE : —> Tester l’accùs à la BD en utilisant la commande ‘mysql’ dans le conteneur ‘maBD’.

L’option -e permet de renseigner la variable d’environnement MYSQL_ROOT_PASSWORD.

NOTE : Le nom des variables n’est pas fixĂ© de façon arbitraire. Il faut se rĂ©fĂ©rer Ă  la documentation de l’image dĂ©sirĂ©e. Par exemple, pour mariadb voir ici.

Action 1.0 – ExpĂ©rimentation avec l’option -e

docker run -it --rm -e PS1='yo: ' -e LOGIN_NAME='Fred Lacrosse' alpine /bin/sh

Résultat dans le conteneur:

yo: env
HOSTNAME=94cc229f2e3e
PS1=yo: 
LOGIN-NAME=Fred Lacrosse

Action 1.1 – Renseigner le ‘hostname’ au dĂ©marrage d’un conteneur

docker run -it --rm --hostname=maAlpine -e LOGIN_NAME='Coco Lafortune' alpine

Résultat dans le conteneur:

----- 
/ # env
HOSTNAME=maAlpine
LOGIN-NAME=Coco Lafortune

NOTE : À dĂ©faut de l’option --hostname, sa valeur sera le ID du conteneur.

Étape 2 – Construire une image qui utilise une variable d’environnement:

Action 2.1 – Dockerfile

Dans un dossier vide, renseigner le fichier Dockerfile suivant:

# À partir d'une image
FROM alpine

# Optionnel
LABEL Alain Boudreault <aboudrea@cstj.qc.ca>

ENV EXEMPLE=2.1
# Exécuter des commandes dans l'image
# RUN apt-get update

COPY momo-dit.sh /
RUN chmod a+x /momo-dit.sh

# Commande à exécuter au démarrage d'un conteneur
CMD ["/momo-dit.sh"]

Action 2.2 – Le script momo-dit.sh

Renseigner le fichier momo-dit.sh suivant:

#!/bin/sh
# Afficher à l'écran le contenu de la variable $MESSAGE
# Cette variable doit-ĂȘtre passĂ©e au conteneur avec '-e MESSAGE="Une message Ă  afficher"'

echo "-----------------------------------------------------"
echo "Momo dit: " $MESSAGE
echo "-----------------------------------------------------"
echo "EXEMPLE: " $EXEMPLE
echo

Action 2.3 – GĂ©nĂ©rer l’image

docker build --tag docker-hub-login/momo-dit:1.1 .

Action 2.4 – Tester sans utiliser l’option -e

docker run --rm docker-hub-login/momo-dit:1.1

Résultat:

-----------------------------------------------------
Momo dit: 
-----------------------------------------------------
EXEMPLE: 2.1

Action 2.5 – Tester avec l’option -e

docker run -e MESSAGE='Il fĂźt de la sorte un assez long chemin' --rm docker-hub-login/momo-dit:1.1

Résultat:

-----------------------------------------------------
Momo dit: Il fĂźt de la sorte un assez long chemin
-----------------------------------------------------
EXEMPLE: 2.1

Laboratoire 2.6 (DurĂ©e 30 minutes) – Construire une image:

Petit rappel bash:

#!/bin/bash
# Vérifier le contenu du premier paramÚtre
if [ $1 != "Bob" ] ; then 
  echo "Erreur: Nom de login invalide"
  exit 1
fi
echo "Bienvenue $1 chez nous!"

Référence bash


Étape 3 – Application multi-services : MariaDB + Adminer

Mise en place d’une application, Ă  partir d’un conteneur MariaDB et d’un conteneur adminer, qui roulent (les deux conteneurs) dans un rĂ©seau privĂ©.

Action 3.1 – CrĂ©ation du rĂ©seau privĂ©

docker network create reseau-3.1
docker network ls

NETWORK ID     NAME         DRIVER    SCOPE
6eca92520b8e   bridge       bridge    local
5b64d4b7c1d2   host         host      local
786951a15a98   none         null      local
173ec396a986   reseau-3.1   bridge    local

Action 3.2 – Mise en place de l’application de la base de donnĂ©es

docker run --net reseau-3.1 \
--name maBD \
-e MYSQL_ROOT_PASSWORD=password \
-d mariadb

Action 3.3 – Mise en place de l’application ‘adminer’

docker run --net reseau-3.1 -p 8080:8080 -d adminer

NOTE : La documentation de ‘adminer’ utilise une syntaxe dĂ©prĂ©ciĂ©e ( –link maBD ) pour le lien vers la BD. Il est prĂ©fĂ©rable d’utiliser un rĂ©seau privĂ©.

Action 3.4 – Tester l’application multi-services.

Action 3.4.1 – Tester l’URL

Dans un fureteur, inscrire l’adresse localhost:8080, ce qui devrait afficher l’interface Adminer.

Action 3.4.2 – Renseigner les informations de connexion

NOTE : Il n’est pas nĂ©cessaire de connaĂźtre l’adresse IP du conteneur mariadb, Ă©tant donnĂ© qu’il utilise le mĂȘme rĂ©seau privĂ© que adminer alors nous pouvons utiliser le nom du conteneur pour la connexion.

Résultat:

Laboratoire 3.5 (durĂ©e 30 minutes) – Construire l’application multi-services suivante:

NOTE : Il faut consulter la documentation de phpmyadmin pour identifier les variables d’environnement nĂ©cessaires au fonctionnement du conteneur. Il n’est pas nĂ©cessaire d’utiliser toutes les variables mentionnĂ©es dans la documentation. Seulement celles concernant l’utilisateur PMA, son mot de passe et le nom du conteneur du serveur mySQL.


Crédits

Document rédigé par Alain Boudreault © 2021-2026
Version 2025.12.03.1
Site par ve2cuy