Docker et Docker Swarm
Introduction à Docker
Qu’est-ce que Docker ?
Docker est un outil qui permet le déploiement d’applications dans des conteneurs. Ces conteneurs permettent d’isoler des services, cela veut dire que peu importe ou vous exécutez votre container, ça marchera. On aura plus l’excuse “ça marchait sur mon poste” ;)
Pourquoi Utiliser Docker ?
-
Isolation des Applications : Chaque application et ses dépendances sont encapsulées dans un conteneur, évitant ainsi les conflits du genre, la BDD a change la version php et mon site web ne marche plus.
-
Portabilité : Les conteneurs Docker fonctionnent de manière identique sur n’importe quel environnement ou Docker est installé.
-
Efficacité : Les conteneurs partagent le même noyau du système hôte, ce qui les rend légers et nécessitant moins de ressources que les machines virtuelles traditionnelles. Mais attention a bien les sécuriser !!
Architecture de Docker
Vous allez vous dire peut etre, mais comment ça marche Docker ? Et surtout c’est quoi la difference entre une VM et un container ? Tout d’abord commencons par un schema explicatif de la difference entre une VM et un container.
Ce schéma représente les différentes couches d’isolation et d’exécution d’une application. Au sommet, nous avons la Machine Physique, le matériel réel de l’ordinateur. Juste en dessous, nous avons des Machines Virtuelles (VMs) qui fonctionnent sur un hyperviseur (Veemx, HyperV,…). Chaque VM a son propre système d’exploitation (Guest OS) et exécute ses propres applications.
En parallèle, nous avons des Conteneurs Docker, qui fonctionnent directement sur le système d’exploitation hôte (Host OS). Ils partagent le noyau du système hôte et sont beaucoup plus légers que les VMs car ils n’ont pas besoin d’un système d’exploitation complet. Chaque conteneur exécute également ses propres applications.
Alors que les VMs sont des environnements virtuels complets avec leurs propres systèmes d’exploitation, les conteneurs Docker sont des instances d’applications isolées qui partagent le même noyau du système hôte. Cela les rend plus efficaces et rapides à déployer que les VMs, tout en maintenant un haut niveau d’isolation.
Installation de Docker
Windows et MacOS
-
Téléchargez Docker Desktop à partir du site officiel de Docker et suivez les instructions d’installation.
-
Une fois l’installation terminée, lancez Docker Desktop.
Linux
Sur Linux, l’installation de Docker dépend de la distribution que vous utilisez. Vous pouvez suivre les instructions spécifiques à votre distribution sur la page d’installation de Docker.
Premier Pas avec Docker
Exécuter un Conteneur
Pour exécuter un conteneur, ouvrez un terminal et exécutez la commande suivante :
docker run -p 80:80 --name mon-premier-conteneur nginx
Cette commande exécute un conteneur nginx déjà paramètre par la communauté en arrière-plan et le mappe sur le port 80 de votre machine.
Arrêter et Supprimer un Conteneur
- Pour arrêter un conteneur, utilisez la commande :
docker stop mon-premier-conteneur
- Pour supprimer un conteneur, utilisez la commande :
docker rm mon-premier-conteneur
Egalement vous pouvez utiliser l’id du container si vous vous rappelez plus de son nom, l’id vous pouvez l’avoir avec la commande :
bash docker ps -a
Dans la prochaine partie, nous allons découvrir Docker Swarm, qui permet de gérer plusieurs conteneurs en tant qu’unité.
Utilisation Avancée avec Docker Swarm
Introduction à Docker Swarm
Qu’est-ce que Docker Swarm ?
Docker Swarm est un outil d’orchestration intégré à Docker (donc pas la peine de l’installer) qui permet de gérer un groupe de conteneurs Docker comme un seul système. Il offre des fonctionnalités avancées telles que la haute disponibilité, l’équilibrage de charge, et la mise à l’échelle automatique.
Configuration d’un Cluster Swarm
Initialiser un Cluster Swarm
Pour commencer, initialisez un cluster Swarm en tant que manager en utilisant la commande suivante :
docker swarm init
Cette commande mettra en place votre machine en tant que nœud manager du cluster Swarm. Aparté : Quand je parle de manager et de worker, je parle d’une VM, et d’une autre VM, avec chacune docker installe.
Ajouter des Nœuds au Cluster
Pour ajouter des nœuds supplémentaires au cluster, exécutez la commande suivante sur les autres VM que vous souhaitez inclure :
docker swarm join --token <token> <IP:port>
Le <token>
sera spécifique à votre cluster, et vous pouvez l’obtenir en exécutant docker swarm join-token worker
sur le nœud manager.
Déploiement d’un Service avec Docker Stack
Création d’un Fichier docker-compose.yml
Créez un fichier docker-compose.yml
avec le contenu suivant pour déployer un service web basé sur Nginx :
version: '3'
services:
web:
image: nginx:alpine
ports:
- "80:80"
Déploiement du Service
Exécutez cette commande pour déployer le service avec Docker Stack :
docker stack deploy -c docker-compose.yml monapplication
Gestion des Services et des Conteneurs
Vérification de l’État du Service
Vous pouvez vérifier l’état du service en utilisant cette commande :
docker service ls
Cela vous donnera une liste des services actuellement en cours d’exécution.
Mise à l’Échelle du Service
Pour augmenter le nombre de répliques du service, utilisez la commande suivante :
docker service scale monapplication_web=3
Cela augmentera le nombre de conteneurs du service à trois.
Egalement j’ai oublie de preciser mais, worker-node = containers(dans une vm).
Gestion Avancée avec Docker Swarm
Gestion des Services et des Conteneurs (suite)
Mise à Jour d’un Service
Pour mettre à jour un service avec une nouvelle image, utilisez la commande suivante :
docker service update --image nouvelle-image mon-service
Cela mettra à jour le service avec une nouvelle image, cela est bien quand vous avez un site web qui evolue par exemple.
Suppression d’un Service
Pour supprimer un service, utilisez la commande suivante :
docker service rm mon-service
Déconnexion d’un Nœud
Si vous devez retirer un nœud du cluster, utilisez la commande suivante sur le nœud que vous souhaitez retirer :
docker swarm leave
Conclusion
Bravo !! On a finalement reussi a comprendre comment est-ce que swarm fonctionne, et si la prochaine etape c’etait Kubernetes ? :D