Date : 16 février 2021 - Actualisé 2025.12.04
Histoire de bien intégrer les notions acquises lors des ateliers précédents, nous allons revisiter :
docker run -vdocker run -palpineDans un répertoire vide, créer :
mkdir mes-scripts-sh
Attention : ne pas descendre dans le nouveau dossier.
Momo-dit-v1.shAjouter au dossier mes-scripts-sh le fichier Momo-dit-v1.sh :
#!/bin/sh
# Afficher à l'écran le contenu de la variable $1
if [ -z "$1" ]
then
echo "Usage: momo-dit-v1 'un message'"
exit 1
fi
echo "-----------------------------------------------------"
echo "Momo dit: " $1
echo "-----------------------------------------------------"
echo
$(pwd))La prochaine étape consiste à démarrer une alpine et à lier le dossier mes-scripts-sh au nouveau conteneur.
Il faut TOUJOURS utiliser lâadressage absolu lors de la liaison. Cela nâest pas trĂšs pratique, surtout si nous avons Ă travailler avec une structure profonde de dossiers. Heureusement, il est possible dâinjecter le chemin du rĂ©pertoire courant lors de la liaison (-v) de volumes.
$ echo $(pwd)
/Users/alain/420-4D4
$ echo "$(pwd)/mes-scripts-sh"
/Users/alain/420-4D4/mes-scripts-sh
alpine, lié au dossierdocker run --rm -it --name momo-dit -v "$(pwd)/mes-scripts-sh/:/mes-scripts-sh" alpine
Vérification dans le conteneur :
/ # ls mes-scripts-sh/
momo-dit-v1.sh
/ # chmod a+x mes-scripts-sh/momo-dit-v1.sh
/ # mes-scripts-sh/momo-dit-v1.sh "Bonjour le monde!"
-----------------------------------------------------
Momo dit: Bonjour le monde!
-----------------------------------------------------
node-redNode-RED est un outil de développement basé sur des flux de programmation visuelle.
node-red sur le port 80 (sans persistance)docker run -it -d -p 80:1880 nodered/node-red
Tester lâaccĂšs : http://localhost
NOTE : Remarquer le message dâavertissement âWARNINGâ (concernant lâabsence de volume persistant).

Note : à la sortie de node-red, notre schéma sera perdu.

node-rednode-red avec une fusion de volumes# Créer un répertoire de travail pour node-red
$ mkdir node-red
# Démarrer node-red avec une fusion de volumes
docker run -it -d -p 80:1880 -v "$(pwd)/node-red/:/data" nodered/node-red

NOTE : Remarquer il nây a plus de message dâavertissement.
QUESTION : Est-ce que le schĂ©ma node-red de lâaction 2.5 est disponible đ§ ? (La rĂ©ponse est oui grĂące au volume liĂ©.)
Nous allons maintenant pousser un peu plus loin notre comprĂ©hension des liaisons de type âvolumeâ et ârĂ©seauâ.
Créer un répertoire local pour les bases de données de MySQL :
mkdir mysql
Nous exposons le port 99 de lâhĂŽte au port 3306 du conteneur et nous lions le dossier local mysql au rĂ©pertoire de donnĂ©es (/var/lib/mysql) du conteneur.
docker run -p 99:3306 -e MYSQL_ROOT_PASSWORD=password --name maBD -v "$(pwd)/mysql:/var/lib/mysql" -d mysql
NOTE : Le mot de passe pour root est âpasswordâ et le port de connexion est â99â.
[Image : img-mysql-bind-ports.png - SchĂ©ma illustrant la liaison du port 99 de lâhĂŽte au port 3306 du conteneur MySQL.]
mysql du conteneurdocker exec -it maBD mysql -uroot -ppassword
Utiliser lâapplication (ex: MySQL WorkBench) pour crĂ©er une nouvelle connexion en utilisant lâadresse localhost et le port 99.



tbl_amis (nom varchar(30), email varchar(30)).mysql (vous devriez voir les fichiers de la base de données créée).QUESTION : Est-ce que nous avons retrouvé la BD 'maBD'? (La réponse est oui grùce au volume lié.)
$ docker exec -it maBD /bin/bash
/# mysql -uroot -ppassword
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| maBD |
| mysql |
| performance_schema |
| sys |
+--------------------+
mysql> CREATE DATABASE docker_sql_99;
mysql> USE docker_sql_99;
mysql> CREATE TABLE tbl_amis (nom VARCHAR(30), email VARCHAR(30));
mysql> SHOW TABLES;
+-------------------------+
| Tables_in_docker_sql_99 |
+-------------------------+
| tbl_amis |
+-------------------------+
mysql> INSERT INTO tbl_amis (nom, email) VALUES ('Toto Binette', 'toto@me.com');
mysql> INSERT INTO tbl_amis (nom, email) VALUES ('Titi Binette', 'titi@me.com');
mysql> SELECT * FROM tbl_amis;
+--------------+-------------+
| nom | email |
+--------------+-------------+
| Toto Binette | toto@me.com |
| Titi Binette | titi@me.com |
+--------------+-------------+
2 rows in set (0.00 sec)
mysql> exit
mkdir BDInit
mkdir maBD
Dans le dossier BDInit, créer le fichier mabd-init.sql :
/* Exemple d'un script d'initialisation d'un schéma de BD MySQL
Fichier: DBInit/mabd-init.sql
Auteur: Alain Boudreault
Date: 2021.02.18
*/
CREATE DATABASE IF NOT EXISTS mabd;
CREATE USER bob;
-- select host, user from mysql.user;
GRANT ALL PRIVILEGES ON mabd.* TO 'bob'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mabd.* TO 'bob'@'localhost' IDENTIFIED BY 'password';
USE mabd;
CREATE TABLE tbl_amis (nom VARCHAR(30), email VARCHAR(30));
INSERT INTO tbl_amis (nom, email) VALUES ('Toto Binette', 'toto@me.com');
INSERT INTO tbl_amis (nom, email) VALUES ('Titi Binette', 'titi@me.com');
-- FIN DU SCRIPT
docker-comp-init-bd.ymlCe fichier utilise le paramĂštre command avec lâoption --init-file pour exĂ©cuter le script SQL au dĂ©marrage.
# Fichier: docker-comp-init-bd.yml
# Auteur: Alain Boudreault
# Date: 2021.02.18
# --------------------------------
# Exemple de modification du schéma de la DB lors de l'étape démarrage du service.
# De plus, les BD sont liées à l'extérieur du conteneur.
# Les répertoires: database et dbdata doivent exister dans le dossier courrant.
# Le fichier d'initialisation SQL 'mabd-init.sql' doit-ĂȘtre prĂ©sent dans le dossier database.
version: '3'
services:
mysql:
image: mysql:5.7
volumes:
- ./BDInit:/tmp/database # Un zone temporaire de stockage
- ./maBD:/var/lib/mysql:rw # Le dossier de stockage des BD.
ports:
- "3308:3306"
environment:
- MYSQL_ROOT_PASSWORD=password
command: mysqld --init-file="/tmp/database/mabd-init.sql"
[Image : img-docker-compose-schema.png - SchĂ©ma montrant la structure dâun docker-compose.yml avec les volumes BDInit et maBD pour MySQL.]
docker-compose -f docker-comp-init-bd.yml up -d
NOTE : Nous utilisons ICI la commande
docker-compose, qui permet de dĂ©marrer un systĂšme Ă multi-services.docker-composeest une alternative Ă la commandedocker runsuivi dâun nombre Ă©levĂ© dâoptions.docker-composesera couvert Ă la leçon suivante.
docker exec -it conteneur-ID mysql -uroot -ppassword
Commandes de vérification :
mysql> SHOW DATABASES;
mysql> USE mabd;
mysql> SHOW tables;
mysql> SELECT * FROM tbl_amis;
mysql> SELECT host, user FROM mysql.user;
docker network create monreseau
docker network ls
docker run -d -v $(pwd)/db_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=jteledispas \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wp420 \
-e MYSQL_PASSWORD=wp420 \
--name baseDeDonneesPourWP \
-p 3306:3306 \
--network monreseau \
mysql:5.7
Note : Lâutilisation des variables dâenvironnement (
MYSQL_DATABASE,MYSQL_USER,MYSQL_PASSWORD) permet la crĂ©ation dâune base de donnĂ©es et dâun compte utilisateur lors de la premiĂšre exĂ©cution du conteneur.
docker run --name worpress -d \
-p 8000:80 \
-e WORDPRESS_DB_HOST=baseDeDonneesPourWP \
-e WORDPRESS_DB_USER=wp420 \
-e WORDPRESS_DB_PASSWORD=wp420 \
-e WORDPRESS_DB_NAME=wordpress \
--network monreseau \
wordpress:latest
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5715adf4eca2 wordpress:latest "docker-entrypoint.sâŠ" 21 seconds ago Up 20 seconds 0.0.0.0:8000->80/tcp worpress
ac7ea4103539 mysql:5.7 "docker-entrypoint.sâŠ" 16 minutes ago Up 16 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp baseDeDonneesPourWP
Tester lâaccĂšs : http://localhost:8000
VoilĂ , nous avons lâapplication WordPress fonctionnant grĂące Ă deux micro-services; 1) MySQL, 2) WordPress.


pour lâapp WordPress. Docker-compose sera couvert Ă la leçon suivante.


Mettre en place un site WordPress, Ă partir de conteneurs, pour la CIE_ABC, en respectant le devis suivant :
cie_networkmariadb version 10.5, nommé cie_db pour la base de données
3333cie_abccieuserciepassworddonttellcie_networkcie_data80Voilà , nous venons de terminer notre expérimentation avec un conteneur de type MySQL.
# Note: Syntaxe pour une station MacOs ou Linux:
$ docker volume create portainer_data
$ docker run -d -p 8000:8000 -p 9443:9443 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:2.11.1
Tester lâaccĂšs : https://localhost:9443

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