Académique Documents
Professionnel Documents
Culture Documents
Mohamed LACHGAR
P UBLISHED BY P UBLISHER
Licensed under the Creative Commons Attribution-NonCommercial 3.0 Unported License (the
“License”). You may not use this file except in compliance with the License. You may obtain a
copy of the License at http://creativecommons.org/licenses/by-nc/3.0. Unless required
by applicable law or agreed to in writing, software distributed under the License is distributed on an
“AS IS ” BASIS , WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.
1 Conteneurisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1 Introduction 7
1.2 Docker 7
1.2.1 Principales caractéristiques de Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.2 Images vs Containers vs Volumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.3 Commandes Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.4 Docker Compose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Conclusion 8
1.4 Travaux pratiques 9
1.4.1 Conteneurisation d’une application Spring boot Angular . . . . . . . . . . . . . . . . . 9
Bienvenue au cours de programmation web JavaScript, jQuery et ReactJS ! Ce cours est conçu
pour vous initier aux merveilles de la programmation web moderne. À une époque où l’Internet est
au cœur de notre vie quotidienne, la maîtrise des technologies web est devenue une compétence
cruciale pour tout développeur. Que vous soyez un débutant curieux ou un développeur chevronné
en quête d’expansion, ce cours a été conçu pour vous.
OBJECTIFS PÉDAGOGIQUES :
Avant de plonger dans les détails de chaque chapitre, permettez-moi de souligner nos objectifs
pédagogiques. À travers ce manuel, nous visons à vous offrir une expérience d’apprentissage
enrichissante en vous guidant vers une maîtrise complète des technologies Java Enterprise Edition
(JEE). Nos objectifs incluent :
• Compréhension des Fondamentaux : Acquérir une compréhension approfondie des fonda-
mentaux de la programmation JEE, y compris les principes de persistance avec Hibernate,
les JavaServer Pages (JSP), et les Enterprise JavaBeans (EJB).
• Maîtrise des Technologies Clés : Maîtriser les technologies clés du développement JEE, telles
que Hibernate pour la persistance des données, JSP et JSTL pour la création d’interfaces
utilisateur dynamiques, et EJB pour le développement d’entreprises Java Beans.
• Utilisation des Serveurs d’Applications : Comprendre le rôle des serveurs d’application dans
le déploiement et la gestion d’applications JEE, en explorant des serveurs populaires tels que
WildFly et GlassFish.
• Application des Concepts Spring : Appliquer les concepts fondamentaux de Spring, y compris
l’Inversion de Contrôle (IoC) avec Spring IoC, la gestion des dépendances, et l’utilisation de
Spring Boot pour simplifier le développement d’applications Java.
• Exploration de Thymeleaf et Spring MVC : Découvrir Thymeleaf en tant que moteur de
modèles pour Spring MVC, comprendre les principes du modèle MVC, et réaliser des
exercices pratiques pour renforcer ces connaissances.
• Introduction à GraphQL et gRPC : Familiarisation avec les technologies modernes telles
que GraphQL pour une gestion flexible des requêtes, et gRPC pour des communications
performantes et interopérables entre services.
PUBLIC VISÉ :
Ce manuel s’adresse principalement aux étudiants, développeurs, et professionnels du domaine de
l’informatique intéressés par l’apprentissage et la mise en pratique des technologies Java Enterprise
Edition (JEE). Que vous soyez débutant dans le développement JEE ou que vous souhaitiez
approfondir vos compétences, ce guide pratique vous accompagnera à travers des exercices concrets,
offrant une approche progressive pour mieux comprendre et maîtriser les différentes facettes du
développement JEE.
1.1 Introduction
1.2 Docker
Docker, créé par Solomon Hykes, est devenu le leader incontesté dans le domaine de la conteneuri-
sation. Il fournit une plateforme complète pour créer, déployer et exécuter des conteneurs de
manière cohérente. L’essor de Docker a considérablement simplifié le cycle de vie des applications,
de la phase de développement à la production.
Docker utilise des images pour encapsuler des applications et des services, assurant une repro-
ductibilité et une cohérence tout au long du processus de déploiement. Les images peuvent être
partagées via Docker Hub, une bibliothèque en ligne de conteneurs prêts à l’emploi. De plus,
Docker offre des fonctionnalités avancées telles que la gestion des réseaux, la gestion des volumes,
et Docker Compose pour orchestrer des applications multi-conteneurs.
1.3 Conclusion
En conclusion, la conteneurisation, avec Docker en tant que leader incontesté, a considérablement
transformé la manière dont nous concevons, développons, et déployons des applications. La
transition de la virtualisation traditionnelle à la conteneurisation a apporté des avantages significatifs
en termes d’efficacité, de portabilité et de gestion des ressources.
Les conteneurs offrent une isolation légère, partageant le même noyau d’OS et permettant
un déploiement rapide et cohérent des applications. Docker, avec ses fonctionnalités avancées
telles que les images, les conteneurs, les volumes et Docker Compose, a grandement simplifié le
processus de création, de distribution et de gestion d’applications dans des environnements variés.
L’utilisation de Docker et de la conteneurisation en général a marqué un tournant majeur dans
le développement logiciel moderne. Les développeurs bénéficient de cycles de développement plus
rapides, d’une gestion efficace des dépendances, et d’une flexibilité accrue dans le déploiement.
Les équipes opérationnelles profitent d’une meilleure utilisation des ressources, de déploiements
plus stables et de la possibilité d’orchestrer des applications complexes.
Backend :
3 WORKDIR /app
4 COPY ./src ./src
5 COPY ./pom.xml .
6 RUN mvn clean package
7
8 # Stage 2: Create the final image
9
10 FROM openjdk:17-jdk-alpine
11 VOLUME /tmp
12 ARG JAR_FILE=target/*.jar
13 COPY ${JAR_FILE} app.jar
14 ENTRYPOINT ["java","-jar","/app.jar"]
Explication :
Étape 1: Build with Maven
• FROM maven:3.8.4-openjdk-17 AS builder: Utilise l’image Maven 3.8.4 avec Open-
JDK 17 comme base pour la première étape de construction et la nomme "builder".
• WORKDIR /app: Définit le répertoire de travail à l’intérieur du conteneur comme /app.
• COPY ./src ./src: Copie le répertoire source de l’application dans le répertoire de travail
du conteneur.
• COPY ./pom.xml .: Copie le fichier pom.xml à la racine du répertoire de travail du con-
teneur.
• RUN mvn clean package: Exécute la commande Maven pour nettoyer le projet et constru-
ire le package JAR.
Étape 2: Create the final image
• FROM openjdk:17-jdk-alpine: Utilise l’image Alpine Linux avec OpenJDK 17 comme
base pour la deuxième étape de construction.
• VOLUME /tmp: Définit un volume /tmp qui peut être utilisé pour stocker des fichiers tempo-
raires ou des données persistantes.
• ARG JAR_FILE=target/*.jar: Définit un argument pour le fichier JAR généré lors de la
construction de l’application.
• COPY $JAR_FILE app.jar: Copie le fichier JAR construit depuis l’étape précédente dans
le répertoire / du conteneur et le renomme en app.jar.
• ENTRYPOINT ["java","-jar","/app.jar"]: Définit la commande d’entrée pour exé-
cuter l’application Java en utilisant le fichier JAR.
Frontend :
Explication :
Étape 1 (Construction avec Node.js) :
• FROM node:14.15.0-alpine as builder : Utilise l’image Node.js 14.15.0 avec Alpine
Linux comme base pour la première étape et la nomme "builder".
1 version: ’3’
2 services:
3 mysql:
4 image: mysql:latest
5 environment:
6 MYSQL_ROOT_PASSWORD: root
7 MYSQL_DATABASE: smart-house
8 ports:
9 - "3306:3306"
10
11 backend:
12 build:
13 context: ./Smart_Home_back
14 ports:
15 - "8085:8085"
16 depends_on:
17 mysql:
18 condition: service_started
19 environment:
20 SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/smart-house
21 SPRING_DATASOURCE_USERNAME: root
22 SPRING_DATASOURCE_PASSWORD: root
23 healthcheck:
24 test: "/usr/bin/mysql --user=root --password=root --execute \"SHOW
DATABASES;\""
25 interval: 5s
26 timeout: 2s
27 retries: 100
28
29 frontend:
30 build:
31 context: ./smartHome-front
32 ports:
33 - "80:80"
34 depends_on:
35 backend:
36 condition: service_started
37
38 phpmyadmin:
39 image: phpmyadmin/phpmyadmin
40 environment:
41 PMA_HOST: mysql
42 PMA_PORT: 3306
43 MYSQL_ROOT_PASSWORD: root
44 ports:
45 - "8081:80"
Explication
mysql:
• Utilise l’image MySQL la plus récente disponible.
• Configure l’environnement MySQL avec un mot de passe root et une base de données
nommée "smart-house".
• Expose le port 3306 pour permettre l’accès à la base de données depuis l’extérieur.
backend:
• Construit le service backend à partir du contexte du dossier ./Smart_Home_back.
• Expose le port 8085 pour permettre l’accès au backend.
• Dépend du service MySQL et attend que celui-ci soit démarré avant de lancer le backend.
• Configure l’environnement du backend avec l’URL de la base de données MySQL, le nom
d’utilisateur et le mot de passe.
• Utilise une vérification de santé (healthcheck) pour s’assurer que le backend peut accéder à
la base de données MySQL.
frontend:
• Construit le service frontend à partir du contexte du dossier ./smartHome-front.
• Expose le port 80 pour permettre l’accès au frontend.
• Dépend du service backend et attend que celui-ci soit démarré avant de lancer le frontend.
phpmyadmin:
• Utilise l’image phpMyAdmin pour fournir une interface web pour la gestion de la base de
données.
• Configure l’environnement phpMyAdmin avec l’hôte MySQL, le port, et les informations
d’identification.
• Expose le port 8081 pour permettre l’accès à phpMyAdmin depuis l’extérieur.
Assurer d’être dans le répertoire où se trouve le fichier docker-compose.yml, ensuite exécuter
la commande suivante pour construire les images Docker pour le backend et le frontend.
1 docker-compose build