Université Mohammed V de Rabat
Ecole Nationale Supérieure d'Arts et Métiers
Filière INDIA (3eme année) A.U. : 2024/2025 Pr. A. El Qadi
TP n°5 en Systèmes distribués (DevOps)
Ex1 Git/GitHub
1. Installation de Git
Installer le logiciel Github Desktop (https://desktop.github.com/download/) qui contient le logiciel git.
Chaque personne se connecte à son compte Github.
Configurer votre nom d'utilisateur et votre adresse e-mail dans GitHub
https://github.com/nom_du_compte
2. Création d'un dépôt local
Un dépôt, ou repo, sera le centre du projet. Il peut s’agir d’un fichier ou d’une collection de fichiers
contenant du code, des images, du texte ou tout autre élément.
Les commandes de git pour créer une copie locale du dépôt.
git init permet d’initialiser un dépôt local vide dans votre répertoire courant ;
git add permet d’indexer un fichier ou un répertoire
git commit permet de valider les modifications sur votre dépôt local ;
git remote add <nom> <url> : permet de lier votre dépôt local (initie par init) `a un dépôt distant
(url sur GitHub) ;
git push permet d’envoyer les modifications indexées au dépôt distant.
a. Afficher la version de git : C:\Users\ADmiN>git --version
b. Créer un nouveau répertoire sur votre machine : mkdir my_directory
c. Accèder à ce répertoire. cd my_directory
d. Initialiser un dépôt Git C:\Users\ADmiN\myrep_git>git init
3. Ajouter et valider des fichiers
a. Créer un fichier README.md dans ce nouveau répertoire.
C:\Users\ADmiN\myrep_git> echo "# Mon Projet" > README.md
b. Ajouter du contenu dans ce fichier.
C:\Users\ADmiN\myrep_git>echo "Ceci est un projet exemple." >> README.md
c. Ajouter ce fichier à l'index de Git et effectuer un commit.
C:\Users\ADmiN\myrep_git>git add README.md
C:\Users\ADmiN\myrep_git>git commit -m "Ajout du fichier README"
4. Travailler avec des branches
Git offre des branches de fonctionnalités. Cela signifie que chaque personne de l’équipe peut créer
une branche de fonctionnalité qui fournit un dépôt local isolé pour apporter des modifications au
code.
Les branches de fonctionnalités n’affectent pas la branche principale, où se trouve le code original
du projet. Une fois les modifications effectuées et le code mis à jour, la branche de fonctionnalité
peut être fusionnée avec la branche principale, et c’est ainsi que les modifications apportées au projet
deviennent effectives.
a. Créer une nouvelle branche nommée devops : git branch devops
b. Changer de branche pour devops : git checkout devops
c. Crée un fichier devops.txt et ajoute du contenu.
C:\Users\ADmiN\myrep_git>echo "Ceci est un fichier pour la branche devops." > devops.txt
d. Effectuer un commit.
C:\Users\ADmiN\myrep_git>git add devops.txt
C:\Users\ADmiN\myrep_git>git commit -m "Ajout du fichier devops.txt dans la branche
devops"
5. Fusionner des branches
a. Retourner à la branche principale (généralement main ou master).
C:\Users\ADmiN\myrep_git>git checkout main # ou git checkout master
b. Fusionner la branche devops dans la branche principale : git merge devops
6. Utiliser GitHub
a. Créer un nouveau dépôt sur GitHub (sans README).
Ouvrir un navigateur web et aller sur GitHub
Connecter à votre compte (https://github.com/nom_du_compte).
Cliquer sur le bouton "New" ou "Créer un dépôt".
Remplir le formulaire :
o Nom du dépôt : first_depot.
o Description : (facultatif) Ajoutez une description de votre projet.
o Public/Privé : Choisissez si le dépôt sera public ou privé.
o Ne pas initialiser avec un README (décochez l'option).
b. Lier votre dépôt local au dépôt GitHub.
git remote add origin https://github.com/ nom_du_compte/first_depot.git
c. Pousser vos commits vers GitHub.
C:\Users\ADmiN\myrep_git>git branch -M main
C:\Users\ADmiN\myrep_git>git push -u origin main
7. Gérer les conflits
a. Créer deux branches distinctes à partir de la branche principale, et modifier le même fichier
dans les deux branches et fais un commit dans chacune.
Retourner à la branche principale : git checkout main
Créer la première branche et basculer dessus : git checkout -b branche1
Modifier un fichier (par exemple, devops.txt), puis effectuer un commit :
C:\Users\ADmiN\myrep_git>echo "Modification dans branche1." >> devops.txt
C:\Users\ADmiN\myrep_git>git add devops.txt
C:\Users\ADmiN\myrep_git>git commit -m "Modification dans branche1"
Retourner à la branche principale : git checkout main
Créer la deuxième branche et basculer dessus : git checkout -b branche2
Modifier le même fichier (par exemple, devops.txt) de manière différente, puis effectuer
un commit :
C:\Users\ADmiN\myrep_git>echo "Modification dans branche2." >> devops.txt
C:\Users\ADmiN\myrep_git>git add devops.txt
C:\Users\ADmiN\myrep_git>git commit -m "Modification dans branche2"
b. Fusionner les branches dans la branche principale et résoudre les conflits.
Retourner à la branche principale
C:\Users\ADmiN\myrep_git>git checkout main
Fusionner la première branche (branche1) dans la branche principale :
C:\Users\ADmiN\myrep_git>git merge branche1
Fusionner la deuxième Branche
C:\Users\ADmiN\myrep_git>git merge branche2
À ce stade, un message de conflit, car les deux branches ont modifié le même fichier
(devops.txt).
c. Résoudre les Conflits
Ouvrir le fichier en conflit (par exemple, devops.txt) dans votre éditeur de texte. Vous
verrez des sections marquées avec
"Ceci est un fichier pour la branche devops."
<<<<<<< HEAD
"Modification dans branche1."
=======
"Modification dans branche2."
>>>>>>> branche2
Résoudre le conflit en choisissant quelle modification garder ou en combinant les deux.
Par exemple :
Modification dans branche1.
Modification dans branche2.
Ajouter le fichier à l'index : C:\Users\ADmiN\myrep_git>git add devops.txt
Effectuer un commit pour finaliser la fusion :
C:\Users\ADmiN\myrep_git>git commit -m "Résolution des conflits entre branche1 et
branche2"
8. Cloner un dépôt
Cloner le référentiel docker-Hadoop
https://github.com/Marcel-Jan/docker-hadoop-spark.git
L'exemple de référentiel ci-dessus contient un ensemble Hadoop docker-compose.yml et est prêt à
être déployé sur des conteneurs Docker. C’est un environnement multi-conteneurs Docker avec
Hadoop, Spark et Hive
git clone https://github.com/Marcel-Jan/docker-hadoop-spark.git
Ex 2 : Créer un dépôt GitHub
Un dépôt, ou repo, sera le centre du projet. Il peut s’agir d’un fichier ou d’une collection de fichiers
contenant du code, des images, du texte ou tout autre élément.
Pour commencer le processus, suiver les étapes suivantes :
1. Cliquer sur Créer un dépôt pour démarrer un nouveau projet (Ex. India)
2. Créer la nouvelle branche de fonctionnalité : « devlop »
3. Créer des demandes de retrait sur GitHub
Pour proposer les modifications que vous venez d’apporter aux autres développeurs travaillant sur le
même projet, vous devez créer une demande de retrait (Pull request). C’est ce qui rend le travail en
commun sur les projets si faciles, car c’est le principal outil de collaboration sur GitHub.
Les demandes de retrait vous permettent de voir les différences entre le projet original et votre branche
de fonctionnalité. C’est ainsi que vous demandez à vos pairs de les réviser. Si les autres développeurs
approuvent, ils peuvent fusionner la demande de retrait, ce qui appliquera ces changements au projet
principal.
Pour faire une requête pull, suivre les étapes ci-dessous :
o Aller dans l’onglet "Pull requests" de votre dépôt.
o Cliquer sur "New pull request".
o Sélectionner votre branche de fonctionnalité dans le menu déroulant.
o Vérifier les modifications et cliquer sur "Create pull request".
o Remplir le titre et la description, puis cliquer à nouveau sur "Create pull request".
4. Récupérer sur votre dossier les sources de votre projet sur GitHub.
git clone https://github.com/.../ India.git
5. Indiquer le dépôt officiel : git remote add official https://github.com/.../ India.git
6. Créer dans le dossier INDIA un fichier texte « demo.txt »
7. Enregistrer une image du fichier dans git
git add demo.txt
git commit -m "git pour devops"
8. Vérifier l’état du fichier : git status
9. Afficher l’historique : git log
10. Restaurer le premier état du projet : git checkout Id-Fichier
11. Publier-le dans votre espace public : git push
12. Récupérer et tirer depuis des dépôts distants : git pull
13. Dans GitHub faire une demande d'intégration (pull request).
14. La branche par défaut dans Git s’appelle master et elle pointe vers le dernier des commits réaliser.
Créer une nouvelle branche : git branch spring-project
15. Basculer vers une branche existante : git checkout spring-project
Tous les commits à ce moment sont fait sur la branche courante.
16. Retourner sur la branche principale
17. Mettre à jour votre disque dur jusqu'à ce que vous récupériez les modifications de quelqu'un d'autre.
git pull official master
18. Régler le conflit. Modifier la mise en page de la liste pour qu'elle soit correcte.
git merge <branche>
19. Une fois que le conflit est réglé par une révision, publiez l'ensemble des révisions dans votre espace
public : git push
20. Dans GitHub faire une demande d'intégration (pull request).
Ex. 3: Getting started with Docker
– Docker est un projet open source (Apache 2.0) écrit en GO et hébergé sur GitHub:
https://github.com/docker (https://github.com/docker).
Docker est composé de trois éléments :
le daemon Docker qui s’exécute en arrière-plan et qui s’occupe de gérer les conteneurs (Containerd
avec runC)
une API de type REST qui permet de communiquer avec le daemon
Le client en CLI (command line interface) : commande docker
Lexique
Conteneur : Image exécutable d’un environnement complet
incluant code, librairies, outils et configuration
Image : template de conteneur en read-only contenant un systeme
de base et une application.
Docker HUB : Dépôt public d’images mises à disposition par
Docker DockerHub (https://store.docker.com)
Dockerfile : fichier texte de description d’une image
Docker Compose : fichier texte (yaml) de description d’un
ensemble de conteneurs
Docker Machine : Outil de déploiement des hôtes Docker sur
différentes plateformes (Mac, Windows) :
https://docs.docker.com/machine/overview/
(https://docs.docker.com/machine/overview/)
Orchestrateur : gère un pool de ressources serveurs ( Swarm,
Kubernetes, Mesos, Rancher…)
Registry : Dépôt privé d’images Docker
Quelques exemples de commandes docker :
Connaître la version de Docker installé : docker -- version
Lancer un conteneur: docker run -d -p 80:80 docker/getting-started
Lister tous les conteneurs : docker ps -a
Obtenir toutes les images présentes sur le système : docker images
Construire une image à partir d’un Dockerfile : docker build
https://github.com/docker/rootfs.git#container:docker
Supprimer un conteneur : docker rm ID_du_conteneur
Supprimer une image : docker rmi ID_de_l_image
Afficher les logs d’un conteneur avec leurs détails : docker logs --details
1. Télécharger et installer Docker Desktop
2. Télécharger et installer l’application Kitematic
Kitematic est une application simple mais puissante pour gérer les conteneurs Docker sur Mac et
Windows. Il dispose d’un nouveau tableau de bord de bureau Docker pour une expérience
utilisateur encore meilleure, avec l’intégration de Docker Hub et de nombreuses fonctionnalités.
3. Apres l’installation du Docker, lancer votre premier conteneur
C:\WINDOWS\system32>docker run -d -p 80:80 docker/getting-started
C’est la commande run qui va exécuter l’image afin de créer le conteneur. Pour une première utilisation,
Docker va tout d’abord télécharger l’image à partir de Docker Hub, comme l’image le montre
4. Renvoyer la liste des conteneurs en cours d’exécution avec des détails les concernant.
docker ps
5. Télécharger l’image « hello-world » depuis le Docker Hub : Il faut savoir que dans la plupart des
cas, vous allez vous baser sur des images existantes, y apporter quelques modifications afin de
construire votre propre image.
docker pull hello-world
6. Lister les images présentes sur votre machine
docker images
7. Lister tous les ocnteneurs présents sur votre machine
docker ps -a
8. Arrêter le conteneur « hello-word »
docker stop id_du_conteneur
9. Supprimer le conteneur « hello-word »
docker rm id_du_conteneur
10. Supprimer l’image « hello-world »
docker rmi id_image
Ex.4 : Création une nouvelle image à partir du fichier Dockerfile
Dockerfile : est la base sur laquelle tous les conteneurs sont construits. Il contient l’ensemble des
commandes à exécuter afin de construire l’image à savoir le système d’exploitation de base du
conteneur, les langages utilisés, l’environnement et ses variables, l’emplacement des fichiers, etc.
Image : Une fois le Dockerfile écrit, on peut maintenant créer l’image d’un conteneur. Une image est
un modèle à lecture seule pour les conteneurs. On y retrouve tout le code source de l’application à
conteneuriser, ses dépendances, les bibliothèques à utiliser ainsi que d’autres outils nécessaires à la
création du conteneur.
Voici les commandes que l’on retrouve fréquemment dans un Dockerfile :
FROM : c’est la commande qui sert à définir l’image de base de l’application ;
LABEL : qui permet d’ajouter des métadonnées à l’image ;
RUN : qui sert à exécuter des instructions dans le conteneur ;
ADD : pour ajouter des fichiers dans l’image ;
WORKDIR : afin de spécifier le répertoire dans lequel sera exécuté tout l’ensemble des instructions
EXPOSE (facultatif) : qui sert à spécifier le port que l’on souhaite utiliser ;
VOLUME (facultatif) : pour spécifier le répertoire à partager avec l’hôte ;
CMD : qui sert à indiquer au conteneur la commande à exécuter lors de son lancement.
1. Créer un répertoire pour le projet :
mkdir python-app
cd python-app
2. Créer un fichier nommé app.py avec le contenu suivant :
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, Docker!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
3. Créer un fichier requirements.txt avec le contenu suivant :
Flask
4. Créer un fichier nommé Dockerfile dans le répertoire python-app :
# Étape 1 : Utiliser une image de base
FROM python:3.9-slim
# Étape 2 : Définir le répertoire de travail
WORKDIR /app
# Étape 3 : Copier le fichier requirements.txt et installer les dépendances
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# Étape 4 : Copier le reste des fichiers de l'application
COPY app.py ./
# Étape 5 : Exposer le port 5000
EXPOSE 5000
# Étape 6 : Commande pour démarrer l'application
CMD ["python", "app.py"]
5. Construire l'image à partir du Dockerfile :
docker build -t python-app .
-t permet de spécifier le nom que l’on donne à l’image
“.” à la fin de la commande désigne l’emplacement de la source de l’image. Cet
emplacement vient de l’instruction que vous avez écrite sur la commande COPY du
dockerfile “.”
Cela crée une image Docker nommée python-app.
6. Exécuter le Conteneur
docker run -d -p 5000:5000 python-app
Cela exécute le conteneur en arrière-plan et mappe le port 5000 du conteneur au port 5000 de
votre machine.
7. Accéder à l'application :
Ouvrir le navigateur et aller à http://localhost:5000.