DevOps 3 - Docker
DevOps 3 - Docker
DevOps 3 - Docker
Chapitre 3 : Docker
© 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
3
© 2023-2024 – Module DevOps – Introduction
Evolution de la machine de production
4
© 2023-2024 – Module DevOps – Introduction
La virtualisation
Hypervisors Containers
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
– Isolation au niveau des conteneurs : Isole les applications les unes des autres,
mais partage le même système d'exploitation (OS).
9
© 2023-2024 – Module DevOps – Introduction
Qu’est ce qu’un Conteneur ?
Enveloppe (emballage) standardisé des applications et leurs dépendances.
Container
Conteneurs :
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) :
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.
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.
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.
○ DockerHub (https://store.docker.com)
16
© 2023-2024 – Module DevOps – Introduction
Docker - Lexique
– Dockerfile : fichier texte de description d’une image
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 :
20
© 2023-2024 – Module DevOps – Introduction
Docker Engine
Docker Engine est le cœur de Docker, responsable de l'exécution des conteneurs.
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
– 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
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
37
© 2023-2024 – Module DevOps – Introduction
Docker - Commandes de base
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
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."