Cours Devops Samya
Cours Devops Samya
1
A.U. : 2023-2024
PLAN
• Introduction au concept DevOps • Outil de conteneurisation ‘Docker ’
o Introduction à DevOps o Le concept de la virtualisation
o Introduction à la plateforme Azure o Définition d’outil d’orchestration des
DevOps conteneurs
• Contrôleur de code source GIT o Dockerfile
o Définition d’un contrôleur de code o Docker-image
source o Conteneur Docker
o Application de commandes de base o Crétaion des images
GIT o Docker-Compose
o Partage d’un répertoire distanciel o Kubernetes
o Gestion des branches • Gestion de pipeline
o Fast-Forward / No-Fast-Forward
o Rebase / Rebase Interactif
• Planification
o Utilisation d’Azure Board S. BOUHADDOUR 2
Introduction à DevOps
S. BOUHADDOUR 3
SDLC : Software Development Lice Cycle
S. BOUHADDOUR 4
WATERFULL : MODÈLE EN CASCADE
S. BOUHADDOUR 5
AGILE
S. BOUHADDOUR 6
Le terme génie logiciel désigne l’ensemble des méthodes*, des techniques* et outils*
concourant à la production d’un logiciel, au delà de la seule activité de programmation.
Ensemble des méthodes, des techniques et outils * : Le génie logiciel ne se limite pas à une
seule approche ou méthode. Il englobe un large éventail de méthodes, de techniques et d'outils
utilisés pour développer un logiciel de manière efficace et de haute qualité. Cela comprend la
planification, la conception, la construction, les tests, la maintenance et la gestion de projet.
S. BOUHADDOUR 7
LES DÉFIS
La taille des projets: pour certains, des millions de ligne de code (MLOC)
S. BOUHADDOUR 9
LES DÉFIS
Comment interagir?
• Utilisation d'outils de gestion de versions comme Git.
• Plateformes de gestion de projets telles que GitHub ou GitLab.
• Communication via des forums de discussion et des réunions virtuelles.
Utilisateurs/Clients :
S. BOUHADDOUR 11
LES ENJEUX
Définition simple :
Ensemble de techniques et d’outils facilitant le passage du développement à la production.
S. BOUHADDOUR 13
DEVOPS
Antagonisme fort
Dev: Modifications aux moindres coûts, le plus rapidement possible
Ops: Stabilité du système, qualité
S. BOUHADDOUR 14
Le DevOps est un ensemble de pratiques qui met l'emphase sur l'automatisation des
processus entre les équipes de développement, et les équipes en charge du maintien en
conditions opérationnelles de l'application développée.
Méthodes agiles
S. BOUHADDOUR 15
DevOps : Automatisation
Livraison continue
Intégration continu Déploiement continue
- Déploiement rapide et fiable des
- Intégration automatique des - Automatisation totale du
modifications validées.
modifications du code. processus de mise en production.
- Livraison sans délai excessif ni
- Reconstruire et tester le logiciel - Mise à jour en temps réel de
risque.
à chaque modification. l'application.
- Réactivité accrue aux besoins des
- Détection rapide des - Pas de temps d'arrêt ni de risque
utilisateurs.
problèmes. d'erreur humaine.
- Amélioration continue de
- Amélioration de la qualité du - Agilité maximale dans les mises
l'application.
code. à jour.
- Réduction des délais entre
- Réduction des conflits - Capacité à répondre rapidement
développement et mise en
d'intégration aux évolutions du marché
production
Une approche dans laquelle l'intégration Une approche dans laquelle chaque
Une méthode de développement logiciel
continue associée à des techniques de modification apportée par un programmeur
dans laquelle le logiciel est reconstruit et
déploiement automatiques assurent une passe automatiquement toute la chaîne
testé à chaque modification apportée
mise en production rapide et fiable du allant des tests à la mise en production. Il
par un programmeur
logiciel. n'y a plus d'intervention humaine
S. BOUHADDOUR 16
L'intégration continue
S. BOUHADDOUR 19
S. BOUHADDOUR 20
Avantages à adopter l’approche DevOps
S. BOUHADDOUR 21
Introduction à AZURE DevOps
S. BOUHADDOUR 22
Définition
• Azure DevOps fournit des services de développement pour aider les équipes à planifier le
travail, à collaborer au développement de code et à créer et déployer des applications.
• Azure DevOps fournit des fonctionnalités intégrées auxquelles vous pouvez accéder via
votre navigateur Web ([Link]) ou votre client IDE (VS).
S. BOUHADDOUR 23
Azure Boards
Suivez le travail effectué avec des tableaux Kanban configurables, des backlogs interactifs et des outils de planification
puissants.
Grâce à une traçabilité et à des rapports inégalés, Boards est la solution idéale pour toutes vos idées, petites ou grandes.
S. BOUHADDOUR 24
Azure Repos
Suivez le travail effectué avec des tableaux Kanban configurables, des backlogs interactifs et des outils de planification
puissants.
Grâce à une traçabilité et à des rapports inégalés, Boards est la solution idéale pour toutes vos idées, petites ou grandes.
S. BOUHADDOUR 25
Contrôleur de code source
S. BOUHADDOUR 26
LES DÉFIS
SOLUTION
S. BOUHADDOUR 27
S. BOUHADDOUR 28
DÉFINITION
S. BOUHADDOUR 29
CE QUE PERMET DE FAIRE UN SYSTÈME DE CONTRÔLE DU CODE SOURCE
Release* : des versions stables et officielles du logiciel, généralement destinées à être utilisées par les utilisateurs finaux
Versions** : Les versions correspondent à différentes itérations du logiciel, avec des fonctionnalités ajoutées, des bogues corrigés, etc.
Branches de développement ***: sont des versions du code source qui évoluent séparément les unes des autres.
Par exemple, il peut y avoir une branche de développement pour travailler sur de nouvelles fonctionnalités tandis qu'une autre branche est dédiée à la
correction de bugs. Un système de contrôle de code source permet de gérer ces différentes entités de manière organisée, en les identifiant clairement et en
facilitant leur gestion.
S. BOUHADDOUR 30
LES DIFFÉRENTS SCCS : SCCS CENTRALISÉ VS. SCCS DISTRIBUÉ
SCCS Centralisé
Tout l’historique des changements est conservé sur un serveur central (distant), duquel
n’importe qui peut obtenir la version la plus récente ou envoyer les changements les plus
récents.
SCCS distribué
Chaque usager a une copie locale de tout l’historique des changements. Il n’est donc pas
nécessaire d’être connecté à un réseau/serveur pour sauvegarder des changements. En outre,
n’importe quel usager peut se synchroniser avec n’importe quel autre.
S. BOUHADDOUR 31
Les différents SCCS : SCCS Centralisé vs. SCCS Distribué
S. BOUHADDOUR 32
LES AVANTAGES ET LES INCONVÉNIENTS DU SCCS DISTRIBUÉ
AVANATGES
• Chaque développeur a son espace privé — son sandbox
• On peut travailler — et faire des commits ! — hors ligne
• Plusieurs opérations sont très rapides — exécution locale
• La création et fusion de branches est efficace
INCONVÉNIENTS
S. BOUHADDOUR 33
DÉMARRER AVEC GIT
Git est un système de contrôle de version distribué gratuit qui permet aux programmeurs de
suivre les modifications du code, via des "instantanés" (commits), dans leur état actuel.
L'utilisation de validations permet aux programmeurs de tester, déboguer et créer de
nouvelles fonctionnalités en collaboration. Tous les commits sont conservés dans ce que l'on
appelle un « référentiel Git » pouvant être hébergé sur votre ordinateur, des serveurs privés
ou des sites Web open source, tels que Github.
Git permet également aux utilisateurs de créer de nouvelles "branches" du code, ce qui
permet aux différentes versions du code de cohabiter.
S. BOUHADDOUR 34
LES CONCEPTS DU GIT
Espace de travail : C'est l'endroit où vous travaillez sur vos fichiers. Il s'agit simplement des
fichiers et répertoires que vous voyez et manipulez sur votre ordinateur. Ils n'ont rien de
spécial par rapport à d'autres dossiers sur votre ordinateur.
Dépôt local: Il s'agit de votre espace de travail associé à l'historique des modifications. C'est
là que Git enregistre toutes les modifications que vous avez apportées au fil du temps.
Commit : Un commit représente une version spécifique de votre projet à un moment donné.
Chaque commit est comme une "capture d'écran" de l'état de vos fichiers à un moment
précis. Il contient les modifications que vous avez apportées ainsi qu'un message descriptif.
Historique : C'est la "chaîne" de tous les commits, du plus ancien au plus récent. Cet
historique vous permet de voir l'évolution de votre projet au fil du temps.
Dépôt distant : C'est un dépôt Git qui se trouve sur un serveur distant, comme GitHub. Il est
souvent utilisé pour collaborer avec d'autres personnes sur un projet ou pour sauvegarder
votre code.
S. BOUHADDOUR 35
LES ZONES DU GIT
S. BOUHADDOUR 36
CONTRÔLE WORKFLOW
Le contrôle de version a un flux de travail général que la plupart des développeurs utilisent
pour écrire du code et le partager avec l'équipe
Obtenez une copie locale du code s'ils n'en ont pas encore.
Apportez des modifications au code pour corriger les bogues ou ajouter de nouvelles
fonctionnalités.
Une fois le code prêt, rendez-le disponible pour examen par votre équipe (Pull
Request).
Une fois le code révisé, fusionnez-le dans la base de code partagée de l'équipe.
S. BOUHADDOUR 37
ACTIONS AVEC GIT
S. BOUHADDOUR 38
ACTIONS AVEC GIT
S. BOUHADDOUR 39
Bonnes pratiques pour le contrôle des sources
S. BOUHADDOUR 40
Gestion des Branches
S. BOUHADDOUR 41
Motivations
S. BOUHADDOUR 42
La notion d’historique
• L’historique est un graphe orienté composé d’un ensemble de versions pouvant être
recalculées à partir des versions adjacentes en appliquant les patchs.
• L’historique peut inclure plusieurs branches, c’est-`a-dire des sous-graphes qui
évoluent en parallèle.
S. BOUHADDOUR 43
Historique: les merges
S. BOUHADDOUR 44
Gestion des accès concurrents
Gestion pessimiste
• Un seul contributeur à accès en écriture à un fichier
• Pas de conflits
• Pas pratique
Gestion optimiste
• Chaque développeur peut modifier sa copie locale en parallèle
• Risques de conflits
▶ Modifications concurrentes de la même zone de texte
S. BOUHADDOUR 45
Les objets dans Git
• Blobs
• Tree
• Commit
• Tag
S. BOUHADDOUR 46
Blob « Binary Large Object »
On appelle Blob, l’élément de base qui permet de stocker le contenu d’un fichier.
C'est simplement le contenu d'un fichier, stocké de manière compressée dans la base de
données Git. Les blobs sont identifiés par des clés SHA-1 qui sont calculées à partir de
leur contenu.
• Chaque Blob est identifié de manière unique par sa clé
• A chaque révision du fichier correspond un nouveau Blob
Le blob stocke le contenu entier du fichier
Le Blob ne dépend pas du nom ou de l’emplacement
Si un fichier est renommé, pas de nouveau Blob
Si un fichier est déplacé, pas de nouveau Blob
• Le contenu du Blob est compressé avec zlib. Il contient:
Le type d’objet (blob)
La taille du fichier initial
Le contenu du fichier
S. BOUHADDOUR 47
Tree
S. BOUHADDOUR 48
Tree et Blob: Exemple
S. BOUHADDOUR 49
Commit
S. BOUHADDOUR 50
Le cycle de vie d’un fichier
S. BOUHADDOUR 51
Les branches
Dans Git
• Une branche est un pointeur sur un commit
• Chaque commit pointe vers son prédécesseur
• La variable HEAD pointe sur la branche sur laquelle on travaille actuellement.
S. BOUHADDOUR 52
Les branches – Les commandes
S. BOUHADDOUR 53
Les Merges
S. BOUHADDOUR 54
S. BOUHADDOUR 55
S. BOUHADDOUR 56
S. BOUHADDOUR 57
S. BOUHADDOUR 58
S. BOUHADDOUR 59
S. BOUHADDOUR 60
S. BOUHADDOUR 61
S. BOUHADDOUR 62
S. BOUHADDOUR 63
S. BOUHADDOUR 64
Rebase
• Autre manière de fusionner 2 branches
• Permet de simplifier l’historique
• Fusion (merge) : Lorsque vous fusionnez deux branches avec git merge, Git combine
l'historique des deux branches pour créer un nouveau commit de fusion. Ce nouveau
commit de fusion a deux parents, représentant les commits les plus récents de chaque
branche. En d'autres termes, Git prend tous les changements effectués dans les deux
branches et les intègre dans un nouveau commit de fusion. Cela signifie que l'historique de
développement de chaque branche est préservé.
• Réalignement (rebase) : Lorsque vous réalignez une branche avec une autre branche à
l'aide de git rebase, Git déplace les commits de la branche en cours de réalignement
pour qu'ils apparaissent au-dessus des commits de l'autre branche. Cela récrit
essentiellement l'historique de la branche en cours sur le dessus de l'autre branche.
Contrairement à la fusion, le réalignement n'ajoute pas de commit de fusion
supplémentaire. Au lieu de cela, il réorganise l'historique de manière à ce que l'historique
semble linéaire, ce qui peut rendre l'historique du projet plus clair.
S. BOUHADDOUR 65
GIT MERGE VS GIT REBASE
S. BOUHADDOUR 66
GIT MERGE VS GIT REBASE
S. BOUHADDOUR 67
Rebase interactif
S. BOUHADDOUR 68
Message de commit
Le plus important
• Décrire quoi et pourquoi et pas comment
• Ne pas décrire les modifications qui sont faites (informations disponibles avec un diff)
• Décrire les fonctionnalités ajoutées
Exemple
• Bad: Modifie la fonction f pour tester la variable a
• Good: Vérifie les droits de l’utilisateur avant d’exécuter l’action X
S. BOUHADDOUR 69
Azure Boards
S. BOUHADDOUR 70
C’EST QUOI LA RELATION ENTRE AZURE
ET DEVOPS?
S. BOUHADDOUR 71
Définition d’Azure Microsoft
Azure est une plateforme de Cloud qui dispose de tout ce dont une entreprise a besoin pour
gérer virtuellement une partie ou la totalité de ses opérations informatiques : serveurs,
stockage, bases de données, réseaux, statistiques et bien plus encore.
S. BOUHADDOUR 73
CONCEPTS DE DEVOPS
S. BOUHADDOUR 74
LES PRINCIPAUX CONCEPTS D'AZURE BOARDS
Boards ‘Tableau’
Il s’agit des espaces de travail visuels où les équipes peuvent organiser leurs travaux en
utilisant des colonnes personnalisables, souvent représentant l'état de progression des tâches (à
faire, en cours, terminé, etc.).
Work item ‘Eléments du travail’
C’est une unité de tâche, de problème, de fonctionnalité ou d'autres éléments à gérer.
Il s'agit de travaux individuels qui doivent être réalisés.
Backlog
Le backlog peut être composé de différents types d'éléments, tels que des user stories, des
bugs, des tâches, etc. Les éléments du backlog sont généralement triés par ordre de priorité et
sont planifiés pour être réalisés au fil du temps
Sprint
Un sprint est une période de temps définie, généralement de deux à quatre semaines, pendant
laquelle une équipe de développement travaille sur un ensemble spécifique de tâches et de
fonctionnalités.
S. BOUHADDOUR 75
LES PRINCIPAUX CONCEPTS D'AZURE BOARDS
Queries
Les requêtes (queries) dans Azure DevOps permettent de filtrer et d'interroger les données, y
compris les éléments du backlog. Vous pouvez créer des requêtes pour afficher des sous-
ensembles spécifiques du backlog, comme les éléments affectés à une personne particulière,
les éléments qui n'ont pas encore été planifiés pour un sprint, etc.
S. BOUHADDOUR 76
LES DIFFÉRENTS WORK ITEM PROCESS
S. BOUHADDOUR 77
WORK ITEM PROCESS : AGILE
Choisissez Agile lorsque votre équipe utilise des méthodes de planification Agile et suit
séparément les activités de développement et de test.
Ce processus fonctionne très bien si vous souhaitez suivre les user stories et
(éventuellement) les bugs et/ou les tâches.
S. BOUHADDOUR 78
Work item process : AGILE
S. BOUHADDOUR 79
Hiérarchie des éléments de travail dans Azure Boards - AGILE
Epic (Épopée) :
Un "épic" représente un grand ensemble de fonctionnalités ou de tâches. C'est une unité de travail de haut niveau qui
peut être divisée en fonctionnalités plus petites ou en user stories. Les épics fournissent une vue d'ensemble des
objectifs à long terme du projet.
Feature (Fonctionnalité) :
Une "fonctionnalité" est une unité de travail plus petite que l'épic, mais plus grande que l'user story. Elle représente
une partie spécifique d'un épic. Les fonctionnalités sont souvent des ensembles cohérents de fonctionnalités liées
entre elles.
Issue (Problème) :
Une "Issue" est un élément de suivi qui représente un problème, un bogue, une amélioration ou toute autre tâche à
résoudre dans le cadre d'un projet.
Il peut être utilisée pour signaler des problèmes techniques, des obstacles, des retards ou des demandes de
fonctionnalités.
Les issues peuvent être assignées à des membres de l'équipe pour résolution et suivi.
Ils peuvent également être liés à d'autres éléments de travail pour montrer leur impact sur le projet en cours.
S. BOUHADDOUR 80
User Story :
C’est une unité de travail centrée sur l'utilisateur. Elle décrit une fonctionnalité du point de vue de l'utilisateur final
et fournit des détails sur ce que l'utilisateur souhaite accomplir.
Task (Tâche) :
Une "tâche" est une unité de travail encore plus petite, souvent associée à une user story. Les tâches décrivent les
actions spécifiques nécessaires pour réaliser une user story. Elles sont généralement assignées à des membres de
l'équipe et sont suivies pour surveiller l'avancement du travail.
S. BOUHADDOUR 81
Work item process : AGILE
S. BOUHADDOUR 82
WORK ITEM PROCESS : BASIC
Choisissez BASIC lorsque votre équipe souhaite le modèle le plus simple qui
utilise les problèmes, les tâches et les Epics pour suivre le travail.
Les tâches prennent en charge le suivi du travail restant.
S. BOUHADDOUR 83
Work item process : BASIC
S. BOUHADDOUR 84
Work item process : BASIC
S. BOUHADDOUR 85
WORK ITEM PROCESS : CMMI
Choisissez CMMI lorsque votre équipe suit des méthodes de projet plus formelles qui
nécessitent un cadre d'amélioration des processus et un enregistrement vérifiable des décisions.
Avec ce processus, suivez les exigences, les demandes de modification, les risques et les avis.
Ce processus prend en charge les activités formelles de gestion du changement . Les tâches
prennent en charge le suivi de l'estimation initiale, du travail restant et du travail terminé.
S. BOUHADDOUR 86
Work item process : CMMI
S. BOUHADDOUR 87
Hiérarchie des éléments de travail dans Azure Boards - CMMI
Epic (Épopée)
Fonctionnalité (Feature)
Exigence (Requirement)
Dans le contexte de CMMI, une exigence peut être considérée comme un synonyme d'une user story ou d'une
fonctionnalité.
Revue (Review)
Une activité de validation où le travail accompli est examiné et évalué par l'équipe et les parties prenantes.
Risque (Risk)
Un élément potentiellement négatif ou une incertitude qui pourrait affecter le succès du projet.
Tâche (Task)
Cas de Test (Test Case) :
S. BOUHADDOUR 88
Work item process : CMMI
S. BOUHADDOUR 89
WORK ITEM PROCESS : SCRUM
Choisissez Scrum lorsque votre équipe pratique Scrum. Ce processus fonctionne très bien
pour suivre les éléments du backlog de produit (PBI) et les bogues. Décomposez également les
PBI et les bogues en tâches sur le tableau des tâches.
S. BOUHADDOUR 90
Work item process : SCRUM
S. BOUHADDOUR 91
Hiérarchie des éléments de travail dans Azure Boards - SCRUM
Épic (Epic)
Fonctionnalité (Feature)
Obstacle (Impediment)
Un élément qui entrave ou bloque le progrès de l'équipe. Les obstacles doivent être résolus rapidement pour
assurer un flux de travail efficace.
Product Backlog
Une liste ordonnée de toutes les fonctionnalités, exigences, améliorations et bugs potentiels du produit. Il est
priorisé par le Product Owner et est continuellement raffiné et mis à jour.
Tâche (Task)
Cas de Test (Test Case)
S. BOUHADDOUR 92
Work item process : SCRUM
S. BOUHADDOUR 93
DOCKER
S. BOUHADDOUR 94
DÉFINITION DU CLOUD
S. BOUHADDOUR 96
LA VIRTUALISATION
La virtualisation est une technologie qui vous permet de créer plusieurs environnements
simulés ou ressources dédiées à partir d'un seul système physique.
Son logiciel, appelé hyperviseur, est directement relié au matériel et vous permet de
fragmenter ce système unique en plusieurs environnements sécurisés distincts. C'est ce que
l'on appelle les machines virtuelles.
S. BOUHADDOUR 97
LA VIRTUALISATION
S. BOUHADDOUR 98
LA VIRTUALISATION ≠ CLOUD COMPUTING
• le Cloud Computing consiste à héberger et exploiter des données sur des serveurs distants,
par le biais du réseau internet. Comment ? => Cloud Computing vise à fournir des services
informatiques à la demande sur Internet
S. BOUHADDOUR 99
LE CLOUD COMPUTING
S. BOUHADDOUR 100
LA VIRTUALISATION ≠ CLOUD COMPUTING
S. BOUHADDOUR 101
MACHINES VIRTUELLES ≠ CONTENEURS
• La notion de conteneur est aussi souvent rapprochée de celle de virtualisation. Mais une
fois de plus, des différences existent.
• Comme son nom l’indique, une machine virtuelle est l’imitation virtuelle d’un appareil
informatique créée, dans le cadre de la virtualisation, à l’aide d’un logiciel hyperviseur,
et doté d’un système d’exploitation (ou OS) complet.
S. BOUHADDOUR 102
MACHINES VIRTUELLES ≠ CONTENEURS
S. BOUHADDOUR 103
MACHINES VIRTUELLES ≠ CONTENEURS
S. BOUHADDOUR 104
MACHINES VIRTUELLES ≠ CONTENEURS
S. BOUHADDOUR 105
MACHINES VIRTUELLES ≠ CONTENEURS
S. BOUHADDOUR 106
MACHINES VIRTUELLES ≠ CONTENEURS
S. BOUHADDOUR 107
MACHINES VIRTUELLES ≠ CONTENEURS
S. BOUHADDOUR 108
MACHINES VIRTUELLES ≠ CONTENEURS
S. BOUHADDOUR 109
AVANTAGES DU CONTENEURS
• Meilleures performances
Accès direct au matériel
• Démarrage beaucoup plus rapide
Pas besoin de démarrer un système complet
• Images plus légères
Ne contient que les informations en lien avec l'application
Moins coûteux en terme d'espace de stockage
Plus rapide à transférer
S. BOUHADDOUR 110
S. BOUHADDOUR 111
DEFINITION
S. BOUHADDOUR 112
DEFINITION
S. BOUHADDOUR 113
S. BOUHADDOUR 114
Fichier DOCKER
Il s'agit d'un fichier texte simple contenant une collection de commandes ou de procédures.
Ces commandes et directives que nous exécutons agissent sur l'image de base configurée pour
créer une nouvelle image Docker.
Un Dockerfile est le code source de l'image Docker. Un Dockerfile est un fichier texte
contenant diverses instructions et configurations. La commande FROM dans un Dockerfile
identifie l'image de base à partir de laquelle vous construisez.
S. BOUHADDOUR 115
Les images DOCKER
Les images sont des plans en lecture seule qui incluent des instructions de création de
conteneurs. Une image Docker est un conteneur créé pour fonctionner sur le framework
Docker. Considérez une image comme un plan ou une image de ce qu’il y aura dans un
conteneur lorsqu’il sera opérationnel.
S. BOUHADDOUR 116
LES CONTENEURS
Les conteneurs sont des environnements d'exécution compacts et virtualisés utilisés pour
exécuter des applications. Chaque conteneur est un progiciel* comprenant tous les fichiers de
configuration, dépendances, outils système, bibliothèques et code source requis pour exécuter
une certaine application. Ils sont distincts de l'hôte et de toute autre instance exécutée sur
l'hôte.
*Ensemble de logiciels munis d'une documentation, conçus pour répondre à des besoins spécifiques et permettre une utilisation autonome.
S. BOUHADDOUR 117
DOCKER HUB
S. BOUHADDOUR 118
•Créez un fichier Docker et incluez les instructions pour créer votre image Docker.
•Exécutez la commande docker build pour créer votre image Docker.
•Utilisez la commande docker run pour créer des conteneurs maintenant que l'image docker est
prête à être utilisée.
S. BOUHADDOUR 119
PRINCIPES DE FONCTIONNEMENT DE DOCKER
S. BOUHADDOUR 120
DOCKER: LES BRIQUES PRINCIPALES
Docker engine
Un environnement d'exécution et un ensemble de services pour manipuler des conteneurs
docker sur une machine.
Une application client-serveur
Le serveur -- Un daemon (processus persistant) qui gère les conteneurs sur une machine
Le client -- Une interface en ligne de commande
Un/des registres d'images docker
Bibliothèque d'images disponibles
Docker Hub
S. BOUHADDOUR 121
PRINCIPES DES IMAGES DOCKER
Un ensemble de couches
• Une image est composée d'un ensemble de couches (layers)
• L'Union File System est utilisé pour combiner ces couches
• Le file system utilisé par défaut s'appelle overlay2
• Chaque couche correspond à une instruction dans le fichier Dockerfile décrivant l'image.
Un système de fichiers Union, dans le contexte de Docker et de la conteneurisation, est une technologie qui permet de combiner
plusieurs couches de systèmes de fichiers en une seule vue unifiée.
S. BOUHADDOUR 122
S. BOUHADDOUR 123
S. BOUHADDOUR 124
S. BOUHADDOUR 125
Exemple d’un Dockerfile
S. BOUHADDOUR 126
Les autres couches
• Les couches correspondent aux différentes modifications qui sont faites pour construire
l'image à partir de l'image de base.
• Pour sauvegarder une nouvelle image, il suffit de sauvegarder les nouvelles couches qui
ont été créées au dessus de l'image de base.
• Dans un conteneur en cours d'exécution, il existe une couche supplémentaire accessible en
écriture
• Toutes les écritures vers le système de fichier faites à l'exécution du conteneur sont
stockées dans cette couche.
• Les autres couches, définies au sein de l'image utilisée pour instancier le conteneur, ne sont
accessibles qu'en lecture.
• Cette couche est supprimée à la suppression du conteneur
Optimisation des performances
• Partage des couches identiques entre conteneurs diminue l'espace de stockage utilisé par les
conteneurs.
S. BOUHADDOUR 127
Affichage de l'ensemble des couches d'une image
S. BOUHADDOUR 129
CRÉER DES IMAGES
Interactivement
2 manières
En utilisant un Dockerfile
S. BOUHADDOUR 130
Avant de commencer: Premiers pas avec docker
S. BOUHADDOUR 131
Que va-t-il se passer?
S. BOUHADDOUR 132
Construire une image interactivement
Objectifs
Créer une image à partir d'une image de base dans laquelle nous allons installer cowsay
Les étapes
1. Créer un conteneur à partir de l'image de base
2. Installer le logiciel manuellement dans le conteneur et en faire une nouvelle image
3. Jouer avec:
docker commit
docker tag
docker diff
S. BOUHADDOUR 133
Configuration du conteneur
Démarrer un conteneur Ubuntu
S. BOUHADDOUR 134
Configuration du conteneur
Quitter la session interactive
S. BOUHADDOUR 135
Sauvegarder les changements dans une nouvelle image
S. BOUHADDOUR 136
Les Dockerfile
S. BOUHADDOUR 137
Éléments de syntaxe
Les commandes de Dockerfile ne sont pas sensibles à la casse. On les note en majuscule par
convention (facilite la lecture)
S. BOUHADDOUR 138
Notre premier Dockerfile
2- Créer le Dockerfile
S. BOUHADDOUR 139
3- Construire notre image
S. BOUHADDOUR 140
Le build context est envoyé vers le démon docker (contenu du répertoir .)
A chaque étape:
Un conteneur est créé pour exécuter l'étape (Running in ...)
Les modifications sont committées dans une nouvelle image (---> ...)
Le conteneur est supprimé
La nouvelle image est utilisée pour la prochaine étape
5- Construction de l’image
docker build
Crée une image à partir d'un ficher Dockerfile
Crée l'image docker-whale avec le contexte correspondant au répertoire courant (le ‘.’ est
nécessaire)
Par défaut, le Dockerfile est cherché à la racine du contexte
S. BOUHADDOUR 141
DOCKER-COMPOSE
PROBLÈMES :
S. BOUHADDOUR 142
DOCKER-COMPOSE
S. BOUHADDOUR 143
DOCKER-COMPOSE
SOLUTION
• Compose vous permet d’éviter de gérer individuellement des conteneurs qui forment
les différents services de votre application.
• Outil qui définit et exécute des applications multi-conteneurs
• Utilise un fichier de configuration dans lequel vous définissez les services de
l’application
• A l’aide d’une simple commande, vous contrôlez le cycle de vie de tous les conteneurs
qui exécutent les différents services de l’application.
S. BOUHADDOUR 144
DOCKER-COMPOSE
UTILISATION
S. BOUHADDOUR 145
DOCKER-COMPOSE
S. BOUHADDOUR 146
DOCKER-COMPOSE
• L'utilisateur décrit son application (multi) conteneurs dans un fichier YAML appelé
[Link]
• Exécuter docker-compose up pour démarrer l'application
Compose télécharge automatique les images, les build (si nécessaire), et démarre les
conteneurs
Compose peut configurer des volumes, le réseau, et toutes autres options liées à
Docker
S. BOUHADDOUR 147
Exemple du fichier [Link]
S. BOUHADDOUR 148
Exemple du fichier [Link]
S. BOUHADDOUR 149
Exemple 2 du fichier [Link]
S. BOUHADDOUR 150
Exemple 2 du fichier [Link] :
Démarrage d’une application
Les différents services qui composent mon application ont été démarrés, avec la configuration et
l’environnement qui va bien.
Information de mon application
On utilise la commande ps de Compose:
S. BOUHADDOUR 151
Exemple 2 du fichier [Link] :
Conteneurs Classiques
Les services s’exécutent via des conteneurs sur l’hôte. Les commandes docker classiques sont toujours
fonctionnelles.
Passage à l’échelle
On peut passer à l’échelle un service. Autrement dit, on peut augmenter/diminuer le nombre de conteneurs
exécutant un service. Par défaut, Compose exécute chaque service avec un conteneur.
On utilise la commande scale pour changer le nombre de réplicas d’un service:
S. BOUHADDOUR 152
A RETENIR
Compose est un outil pour définir, lancer et gérer des services qui sont définis comme une
ou plusieurs instances d’un conteneur,
Compose utilise un fichier de configuration YAML comme définition de l’environnement,
Avec docker-compose on peut générer des images, lancer et gérer des services, …
Certaines commandes de docker-compose sont équivalentes à l’outil docker, mais
s’appliquent seulement aux conteneurs de la configuration de compose.
S. BOUHADDOUR 153
LES KUBERNETES
Problématique
Comment gérer des containers qui sont dispersés dans un grand nombre de machines ?
Dans le cas où il y a un container qui pose un problème, comment le détecter ?
Lequel aurait besoin de plus de réplications pour subvenir à une subite augmentation de
la charge ?
Solution
L’équipe opérationnelle monitore les serveurs et si un de ces derniers tombe en panne, il devra
créer de nouveaux containers avec les services déchus dans un autre serveur.
Solution automatisée
S. BOUHADDOUR 155
LES KUBERNETES
• Docker est une technologie d'exécution de conteneurs qui vous permet de créer, tester et
déployer des applications plus rapidement qu'avec des méthodes traditionnelles.
• Kubernetes est un outil d'orchestration de conteneurs qui vous permet de mettre à
l'échelle vos systèmes de conteneurs afin que vous puissiez gérer, coordonner et planifier
les conteneurs à grande échelle.
S. BOUHADDOUR 156
Architecture maître-esclave du Kubernetes
S. BOUHADDOUR 157
L’architecture de Kubernetes
• Volumes (persistent ou non persistent) :
Ils constituent les lieux d’échange entre les pods
Persistent dans ce cas on va les stocker à l’extérieur des pods
Non persistent à l’intérieur des pods.
• Déploiements :
Gestion de création/suppression des pods
Gestion des nom de réplicas (les réplicas sets)
Assurer du respect des descriptions des relations entre conteneurs
• Namespaces :
Cluster virtuel (ensemble de services) à l’intérieur de KBS
Cloisonner à l’intérieur de notre cluster pour des services qui ne travaillent pas
ensemble et avoir une cohérence des droits des utilisateurs pour accès aux services qui
travaillent ensemble et gérer le cloisonnement si on a des services totalement différents.
Segmenter les pods
S. BOUHADDOUR 158
Architecture maître-esclave du Kubernetes
S. BOUHADDOUR 159
Les notions et concepts de Kubernetes
S. BOUHADDOUR 160
Les notions et concepts de Kubernetes
• Services:
Le service se place au dessus des pods ce qui permet de faire une abstraction des pods.
Le service évite la communication par IP comme dans le cas des docker (IP peut
changer puisqu’on travaille avec les conteneurs ).
Un service est compose d’un couple IP + Port fixe , qui permet de communiquer avec
des conteneurs
S. BOUHADDOUR 161
Architecture de kubernetes
S. BOUHADDOUR 162
Architecture du Kubernetes
S. BOUHADDOUR 163
Master Node
S. BOUHADDOUR 164
Kubernetes Master
S. BOUHADDOUR 165
Worker Node
Un worker node (WN) est une machine physique ou une VM qui détient toutes les ressources
nécessaires afin de garantir l’exécution d’un ou plusieurs pods. Cette entité va héberger tous
les services qu’un développeur aura décidé de déployer.
S. BOUHADDOUR 166
Kubernetes Node
S. BOUHADDOUR 167
Les Composants d’un Worker Node
Les composants d’un worker node sont responsables du déploiement des pods, et conteneurs,
en plus, disposent des composants par default qui sont:
• Kubelet: Responsable de l’état d’exécution du nœud (c’est-à-dire, d’assurer que tous les
conteneurs sur un nœud sont bien organisés en Pods et envoyer des informations en
permanence au kubernetes master (plan de contrôle).
• Kube-proxy: Responsable d’effectuer le routage du trafic vers le conteneur approprié
(sélectionné pour exécuter cette tâche) en se basant sur l’adresse IP et le numéro de port de
la requête entrante (service demandé par l’utilisateur)
• cAdvisor: Agent qui surveille et récupère les données de consommation des ressources
locales des performances comme le processeur, la mémoire, ainsi que l’utilisation disque et
reseau des conteneurs du Node et envoyer ses données au composant scheduler
(ordonnanceur) dans le composant master qui va se charger de repartir les charges selon
l’état des ressources des nœuds.
S. BOUHADDOUR 168