<aside> ⚠️
Pour effectuer ce compte rendu, j’ai utilisé l’IA ChatGPT pour résumer les commandes utilisées et pour commenter du code, des configurations ou les commandes utilisées, afin de gagner du temps. De plus, sur certains points, j’ai pu utiliser de l’IA afin de me débloquer de certaines situations problématiques. Les points où l’IA a été utilisée seront cités.
</aside>
Cette partie consiste à créer des Dockerfiles personnalisés pour chaque composant de l'application web (base de données, API backend, frontend) et à les déployer avec Docker Compose.
L'application est composée de 3 services principaux :
Dockerfile-db)Dockerfile-api)Dockerfile-front)La représentation a été effectué avec la commande tree
TP4/
├── frontend/ # Application Vue.js
│ ├── src/
│ ├── package.json
│ └── ...
├── backend/ # API Express.js
│ ├── server.js
│ ├── package.json
│ └── .env
├── database/ # Scripts SQL
│ └── init.sql
├── Dockerfile-db # Dockerfile pour MariaDB
├── Dockerfile-api # Dockerfile pour l'API
├── Dockerfile-front # Dockerfile pour le frontend
├── nginx/default.conf # Configuration nginx externalisée
├── entrypoint.sh # Script d'entrée personnalisé pour MariaDB
├── docker-compose.yml # Orchestration des conteneurs
└── .dockerignore # Fichiers à exclure des builds
Image de base : ubuntu:22.04
# Dockerfile personnalisé pour MariaDB
FROM ubuntu:22.04
# Variables d'environnement pour éviter les invites interactives
ENV DEBIAN_FRONTEND=noninteractive
ENV MARIADB_ROOT_PASSWORD=rootpassword
ENV MARIADB_DATABASE=tp_docker
ENV MARIADB_USER=app_user
ENV MARIADB_PASSWORD=app_password
# Installation de MariaDB Server et Client
RUN apt-get update && apt-get install -y \\
mariadb-server \\
mariadb-client \\
&& rm -rf /var/lib/apt/lists/*
# Configuration de MariaDB pour accepter les connexions
RUN sed -i 's/bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mariadb.conf.d/50-server.cnf
# Création du script d'initialisation
COPY database/init.sql /docker-entrypoint-initdb.d/init.sql
# Copie du script d'entrée personnalisé
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
# Création des répertoires nécessaires pour MariaDB
RUN mkdir -p /var/lib/mysql /run/mysqld && \\
chown -R mysql:mysql /var/lib/mysql /run/mysqld
# Initialisation de la base de données et configuration des permissions
RUN mysql_install_db --user=mysql --ldata=/var/lib/mysql && \\
chown -R mysql:mysql /var/lib/mysql /run/mysqld
# Exposition du port MariaDB
EXPOSE 3306
# Point d'entrée personnalisé
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
Script d'entrée personnalisé (entrypoint.sh) : Utilisation de l’IA pour m’aider à écrire ce script que je n’arrivais pas à rédiger seule.
#!/bin/bash
# Récupérer les variables d'environnement
ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD:-rootpassword}
DATABASE_NAME=${MARIADB_DATABASE:-tp_docker}
USER_NAME=${MARIADB_USER:-app_user}
USER_PASSWORD=${MARIADB_PASSWORD:-app_password}
# Démarrer MariaDB en arrière-plan pour l'initialisation
mariadbd --user=mysql --skip-networking=0 --bind-address=0.0.0.0 &
# Attendre que MariaDB soit prêt
echo "Waiting for MariaDB to be ready..."
while ! mysqladmin ping -h localhost --silent; do
sleep 1
done
echo "MariaDB is ready. Running initialization scripts..."
# Exécuter les scripts d'initialisation
for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sql) echo "$0: running $f"; mysql -u root -p"$ROOT_PASSWORD" < "$f" ;;
*.sql.gz) echo "$0: running $f"; gunzip -c "$f" | mysql -u root -p"$ROOT_PASSWORD" ;;
*) echo "$0: ignoring $f" ;;
esac
done
# Arrêter le serveur MariaDB
mysqladmin -u root -p"$ROOT_PASSWORD" shutdown
# Démarrer MariaDB en premier plan
echo "Starting MariaDB in foreground..."
exec mariadbd --user=mysql --skip-networking=0 --bind-address=0.0.0.0
Pourquoi cette configuration :