Contenu connexe Similaire à DevOps 3 - Docker.pdf Similaire à DevOps 3 - Docker.pdf (20) DevOps 3 - Docker.pdf1. Chapitre 3 : Docker
ESPRIT – UP ASI (Architecture des Systèmes d’Information)
Bureau E204
DevOps
© 2023-2024
2. 2
Plan du cours
© 2023-2024 – Module DevOps – Introduction
– 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
3. 3
Evolution de la machine de production
© 2023-2024 – Module DevOps – Introduction
– 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
○ Difficultés de mise à l'échelle Architecture traditionnelle
4. 4
Evolution de la machine de production
© 2023-2024 – Module DevOps – Introduction
– 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
grâce à l'émergence du cloud computing. Architecture virtuelle
5. © 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
5
Hypervisors
Virtualization overhead
Virtualisation lourde
Containers
Elasticity and density
Virtualisation légère
Computing capacity and storage
Accuracy of compute
6. 6
© 2023-2024 – Module DevOps – Introduction
– La virtualisation lourde, appelée aussi virtualisation à base d'hyperviseur :
La Virtualisation lourde
○ 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.
7. 7
© 2023-2024 – Module DevOps – Introduction
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
La Virtualisation lourde
8. 8
© 2023-2024 – Module DevOps – Introduction
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
La Virtualisation lourde
9. 9
La virtualisation légère : la conteneurisation
© 2023-2024 – Module DevOps – Introduction
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.
10. 10
Qu’est ce qu’un Conteneur ?
© 2023-2024 – Module DevOps – Introduction
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.
11. 11
Conteneurisation Vs Virtualisation
© 2023-2024 – Module DevOps – Introduction
Machines Virtuelles (VMs) :
● Recréent un serveur complet pour
chaque application, y compris son propre
système d'exploitation.
Conteneurs :
● Isolent chaque application, mais partagent le
même système d'exploitation de l'ordinateur hôte.
● Plusieurs conteneurs peuvent partager le même
système d'exploitation pour différentes tâches.
VM VM VM
Container
12. 12
Conteneurisation Vs Virtualisation
© 2023-2024 – Module DevOps – Introduction
Virtualisation Conteneurisation
Une virtualisation lourde Une virtualisation légère
À base d’hyperviseur À base des conteneurs
Virtualisation des ressources hardware
(CPU, RAM, disque, …)
Virtualisation au niveau du système
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
Entièrement isolé et donc plus sécurisé
Isolation au niveau du processus et
donc moins sécurisée
13. 13
Conteneurisation & Virtualisation
© 2023-2024 – Module DevOps – Introduction
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.
– Vous optimisez l'utilisation des ressources
matérielles tout en maintenant un bon
niveau de sécurité et d'isolation pour vos
applications.
DEV
PROD
14. 14
Docker - Définition
© 2023-2024 – Module DevOps – Introduction
– 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.
15. 15
Docker - Editions
© 2023-2024 – Module DevOps – Introduction
– 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.
16. 16
Docker - Lexique
© 2023-2024 – Module DevOps – Introduction
– 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)
17. 17
Docker - Lexique
© 2023-2024 – Module DevOps – Introduction
– 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
19. 19
Docker - Avantages
© 2023-2024 – Module DevOps – Introduction
– 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.
20. 20
Docker - Inconvénients
© 2023-2024 – Module DevOps – Introduction
– 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)
21. 21
Docker Engine
© 2023-2024 – Module DevOps – Introduction
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.
24. 24
Docker - Installation
© 2023-2024 – Module DevOps – Introduction
– Allez dans le répertoire de votre machine virtuelle Ubuntu, démarrez la machine
virtuelle (vagrant up) et ouvrez un terminal (vagrant ssh).
25. 25
Docker - Installation
© 2023-2024 – Module DevOps – Introduction
– 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
26. 26
© 2023-2024 – Module DevOps – Introduction
– 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
Docker - Installation
27. 27
© 2023-2024 – Module DevOps – Introduction
– 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
Docker - Installation
29. 29
© 2023-2024 – Module DevOps – Introduction
– 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).
Docker - Manipulation
30. 30
© 2023-2024 – Module DevOps – Introduction
– 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.
Docker - Docker Hub
31. 31
© 2023-2024 – Module DevOps – Introduction
– 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 :
Docker - Docker File
Dockerfile
33. 33
© 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
34. 34
© 2023-2024 – Module DevOps – Introduction
– 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").
Création d'une image à partir d'un Dockerfile
35. 35
© 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.
36. 36
© 2023-2024 – Module DevOps – Introduction
– 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.
Docker - Commandes de base
37. 37
© 2023-2024 – Module DevOps – Introduction
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.
Docker - Commandes de base
38. 38
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base
Source : Run a single task “Hello World”
39. 39
© 2023-2024 – Module DevOps – Introduction
– Pour récupérer la liste des images, tapez la commande : docker images
Docker - Commandes de base
40. 40
© 2023-2024 – Module DevOps – Introduction
– 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"
Docker - Commandes de base
41. 41
© 2023-2024 – Module DevOps – Introduction
– 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
Docker - Commandes de base
→ Pourquoi on peut pas observer le conteneur associé à l'image alpine:1.0.0 ?
42. 42
© 2023-2024 – Module DevOps – Introduction
– 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.
Docker - Commandes de base
43. 43
© 2023-2024 – Module DevOps – Introduction
– 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 :
Docker - Commandes de base
44. 44
© 2023-2024 – Module DevOps – Introduction
– 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
Docker - Commandes de base
45. 45
© 2023-2024 – Module DevOps – Introduction
– Pour supprimer un conteneur, utilisez la commande : docker rm "ID_du_conteneur"
Docker - Commandes de base
46. 46
© 2023-2024 – Module DevOps – Introduction
– 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
Docker - Commandes de base
47. 47
© 2023-2024 – Module DevOps – Introduction
– Pour envoyer une image que vous avez créée vers Docker Hub, utilisez la
commande : docker push
Docker - Commandes de base
49. "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)
Bureau E204
nous supportons les objectifs de développement durable