Vous êtes sur la page 1sur 49

DevOps

Chapitre 3 : Docker

ESPRIT – UP ASI (Architecture des Systèmes d’Information)


Bureau E204

© 2023-2024
Plan du cours
– Evolution de la machine de production
– La virtualisation, la conteneurisation
– La virtualisation Vs la conteneurisation
– Docker
• Définition et concepts
• Avantages et inconvénients
• Architecture de Docker
• Installation
• Docker Hub, Docker File, commandes de base
2
© 2023-2024 – Module DevOps – Introduction
Evolution de la machine de production

– Une seule application dans un seul serveur physique.


– Limites :
○ Gaspillage de ressources
○ Manque de flexibilité
○ Complexité de la gestion
○ Redondance insuffisante
○ Coûts élevés
Architecture traditionnelle
○ Difficultés de mise à l'échelle

3
© 2023-2024 – Module DevOps – Introduction
Evolution de la machine de production

– Virtualisation à base d’hyperviseur.

– C’est une technologie qui permet d’exécuter plusieurs


systèmes d'exploitation et applications sur un même serveur
physique.

– La popularité de la virtualisation a été grandement amplifiée


Architecture virtuelle
grâce à l'émergence du cloud computing.

4
© 2023-2024 – Module DevOps – Introduction
La virtualisation

Louer du temps de calcul et de la capacité


de stockage et le contrôle de ressources
pour les applications Cloud sont réalisés en
déployant une technologie de virtualisation
sur les ressources du fournisseur Cloud

Hypervisors Containers

Virtualization overhead Elasticity and density


Computing capacity and storage
Accuracy of compute Virtualisation lourde Virtualisation légère
5
© 2023-2024 – Module DevOps – Introduction
La Virtualisation lourde
– La virtualisation lourde, appelée aussi virtualisation à base d'hyperviseur :

○ Simulation de Machines Physiques : Elle permet de


simuler une ou plusieurs machines physiques.
○ Exécution sous forme de VM : Ces machines virtuelles
(VM) s'exécutent sur un serveur.
○ OS Intégré : Chaque VM intègre son propre système
d'exploitation.
○ Exécution d'Applications : Les applications sont
exécutées à l'intérieur de ces machines virtuelles.
6
© 2023-2024 – Module DevOps – Introduction
La Virtualisation lourde
Avantages des VMs :
○ Optimisation des ressources
○ Division d'une machine physique
○ Facilité de mise à l'échelle
○ VMs dans le Cloud (Azure, Amazon Web Services (AWS), VMware)
○ Élasticité rapide
○ Modèle Pay as You Go

7
© 2023-2024 – Module DevOps – Introduction
La Virtualisation lourde
Limites des VMs :
○ Chaque VM a besoin des ressources (CPU, Stockage
(Disque), RAM ,Un OS invité)
○ En augmentant les VMs, on demande plus de
ressources :
▪ Chaque OS invité alloue ses propres ressources
→ Gaspillage
▪ Portabilité d’application n’est pas garantie

8
© 2023-2024 – Module DevOps – Introduction
La virtualisation légère : la conteneurisation

La conteneurisation est une méthode légère et agile pour gérer la virtualisation.

– Fourniture de services complets : Fournit tout ce dont une application a besoin


(les services, scripts, API, librairies) afin d'économiser les ressources.

– Isolation au niveau des conteneurs : Isole les applications les unes des autres,
mais partage le même système d'exploitation (OS).

– Partage d'OS et d'espace mémoire : Permet aux applications de coexister sur le


même OS et de partager la mémoire pour économiser les ressources.

9
© 2023-2024 – Module DevOps – Introduction
Qu’est ce qu’un Conteneur ?
Enveloppe (emballage) standardisé des applications et leurs dépendances.

● Isolation des applications : Chaque application est


séparée des autres pour éviter les conflits.

● Partage du noyau OS : Il partage le noyau du système


d'exploitation avec le système hôte pour économiser
des ressources.

● Compatible avec Linux et Windows Server : Il


fonctionne sur tous les systèmes Linux et Windows
Server, ce qui le rend largement pris en charge.
10
© 2023-2024 – Module DevOps – Introduction
Conteneurisation Vs Virtualisation
VM VM VM

Container

Conteneurs :

Machines Virtuelles (VMs) : ● Isolent chaque application, mais partagent le


même système d'exploitation de l'ordinateur hôte.
● Recréent un serveur complet pour
chaque application, y compris son propre ● Plusieurs conteneurs peuvent partager le même
système d'exploitation. système d'exploitation pour différentes tâches.

11
© 2023-2024 – Module DevOps – Introduction
Conteneurisation Vs Virtualisation
Virtualisation Conteneurisation
Une virtualisation lourde Une virtualisation légère
À base d’hyperviseur À base des conteneurs
Virtualisation des ressources hardware Virtualisation au niveau du système
(CPU, RAM, disque, …) d’exploitation
Machine invité (machine virtuelle) Conteneur
Image ISO Librairies nécessaires
Machine hôte Moteur de conteneur
Démarrage plus lent Démarrage en quelques secondes
Isolation au niveau du processus et
Entièrement isolé et donc plus sécurisé
donc moins sécurisée
12
© 2023-2024 – Module DevOps – Introduction
Conteneurisation & Virtualisation
En utilisant à la fois des conteneurs et des machines virtuelles (VMs) :

– Vous bénéficiez d'une grande polyvalence pour répondre à différents besoins en


matière de déploiement d'applications. PROD

DEV
– Vous optimisez l'utilisation des ressources
matérielles tout en maintenant un bon
niveau de sécurité et d'isolation pour vos
applications.

13
© 2023-2024 – Module DevOps – Introduction
Docker - Définition
– Docker est un logiciel créé par Solomon Hykes et développé par Docker, Inc. Il
permet de créer des environnements – appelés « Containers » – permettant d’isoler
des applications.

– Il permet d’embarquer une application dans un ou plusieurs conteneurs logiciels, ce


qui lui permet de s'exécuter sur n'importe quel serveur, qu'il soit physique ou virtuel.

14
© 2023-2024 – Module DevOps – Introduction
Docker - Editions
– Docker propose deux éditions distinctes, qui offrent des fonctionnalités adaptées à
différents besoins :
○ Version Communauté (Community Edition : CE) :
Pour les utilisateurs individuels et les petites
équipes. Elle offre les bases de Docker.

○ Version Entreprise (Entreprise Edition : EE) : Pour


les grandes organisations. Elle inclut des
fonctionnalités avancées et un support technique.

15
© 2023-2024 – Module DevOps – Introduction
Docker - Lexique
– Image : template de conteneur en read-only contenant un système de base et une
application. Il contient tous les fichiers et dépendances nécessaires à l'exécution
d'une application.

– Conteneur : Image exécutable d’un environnement complet incluant code,


librairies, outils et configuration.

→ Un conteneur est une instance d’une image exécutée

– Docker HUB : Dépôt public d’images mises à disposition par Docker

○ DockerHub (https://store.docker.com)
16
© 2023-2024 – Module DevOps – Introduction
Docker - Lexique
– Dockerfile : fichier texte de description d’une image

– Docker Machine : Outil de déploiement des hôtes Docker sur différentes


plateformes (Mac, Windows) : https://docs.docker.com/machine/overview/

– Registry : Dépôt privé d’images Docker

17
© 2023-2024 – Module DevOps – Introduction
Docker - Statistiques

18
© 2023-2024 – Module DevOps – Introduction
Docker - Avantages
– Flexible : Même les applications les plus complexes peuvent être conteneurisées.
– Léger : Les conteneurs exploitent et partagent l’OS hôte, ce qui les rend beaucoup
plus efficaces en termes de ressources système que les machines virtuelles.
– Portable : Moins de dépendances avec la machine hôte.
– Faiblement couplé : Les conteneurs sont hautement autonomes et encapsulés, ce
qui vous permet de remplacer ou de mettre à niveau l’un sans en perturber les
autres.
– Évolutif : Vous pouvez augmenter et distribuer automatiquement les répliques de
conteneurs dans un centre de données.

19
© 2023-2024 – Module DevOps – Introduction
Docker - Inconvénients
– Docker présente quelques inconvénients parmi lesquelles nous pouvons citer :

✔ La difficulté de gérer plusieurs conteneurs simultanément

✔ Possible failles de sécurité (conteneurs partagent le même système


d’exploitation)

20
© 2023-2024 – Module DevOps – Introduction
Docker Engine
Docker Engine est le cœur de Docker, responsable de l'exécution des conteneurs.

● Docker Daemon : Le service en arrière-plan qui gère les


opérations de conteneurisation sur le système hôte.

● Docker CLI (Command Line Interface) : L'interface en ligne


de commande permettant aux utilisateurs d'interagir avec
le démon Docker pour créer, gérer et exécuter des
conteneurs.

● Docker API : Une interface de programmation permettant


aux applications de communiquer avec le démon Docker.

21
© 2023-2024 – Module DevOps – Introduction
Docker - Architecture

22
© 2023-2024 – Module DevOps – Introduction
Docker - Workflow et Commandes

23
© 2023-2024 – Module DevOps – Introduction
Docker - Installation
– Allez dans le répertoire de votre machine virtuelle Ubuntu, démarrez la machine
virtuelle (vagrant up) et ouvrez un terminal (vagrant ssh).

24
© 2023-2024 – Module DevOps – Introduction
Docker - Installation
– Pour installer Docker, exécutez les commandes suivantes :
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o
/etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg]
https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
docker-compose-plugin
sudo service docker start
sudo service docker enable

25
© 2023-2024 – Module DevOps – Introduction
Docker - Installation
– Docker est déjà en cours d'exécution après l'installation. Pour vérifier son état,
utilisez la commande suivante : sudo systemctl status docker

– CTRL C pour sortir de la commande de status


26
© 2023-2024 – Module DevOps – Introduction
Docker - Installation
– Pour accorder des droits de lecture et d'écriture (mais pas d'exécution) à l'utilisateur
"vagrant", à son groupe et à tout autre utilisateur(6 = (R=1 / W=1 X=0)) sur le fichier
/var/run/docker.sock, utilisez la commande suivante :
sudo chmod 666 /var/run/docker.sock

– Pour vous assurer que tout fonctionne correctement, vous pouvez vérifier la version de
Docker et exécuter l'image "hello-world" (qui sera automatiquement téléchargée
depuis Docker Hub) en utilisant les commandes suivantes :
○ Pour vérifier la version de Docker : docker -v

○ Pour exécuter l'image "hello-world" : docker run hello-world


27
© 2023-2024 – Module DevOps – Introduction
Docker - Installation

28
© 2023-2024 – Module DevOps – Introduction
Docker - Manipulation
– Pour importer une image, vous avez plusieurs options :
○ Docker Hub : Importer une image depuis le référentiel cloud Docker.
○ Utiliser un fichier Dockerfile : Créer une image en utilisant un fichier
Dockerfile et les commandes associées.
○ À partir d'un registre local : Importer une image à partir d'un registre
local, sans accéder au cloud.
○ À partir d'un conteneur : Créer une nouvelle image à partir d'un
conteneur existant, en prenant le contenu du conteneur pour créer
une nouvelle image ( Image => conteneur => image).
29
© 2023-2024 – Module DevOps – Introduction
Docker - Docker Hub
– Docker Hub est le registre officiel de Docker.
– C’est un service SaaS (Software As A Service ou logiciel en tant que service) qui
rassemble des applications sous forme de conteneurs (images). Ces images sont créées
par des développeurs et des opérationnels et sont accessibles à tous.
– Docker lui-même peut également fournir ces images.
– Vous avez la possibilité de télécharger ces images et de partager les vôtres.

30
© 2023-2024 – Module DevOps – Introduction
Docker - Docker File
– Un Dockerfile est un fichier texte contenant les commandes que l'on utiliserait
en ligne de commande pour créer notre propre image.
– Il part d'une image de base standard à laquelle nous ajoutons les éléments
spécifiques à l'application que nous souhaitons déployer. Créons le Dockerfile :
Dockerfile

31
© 2023-2024 – Module DevOps – Introduction
Docker - Docker File

32
© 2023-2024 – Module DevOps – Introduction
Docker - Docker File
Les instructions de base que peut contenir un DockerFile sont les suivantes :
o FROM permet de définir depuis quelle base votre image va être créée
o LABEL permet de définir l’auteur de l’image
o RUN permet de lancer une commande
o ADD permet de copier un fichier depuis la machine hôte ou depuis une URL
o EXPOSE permet d’exposer un port du container vers l’extérieur
o CMD détermine la commande qui sera exécutée lorsque le container démarrera
o ENTRYPOINT permet d’ajouter une commande qui sera exécutée par défaut
o WORKDIR permet de définir le dossier de travail pour toutes les autres commandes
o ENV permet de définir des variables d’environnements
o VOLUMES permet de créer un point de montage qui permettra de persister les données
33
© 2023-2024 – Module DevOps – Introduction
Création d'une image à partir d'un Dockerfile
– Pour construire l'image Docker définie dans le fichier Dockerfile ci-dessus
docker build -t "Nom_de_l'image_à_créer" "Chemin_vers_le_fichier"

– Vous pouvez spécifier "." (un point) si le fichier Dockerfile se trouve dans le répertoire courant.

– Si vous n'utilisez pas le nom de fichier Dockerfile par défaut, l'option -f est requise.

– Dans le nom de l'image à créer, vous devez spécifier votre nom d'utilisateur sur Docker Hub
pour pouvoir envoyer votre image sur Docker Hub (par exemple, "bensalahons/alpine").

34
© 2023-2024 – Module DevOps – Introduction
Création d'une image à partir d'un Dockerfile
– A partir de l'image officielle d'Alpine (sur Docker Hub), nous allons créer notre propre image
personnalisée "alpine:1.0.0" avec Java 11.

35
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base
– Pour extraire une image ou un référentiel d’un registre Docker, tapez la commande suivante :
docker pull "nom_de_l'image":"version"
→ Si vous ne spécifiez pas la version, Docker télécharge automatiquement la dernière

version.

36
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base
Pour créer un conteneur, utilisez la commande suivante : docker run "nom_de_l'image"
→ Si Docker ne trouve pas l'image localement, il la télécharge automatiquement depuis

Docker Hub, puis crée le conteneur.

37
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base

Source : Run a single task “Hello World” 38


© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base
– Pour récupérer la liste des images, tapez la commande : docker images

39
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base
– Pour obtenir plus de détails sur une image Docker, exécutez la commande suivante :
docker image inspect "les_5_premières_lettres_de_l'ID_de_l'image"

40
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base
– Pour récupérer la liste des conteneurs (y compris ceux arrêtés), vous pouvez
utiliser les commandes suivantes :
docker container ls -a ou bien docker ps -a

– Pour obtenir la liste des conteneurs actifs (ceux qui sont en cours d'exécution) :
docker ps

→ Pourquoi on peut pas observer le conteneur associé à l'image alpine:1.0.0 ?


41
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base
– Lancer un conteneur en arrière-plan (en utilisant l'option -d : docker run -itd)
pour y accéder ultérieurement :
– La commande ci-dessous démarre un conteneur et exécute un client SSH à
l'intérieur.

42
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base
– Pour accéder à un conteneur déjà en cours d'exécution (en utilisant docker
exec), vous pouvez interagir avec le conteneur comme si vous étiez dans une
machine virtuelle ou un serveur Linux :

43
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base
– Pour supprimer une image, vous pouvez utiliser l'une des deux commandes suivantes :
docker image rm "nom_image" --force
ou docker rmi "nom_image" --force

44
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base
– Pour supprimer un conteneur, utilisez la commande : docker rm "ID_du_conteneur"

45
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base
– Si ce n'est pas déjà fait, créez un compte sur Docker Hub à l'adresse
https://hub.docker.com, puis connectez-vous en utilisant la commande :
docker login

46
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base
– Pour envoyer une image que vous avez créée vers Docker Hub, utilisez la
commande : docker push

47
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base

48
© 2023-2024 – Module DevOps – Introduction
"Apprendre par le projet, c'est découvrir
par l'action, créer par la compréhension, et
réussir par la persévérance."

ESPRIT – UP ASI (Architecture des Systèmes d’Information)

nous supportons les objectifs de développement durable Bureau E204

Vous aimerez peut-être aussi