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.

graph TD; subgraph Machine Physique A[Hardware] -->|Hypervisor| B[VM1]; A -->|Hypervisor| C[VM2]; A -->|Host OS| D[Conteneur Docker]; end subgraph VM1 B -->|Guest OS| E[Application 1]; B -->|Guest OS| F[Application 2]; end subgraph VM2 C -->|Guest OS| G[Application 1]; C -->|Guest OS| H[Application 2]; end subgraph Conteneur Docker D -->|Docker Engine| I[Application 1]; D -->|Docker Engine| J[Application 2]; end

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

  1. Téléchargez Docker Desktop à partir du site officiel de Docker et suivez les instructions d’installation.

  2. 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.

graph LR A[Manager Node] -->|Init Command| B((Swarm Cluster)) B --> A

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.

graph LR A[Manager Node] -- Join Command --> B((Worker Node)) B --> A

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.

graph LR A[Manager Node] -- Scale Command --> B((Service)) B --> C{Container 1} B --> D{Container 2} B --> E{Container 3}
Cela peut s’averer utile si, votre service commence a avoir trop de charge. Du coup vous augmentez le nombre de worker-node, et voila!

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