Aller au contenu

Introduction

Comme je l’ai déjà mentionné dans la section Technologies, la conteneurisation est une technique qui permet de créer des conteneurs légers et portables pour les applications logicielles. Ces conteneurs sont autonomes et peuvent être exécutés sur n’importe quelle machine sans avoir à installer des dépendances supplémentaires.

C’est bien pratique ! Ca évite d’entendre des phrases du genre :

« Ben… je comprends pas, ça marche sur ma machine pourtant ! »

Avec la conteneurisation, tout le monde travaille dans le même environnement, ce qui évite les problèmes de compatibilité. Et pour l’installation et la mise en production, ça devient un jeu d’éveil !

Pour cette raison, je me suis penchée plus en détail sur Docker, un outil que j’ai abordé très rapidement dans ma formation de développeur Java.

Alors, comment ça marche tout ça ? C’est ce que nous allons voir dans cette section.


Docker

Docker est un outil open-source qui permet de créer, de déployer et de gérer des conteneurs. Il est basé sur la technologie de conteneurisation Linux, qui permet d’isoler les applications dans des conteneurs.


Conteneur vs Machine virtuelle

Un conteneur est une unité logicielle qui contient une application et toutes ses dépendances. Il est isolé du reste du système, mais partage le même noyau de l’OS hôte avec les autres conteneurs. Cela le rend plus léger et plus rapide à démarrer qu’une machine virtuelle, laquelle contient un système d’exploitation complet, ce qui la rend plus lourde et plus longue à démarrer.


Architecture

Docker repose sur une architecture client-serveur. Le serveur est responsable de la création, de la gestion et de l’exécution des conteneurs ; il utilise le noyau Linux pour les isoler les uns des autres. Le client peut être exécuté sur la même machine que le serveur ou sur une machine distante.

Les principaux composants de Docker sont :

  • Docker Engine : le moteur de Docker, chargé de la création, de l’exécution et de la gestion des conteneurs.
  • Docker Daemon : processus en arrière-plan qui écoute les requêtes du client et orchestre les conteneurs.
  • Docker CLI : l’interface en ligne de commande qui permet d’interagir avec le moteur de Docker.
  • Docker Hub : registre d’images où sont stockées et partagées les images Docker publiques et privées.

Images et conteneurs

Une image Docker est un modèle immuable qui contient tout le nécessaire pour exécuter une application (code, dépendances, configurations). Elle est créée à partir d’un Dockerfile.

Un conteneur est une instance en cours d’exécution d’une image . Contrairement à une image, un conteneur peut être modifié en cours d’exécution (exemple : écriture de fichiers), mais ces modifications sont perdues lorsqu’il est supprimé. Pour mettre à jour une application, on recrée simplement une nouvelle image et on redéploie les conteneurs associés.


Dockerfile

Un Dockerfile est un fichier texte qui contient les instructions nécessaires à la création d’une image Docker. Il décrit les étapes de construction de l’image, à l’aide de plusieurs instructions, telles que FROM, RUN, COPY, CMD, etc. Grâce à lui, il est possible de créer des images reproductibles et adaptées aux besoins spécifiques d’une application.


Réseaux et volumes

Docker permet de créer des réseaux virtuels pour connecter les conteneurs entre eux. En outre, il rends possible le stockage des données de manière persistante en dehors des conteneurs grâce à la création de volumes. Les réseaux et les volumes permettent de partager des ressources entre les conteneurs et de garantir l’isolation et la sécurité des applications.

Les différents types de réseaux sont :

  • Bridge : réseau par défaut, utilisé pour les conteneurs sur la même machine.
  • Host : réseau qui partage le même espace d’adressage IP que l’hôte.
  • Overlay : réseau qui permet la communication entre conteneurs sur plusieurs machines.
  • Macvlan : réseau qui donne une adresse IP unique aux conteneurs pour qu’ils apparaissent comme des appareils physiques sur le réseau.

Les différents types de volumes sont :

  • Bind mount : volume qui monte un répertoire de l’hôte dans le conteneur.
  • Volume : volume qui stocke les données de manière persistante.
  • Tmpfs : volume qui stocke les données en mémoire vive, supprimé au redémarrage du conteneur.

Docker Compose

Docker Compose est un outil qui permet de définir et de gérer des applications multi-conteneurs. Il utilise un fichier YAML pour décrire les services, les réseaux et les volumes nécessaires à l’application. Docker Compose permet de démarrer, d’arrêter et de surveiller les conteneurs de manière simple et efficace. Il facilite le déploiement et la gestion des applications conteneurisées.