Les conteneurs sont des composants d’application légers et exécutables qui regroupent le code source de l’application et toutes les bibliothèques et dépendances du système d’exploitation nécessaires à l’exécution du code dans n’importe quel environnement.
Les conteneurs tirent parti d'une forme de virtualisation des systèmes d'exploitation (OS) qui permet à plusieurs applications de partager une seule instance d'un système d'exploitation en isolant les processus et en contrôlant les ressources liées au processeur, à la mémoire et au disque auxquelles ces processus peuvent avoir accès. Étant donné qu'ils sont plus petits, plus économes en ressources et plus faciles à transporter que les machines virtuelles (VM), les conteneurs se sont imposés de facto comme les unités de calcul des applications cloud natives modernes.
Dans une étude récente menée par IBM, les utilisateurs ont signalé plusieurs avantages techniques et commerciaux spécifiques résultant de leur adoption de conteneurs et de technologies connexes.
Conteneurs, machines virtuelles et infrastructure classique
Il peut être plus facile ou plus utile de considérer les conteneurs comme le dernier point du continuum de l'automatisation et de l'abstraction des infrastructures informatiques.
Dans l'infrastructure classique, les applications s'exécutent sur un serveur physique et utilisent toutes les ressources dont elles disposent. Vous avez donc le choix entre faire tourner plusieurs applications sur un même serveur en espérant que l'une d'entre elles ne monopolise pas les ressources au détriment des autres ou dédier un serveur à chaque application, ce qui implique une perte de ressources et n'est pas évolutif.
Les machines virtuelles (VM) sont des serveurs abstraits du matériel informatique réel, ce qui vous permet d'exécuter plusieurs VM sur un serveur physique ou une seule VM sur plusieurs serveurs physiques. Chaque VM exécute sa propre instance de système d'exploitation et vous pouvez isoler chaque application dans sa propre VM, ce qui réduit le risque que les applications exécutés sur le même matériel physique sous-jacent aient un impact les unes sur les autres. Les VM permettent une meilleure utilisation des ressources et sont beaucoup plus efficaces et rentables que l'infrastructure classique. De plus, elles sont consommables : lorsque vous n'avez plus besoin d'exécuter l'application, vous supprimez la VM.
Pour plus d'informations sur les machines virtuelles, voir « Qu’est-ce que des machines virtuelles ?»
Les conteneurs portent cette abstraction à un niveau supérieur : outre le partage du matériel virtualisé sous-jacent, ils partagent également un noyau de système d'exploitation virtualisé sous-jacent. Les conteneurs offrent les mêmes possibilités d'isolation, d'évolutivité et de cession que les machines virtuelles, mais comme ils ne transportent pas la charge utile de leur propre instance de système d'exploitation, ils sont plus légers (c'est-à-dire qu'ils occupent moins d'espace) que les machines virtuelles. Ils sont plus efficaces en termes de ressources : ils vous permettent d'exécuter plus d'applications sur moins de machines (virtuelles et physiques), en utilisant moins d'instances de système d'exploitation. Les conteneurs sont plus facilement transportables d'un bureau à l'autre, d'un centre de données à l'autre et d'un environnement cloud à l'autre. Et ils conviennent parfaitement aux pratiques de développement Agile et DevOps.
« Qu'est ce que les conteneurs ? » fournit une explication complète quant aux conteneurs et à la conteneurisation. Et le billet de blog « Conteneurs vs. VM : quelle est la différence ? » offre un aperçu détaillé des différences entre les deux.
Qu’est-ce que Docker ?
Docker est l'outil le plus populaire pour créer et exécuter des conteneurs Linux®. Alors que les premières formes de conteneurs ont été introduites il y a plusieurs décennies (avec des technologies telles que FreeBSD Jails et AIX Workload Partitions), les conteneurs se sont démocratisés en 2013 lorsque Docker les a mis à la portée du plus grand nombre avec une nouvelle implémentation intuitive pour les développeurs et pour le cloud.
Docker était à l'origine un projet open source, mais aujourd'hui il désigne également la société Docker Inc. qui produit Docker, un outil commercial de conteneurisation qui s'appuie sur le projet open source (et restitue ses améliorations à la communauté open source).
Docker a été conçu sur la base de la technologie classique des conteneurs Linux (LXC), mais il permet une virtualisation plus granulaire des processus du noyau Linux et ajoute des fonctionnalités qui facilitent la création, le déploiement, la gestion et la sécurisation des conteneurs pour les développeurs.
Bien qu'il existe aujourd'hui d'autres plateformes de conteneurs (telles que Open Container Initiative (OCI), CoreOS et Canonical (Ubuntu) LXD), Docker est si largement préféré qu'il est pratiquement synonyme de conteneurs et est parfois considéré à tort comme un concurrent de technologies connexes telles que Kubernetes (voir la vidéo « Kubernetes vs, Docker : pourquoi choisir ? » ci-dessous).