1- Hyperviseur ?
Un hyperviseur est un logiciel qui permet de créer des machines virtuelles. Il sert à diviser un
ordinateur hôte en plusieurs environnements virtuels, et chaque environnement virtuel peut
fonctionner avec son propre système d'exploitation. Il existe deux types d'hyperviseurs :
Type 1 : Il s'exécute directement sur le matériel de l'ordinateur hôte, sans nécessiter un système
d'exploitation serveur de base supplémentaire.
Type 2 : Il utilise le système d'exploitation de l'ordinateur hôte pour fonctionner.
2- Virtualisation ?
La virtualisation est le processus de création d'une version virtuelle basée sur un logiciel de quelque
chose (calcul, stockage, serveurs, applications, etc.). Ces versions ou environnements virtuels sont
créés à partir d'un seul système matériel physique. La virtualisation vous permet de diviser un
système en de nombreuses sections différentes qui fonctionnent comme des systèmes individuels
séparés et distincts. Un logiciel appelé hyperviseur rend ce type de division possible.
L'environnement virtuel créé par l'hyperviseur est appelé machine virtuelle.
3- Conteneurisation
Habituellement, dans le processus de développement de logiciels, le code développé sur une
machine peut ne pas fonctionner parfaitement sur une autre en raison des dépendances. Ce
problème a été résolu grâce au concept de conteneurisation. En gros, une application en cours de
développement et de déploiement est regroupée et enveloppée avec tous ses fichiers de
configuration et dépendances. Cet ensemble est appelé un conteneur. Maintenant, lorsque vous
souhaitez exécuter l'application sur un autre système, le conteneur est déployé, ce qui crée un
environnement sans bogues, car toutes les dépendances et bibliothèques sont regroupées. Les
environnements de conteneurisation les plus célèbres sont Docker et Kubernetes.
4- Différence entre la virtualisation et la conteneurisation :
La conteneurisation offre un environnement isolé pour l'exécution de l'application. L'espace
utilisateur entier est explicitement dédié à l'application. Toutes les modifications apportées à
l'intérieur du conteneur ne sont jamais reflétées sur l'hôte ou même sur d'autres conteneurs
s'exécutant sur le même hôte. Les conteneurs sont une abstraction de la couche d'application.
Chaque conteneur représente une application différente.
En revanche, dans la virtualisation, les hyperviseurs fournissent une machine virtuelle complète au
système invité (y compris le noyau). Les machines virtuelles sont une abstraction de la couche
matérielle. Chaque machine virtuelle est comme une machine physique distincte.
5- Qu'est-ce que Docker ?
Docker est une plateforme de conteneurisation qui regroupe votre application et toutes ses
dépendances dans des conteneurs, garantissant ainsi que votre application fonctionne de manière
transparente dans n'importe quel environnement, que ce soit en développement, en test ou en
production. Les conteneurs Docker enveloppent un morceau de logiciel dans un système de fichiers
complet contenant tout ce qui est nécessaire pour s'exécuter : le code, le runtime, les outils système,
les bibliothèques système, etc. Ils enveloppent essentiellement tout ce qui peut être installé sur un
serveur. Cela garantit que le logiciel fonctionnera toujours de la même manière, quelle que soit son
environnement.
6- Qu'est-ce qu'un conteneur Docker ?
Les conteneurs Docker comprennent l'application ainsi que toutes ses dépendances. Ils partagent le
noyau avec d'autres conteneurs, s'exécutant en tant que processus isolés dans l'espace utilisateur du
système d'exploitation hôte. Les conteneurs Docker ne sont pas liés à une infrastructure spécifique :
ils s'exécutent sur n'importe quel ordinateur, sur n'importe quelle infrastructure et dans n'importe
quel cloud. Les conteneurs Docker sont essentiellement des instances en cours d'exécution des
images Docker.
7- Image Docker
Une image Docker est la source d'un conteneur Docker. En d'autres termes, les images Docker sont
utilisées pour créer des conteneurs. Lorsqu'un utilisateur exécute une image Docker, une instance
d'un conteneur est créée.
8- Docker Hub
Les images Docker créent des conteneurs Docker. Il doit y avoir un registre où ces images Docker
résident. Ce registre est Docker Hub. Les utilisateurs peuvent prendre des images à partir de Docker
Hub et les utiliser pour créer des images et des conteneurs personnalisés. Actuellement, Docker Hub
est le plus grand référentiel public d'images de conteneurs au monde.
9- Architecture
L'architecture de Docker se compose de trois éléments principaux :
Le serveur (daemon) : C'est un programme qui s'exécute en arrière-plan et gère les
opérations de Docker. Il répond aux demandes et commandes de l'utilisateur.
L'API REST : Il s'agit d'une interface qui permet aux programmes de communiquer avec le
serveur Docker, lui donnant des instructions sur ce qu'il doit faire.
L'interface en ligne de commande (CLI) : C'est l'outil que les utilisateurs utilisent pour
interagir avec Docker. Il envoie des commandes au serveur Docker via l'API REST.
10- DockerFile
Docker peut construire des images automatiquement en lisant les instructions à partir d'un fichier
appelé Dockerfile. Un Dockerfile est un document texte qui contient toutes les commandes qu'un
utilisateur pourrait exécuter en ligne de commande pour assembler une image. En utilisant la
commande docker build, les utilisateurs peuvent créer une construction automatisée qui exécute
plusieurs instructions en ligne de commande successivement.
11- Docker Compose
Docker Compose est un fichier YAML qui contient des détails sur les services, les réseaux et les
volumes pour configurer une application Docker. Le processus est comme suit : vous devez d'abord
créer les images Docker pour vos conteneurs en utilisant un Dockerfile ou en tirant des images
existantes depuis Docker Hub. Une fois que vous avez les images, vous pouvez les orchestrer avec
Docker Compose en utilisant un fichier de composition.
Le fichier de composition Docker Compose définit comment ces conteneurs doivent être configurés,
quels réseaux ils doivent utiliser, comment ils doivent se connecter les uns aux autres, et d'autres
paramètres. Une fois que le fichier de composition est prêt, vous pouvez utiliser la commande
docker-compose up pour lancer l'ensemble de l'application, qui comprendra tous les conteneurs
configurés dans le fichier de composition, ce qui facilite le déploiement et la mise en service de
plusieurs conteneurs interconnectés.
12- Cycle de vie d’un conteneur
1) Création : docker create
2) Démarrage : docker start
3) Exécution : docker run
4) Mise en pause : docker pause
5) Reprise : docker unpause
6) Arrêt : docker stop
7) Redémarrage : docker restart
8) Arrêt forcé : docker kill
9) Suppression : docker rm
Commandes
1. Créer un conteneur à partir d'une image : docker run [options] <image>
2. Lister les conteneurs en cours d'exécution : docker ps
3. Lister tous les conteneurs, y compris ceux qui sont arrêtés : docker ps -a
4. Arrêter un conteneur en cours d'exécution : docker stop <container_id>
5. Redémarrer un conteneur : docker restart <container_id>
6. Supprimer un conteneur arrêté : docker rm <container_id>
7. Afficher les journaux d'un conteneur : docker logs <container_id>
8. Exécuter une commande à l'intérieur d'un conteneur en cours d'exécution : docker exec
[options] <container_id> <command>
9. Créer une image à partir d'un Dockerfile : docker build [options] -t <image_name>
<path_to_Dockerfile>
10. Rechercher une image sur Docker Hub : docker search <image_name>
11. Tirer une image depuis Docker Hub : docker pull <image_name>
12. Lister les images locales : docker images
13. Supprimer une image locale : docker rmi <image_name>
14. Créer un réseau Docker : docker network create <network_name>
15. Lister les réseaux Docker : docker network ls
16. Afficher les informations détaillées sur un conteneur : docker inspect <container_id>