Le mot conteneur fait référence à une technologie de virtualisation légère disponible sur les noyaux Linux modernes, cette technologie est très similaire aux prisons FreeBSD.
Un noyau Linux plus ancien, sans conteneur, est capable d'exécuter des processus simultanément. Certains attributs du système sont privés à traiter, comme l'environnement de processus ou la mémoire de processus: seuls le processus possédant ces attributs et le système d'exploitation lui-même peuvent accéder à ces données. (Il y a beaucoup d'échappatoires, comme certaines implémentations ps , mais c'est essentiellement vrai!) Certains autres attributs sont partagés entre les processus, comme le système de fichiers et les interfaces réseau par exemple.
Un noyau Linux moderne, capable de contenir des conteneurs, est capable de gérer plus d'attributs du système en tant que données privées associées à un processus ou à un groupe de processus. Le contexte résultant est un conteneur et au lieu d'exécuter un programme dans les «conteneurs initiaux» en utilisant le système de fichiers et les interfaces réseau initialisées par le système d'exploitation, il est possible d'exécuter des processus dans d'autres conteneurs, afin qu'ils voient un système de fichiers différent et un liste différente des interfaces réseau. Par conséquent, deux processus s'exécutant dans des conteneurs distincts partagent uniquement le noyau. Vous connaissez peut-être la commande chroot qui peut exécuter un processus dans une hiérarchie de fichiers distincte, les conteneurs poussent l'idée un peu plus loin.
Bien sûr, ce n'est qu'une explication très grossière, mais j'espère que cela aidera à clarifier l'idée de ce que sont les conteneurs. Maintenant, à quoi servent-ils?
Une interface populaire pour les capacités de conteneur des noyaux Linux est implémentée par docker, un utilitaire de ligne de commande qui peut être utilisé pour produire des artefacts représentant des systèmes de fichiers ( images de docker ) et exécuter des processus dans des conteneurs où ces systèmes de fichiers sont accessibles. Cette suite logicielle est également capable de créer des systèmes de réseautage virtuel ad hoc pour permettre à plusieurs conteneurs de communiquer sur un réseau privé.
Les technologies basées sur des conteneurs sont pratiques pour:
- Décrire les déploiements complexes évolutifs .
- Fournissez aux développeurs d'applications un environnement très similaire à l'environnement de production.
- Implémentez un modèle de serveur immuable, car les artefacts logiciels décrivent généralement un système d'exploitation complet, pas seulement un package d'application.
(Comme vous semblez familier avec d'autres technologies de virtualisation comme Virtual Box, vous remarquerez peut-être que ces technologies peuvent également répondre aux trois points ci-dessus. De nos jours, il existe un éventail assez restreint de technologies de virtualisation, et nous pouvons comparer la question de leur popularité dans certains contextes avec la popularité des langages informatiques: cela dépend probablement des mérites techniques de chaque solution individuelle, mais aussi de beaucoup de facteurs que je qualifierai de «chance».)