Accueil / Articles / Docker et la conteneurisation
Docker et la conteneurisation
Publié le 3 Mars 2025
Docker est une plateforme de conteneurisation lancée en 2013 qui simplifie le déploiement et l’exécution d’applications dans des environnements isolés qu’on appelle des conteneurs.
Pourquoi la conteneurisation ?
Le principe d’isoler des applications dans des environnements isolés n’est pas nouveau. D’autres technologies existaient déjà avant Docker et l’ont peut s’interroger sur l'intérêt de cette solution. Nous allons dans un premier temps passer en revue les différents moyens de créer des environnements isolés sur une machine.
La virtualisation
Il y a souvent une confusion entre virtualisation et conteneurisation. La virtualisation en informatique est un mécanisme qui consiste à faire fonctionner plusieurs serveurs ou applications sur un même serveur physique à l’aide de ce qu’on appelle des machines virtuelles (VM).
Avant la virtualisation, chaque service était hébergé sur un serveur différent, une fraction des ressources disponibles sur le serveur était vraiment exploitée. La virtualisation va permettre d'héberger différents services sur la même machine physique et d'exploiter au maximum les ressources (ram, processeur, espace disque).
La conteneurisation
Au premier abord, on pourrait se dire qu’un conteneur fonctionne comme une VM. La différence subtile entre le conteneur et la machine se situe au niveau du système d’exploitation (OS). Pour rappel, un OS est un logiciel qui exploite le matériel physique d’une machine et reçoit des instructions de l’utilisateur ou des logiciels installés dessus.
Une machine virtuelle (VM) est installée sur un OS hôte dans lequel est installé un autre OS. Le conteneur est lui aussi installé sur un OS hôte mais contrairement à une VM, il n’a pas d’OS intégré (pas complètement en tout cas) et utilise directement l’OS hôte.
Les conteneurs sont juste des processus (ou des démons). Ils sont légers, portables et permettent notamment à des applications d’être packagées et déplacées rapidement. Ils utilisent beaucoup moins de ressources qu’une VM pour fonctionner.
Avant l’émergence de Docker, plusieurs technologies de conteneurisation existaient déjà et tiraient partie des capacités du noyau Unix ou Linux. L’un des plus connus étant Linux Containers (LXC).
Qu’apporte Docker par rapport aux technologies de conteneurisation existantes ?
Les conteneurs Docker et autres technologies comme LXC utilisent le noyau de la machine hôte et ne possèdent pas d’OS complet. Toutefois, des différences importantes existent entre les deux.
Template vs Image
Un conteneur LXC peut contenir une distribution Linux complète avec l’utilisation de templates et offrir un environnement quasi identique à un OS Linux complet, tout en utilisant le noyau de l’OS hôte pour fonctionner. Les templates correspondent à une distribution Linux complète et ne sont pas superposables : ils ne sont pas construits de manière modulaire pour pouvoir être superposés.
Docker propose une conteneurisation des applications en utilisant des images plus légères. Une image correspond aux fichiers binaires, dépendances et métadonnées concernant la façon dont il faudra l’exécuter. L’image inclut uniquement les éléments indispensables pour exécuter l’application. L’énorme avantage des images est qu’elles sont superposables.
Ecosystème
LXC demande une gestion bas niveau et peut demander des configurations plus fines. Docker propose une interface en ligne de commandes simple d’utilisation (il existe des versions desktop aussi) qui dispose d’outils pour la gestion des conteneurs.
Objectifs
LXC s’oriente davantage vers la création d’environnements complets et isolés pour des applications qui ont besoin d’un environnement proche d’un système Linux complet.
Docker est optimisé pour la création et le déploiement d'applications conteneurisées, légères, portables et modulables.
Comment fonctionne Docker ?
Les outils
Le démon Docker : c’est le moteur de Docker. Il s’exécute en arrière plan et est responsable de la gestion des conteneurs, de la création des images, de leur exécution et de la communication avec d’autres composants.
Le client Docker : il correspond à l’interface en ligne de commandes (CLI) et permet à un utilisateur d'interagir avec Docker. Le client communique ensuite avec le démon Docker via une API.
Images, conteneurs et système de couches
Une image correspond à un modèle qui contiendra tous les éléments nécessaires pour exécuter une application (code source, dépendances, configurations, etc…). Les images sont créées à partir d’un Dockerfile, qui est un script décrivant toutes les instructions pour assembler une image par couches successives.
Chaque instruction de Dockerfile génère une nouvelle couche dans l’image finale. Cela permet une réutilisation efficace des parties communes entre différentes images et va limiter l’utilisation de l’espace de stockage disque. Un système de cache est également mis en place ce qui facilite la construction et la mise à jour des images.
Les images seront ensuite instanciés pour créer des conteneurs. Ce qui permet d’exécuter une application dans un environnement isolé, où l’on pourra faire des modifications sans affecter l’image d’origine.
Les réseaux et l’isolation des conteneurs
Pour chaque conteneur, des mécanismes de virtualisation au niveau de l’OS vont isoler les processus et ressources de la machine hôte. Ainsi, les conteneurs n’interfèrent pas avec les autres.
Sur la même machine hôte, les conteneurs peuvent communiquer entre eux graĉe à un réseau par défaut créé par Docker, le “bridge”. En fonction des besoins, il est possible de créer son propre réseau pour communiquer avec d’autres conteneurs sur différents hôtes ou avec l'extérieur.
Dépots d’images
Les images que l’on construit sont souvent basées sur d’autres images existantes récupérées sur des dépôts (registres) publics ou privés. Le plus connu de ces registres étant le Docker Hub, qui offre un accès à une multitude d’images publiques, mis à dispositions le plus souvent par des développeurs de logiciels open source ou d’entreprises privées (Mysql, Postgresql, Nginx, etc…).
Les volumes
Par défaut, tous les conteneurs sont éphémères et les données à l’intérieur disparaissent à l’arrêt de ces derniers. Pour conserver les données de manière persistante, Docker met à disposition un système de volumes, un espace de stockage au niveau de la machine hôte indépendant des conteneurs.
Pourquoi utiliser Docker en tant que développeur ?
Docker offre de nombreux avantages pour les développeurs, en apportant un gain de temps et une facilité d’utilisation accrue. Nous allons voir quelques-uns de ces points forts.
Environnements de développement commun et facilement reproductibles
Docker permet de créer des environnements identiques que ça soit sur sa machine locale, sur un serveur de test ou en production. Le Dockerfile permet à partir d’un seul fichier de définir toutes les dépendances nécessaires à une application.
Moins de conflits
Comme chaque conteneur fonctionne de manière isolée, il n’y a pas d’interférences entre les différentes librairies ou framework de l’application.
Rapidité
Les conteneurs partagent le noyau de la machine hôte, ce qui accélère leur démarrage et demande moins de ressources. Dans la même logique, la création, la mise à l’échelle et l’arrêt des conteneurs se fait très rapidement.
Intégration et développement continu
L’automatisation, la construction, les tests et déploiements se font de manière cohérente.
Adapté aux architectures microservices
Utiliser des microservices pour son application n’est pas une obligation, mais Docker favorise grandement l’adoption de cette architecture en décomposant son application en petits conteneurs interconnectés. Des outils d’orchestration de conteneurs comme Docker Swarm ou Kubernetes permettent ensuite de faire évoluer l’application en fonction de ses besoins.
À vous de jouer !
Docker a énormément contribué à populariser la conteneurisation, avec une solution puissante pour isoler, tester et déployer des applications. Il continue aujourd’hui à faire évoluer le développement logiciel et inspire largement d’autres solutions de conteneurisation comme par exemple Podman.