La virtualisation au niveau du système d'exploitation est un paradigme de système d'exploitation (SE) dans lequel le noyau permet l'existence de plusieurs instances d'espace utilisateur isolées, appelées le plus souvent conteneurs (LXC, Solaris containers, Docker, Podman), mais également zones (Solaris containeurs), serveurs privés virtuels (OpenVZ), partitions, environnements virtuels, noyaux virtuels (DragonFly BSD) ou encore prisons (FreeBSD jail ou chroot jail). De telles instances peuvent ressembler à de vrais ordinateurs du point de vue des programmes qui y sont exécutés. Un programme informatique exécuté sur un système d'exploitation ordinaire peut voir toutes les ressources (périphériques connectés, fichiers et dossiers, partages réseau, puissance du processeur, capacités matérielles quantifiables) de cet ordinateur. Cependant, les programmes exécutés à l'intérieur d'un conteneur ne peuvent voir que le contenu du conteneur et les périphériques affectés au conteneur.
Sur les systèmes d'exploitation de type Unix, cette fonctionnalité peut être considérée comme une implémentation avancée du mécanisme chroot standard, qui modifie le dossier racine apparent pour le processus en cours d'exécution et ses enfants. En plus des mécanismes d'isolation, le noyau fournit souvent des fonctionnalités de gestion des ressources pour limiter l'impact des activités d'un conteneur sur d'autres conteneurs. Les conteneurs Linux sont tous basés sur les mécanismes de virtualisation, d'isolation et de gestion des ressources fournis par le noyau Linux, notamment les espaces de noms Linux et les cgroups.
Le terme conteneur, bien qu'il se réfère le plus souvent aux systèmes de virtualisation au niveau du système d'exploitation, est parfois utilisé de manière ambiguë pour désigner des environnements de machines virtuelles plus complets fonctionnant à des degrés divers de concert avec le système d'exploitation hôte, par exemple les conteneurs Hyper-V de Microsoft.
Opération Sur les systèmes d'exploitation ordinaires pour ordinateurs personnels, un programme informatique peut voir (même s'il ne peut pas y accéder) toutes les ressources du système. Ce qui inclut : Les capacités matérielles pouvant être utilisées, telles que le processeur et la connexion réseau Les données pouvant être lues ou écrites, telles que des fichiers, des dossiers et des partages réseau Les périphériques connectés avec lesquels il peut interagir, tels qu'une webcam, une imprimante, un scanner ou un fax
Le système d'exploitation peut être en mesure d'autoriser ou de refuser l'accès à ces ressources en fonction du programme qui les demande et du compte d'utilisateur dans le contexte duquel il s'exécute. Le système d'exploitation peut également masquer ces ressources, de sorte que lorsque le programme informatique les énumère, elles n'apparaissent pas dans les résultats de l'énumération. Néanmoins, le programme informatique a interagi avec ces ressources par le biais du système d'exploitation.
Avec la conteneurisation, il est possible d'exécuter des programmes dans des conteneurs, auxquels seule une fraction de ces ressources sont allouées. Un programme qui s'attend à voir l'ensemble de l'ordinateur, une fois exécuté à l'intérieur d'un conteneur, ne peut voir que les ressources allouées et, de son point de vue, ce sont les seules disponibles. Plusieurs conteneurs peuvent être créés sur chaque système d'exploitation, à chacun desquels un sous-ensemble des ressources de l'ordinateur est alloué. Chaque conteneur peut contenir n'importe quel nombre de programmes informatiques. Ces programmes peuvent s'exécuter simultanément ou séparément, et peuvent même interagir les uns avec les autres.
La conteneurisation présente des similitudes avec la virtualisation des applications : dans cette dernière, un seul programme informatique est placé dans un conteneur isolé et l'isolation ne s'applique qu'au système de fichiers.
Usages La conteneurisation est couramment utilisée dans les environnements d'hébergement virtuel, où elle est utile pour allouer en toute sécurité des ressources matérielles finies entre un grand nombre d'utilisateurs qui ne peuvent pas nécessairement se faire confiance. Les administrateurs système peuvent également l'utiliser pour consolider le matériel du serveur en déplaçant les services sur des hôtes distincts dans des conteneurs sur le même serveur.
D'autres scénarios typiques incluent la séparation de plusieurs programmes pour séparer les conteneurs pour une sécurité améliorée, l'indépendance du matériel et des fonctionnalités de gestion des ressources supplémentaires. La sécurité améliorée fournie par l'utilisation d'un mécanisme chroot est cependant loin d'être à toute épreuve. Les implémentations de virtualisation au niveau du système d'exploitation capables de migration dynamique peuvent également être utilisées pour l'équilibrage de charge dynamique des conteneurs entre les nœuds d'un cluster.
Meilleure utilisation des ressources La conteneurisation nécessite généralement moins de ressources que la virtualisation complète, car les programmes des partitions virtuelles au niveau du système d'exploitation utilisent l'interface d'appel système normale du système d'exploitation et n'ont pas besoin d'être soumis à une émulation ou d'être exécutés dans une machine virtuelle intermédiaire, comme c'est le cas cas avec la virtualisation complète (telle que VMware ESXi, QEMU ou Hyper-V) et la paravirtualisation (telle que Xen ou Linux en mode utilisateur). Cette forme de virtualisation ne nécessite pas non plus de support matériel pour des performances efficaces.
Souplesse La conteneurisation n'est pas aussi flexible que les autres approches de virtualisation car elle ne peut pas héberger un système d'exploitation invité différent de celui de l'hôte, ou un noyau invité différent. Par exemple, avec Linux, différentes distributions conviennent, mais d'autres systèmes d'exploitation tels que Windows ne peuvent pas être hébergés.
Solaris surmonte partiellement la limitation décrite ci-dessus avec sa fonctionnalité branded zones, qui permet d'exécuter un environnement dans un conteneur qui émule une ancienne version de Solaris 8 ou 9 dans un hôte Solaris 10. Les branded zones Linux (appelées zones de marque "lx") sont également disponibles sur les systèmes Solaris basés sur x86, fournissant un espace utilisateur Linux complet et une prise en charge de l'exécution des applications Linux ; de plus, Solaris fournit les utilitaires nécessaires à l'installation de Red Hat Enterprise Linux 3.x ou CentOS Distributions Linux 3.x à l'intérieur des zones "lx". Cependant, en 2010, les branded zones Linux ont été supprimées de Solaris; en 2014, ils ont été réintroduits dans Illumos, qui est le fork open source de Solaris, prenant en charge les noyaux Linux 32 bits.
Stockage Certaines implémentations fournissent des mécanismes de copie sur écriture au niveau des fichiers. (Le plus souvent, un système de fichiers standard est partagé entre les partitions, et les partitions qui modifient les fichiers créent automatiquement leurs propres copies.) Ceci est plus facile à sauvegarder, plus économe en espace et plus simple à mettre en cache que les schémas de copie sur écriture au niveau des blocs courants lors de la virtualisation de système entier. La virtualisation de système complet, cependant, peut fonctionner avec des systèmes de fichiers non natifs, et créer et restaurer des instantanés de l'état du système en entier.
Implémentations NomSystème d'exploitationLicenceDéveloppé activement depuis/entreFonctionnalitéesIsolation du système de fichierCopie à l'écritureQuotas de disqueLimitation du taux d'E/SLimitations de mémoireQuotas CPUIsolation réseauVirtualisations imbriquéesContrôle de partition et migration à chaudIsolation des droits rootchrootLa plupart des systèmes de type UnixVariable1982 DockerLinux, FreeBSD, Windows x64 (Pro, Enterprise et Education) macOSLicence Apache 2.02013 Linux-VServer(security context)Linux, Windows Server 2016GNU GPLv22001 ? lmctfyLinux Licence Apache 2.020132015 ? LXCLinuxGNU GPLv22008 SingularityLinuxLicence BSD2015 OpenVZLinuxGNU GPLv22005 VirtuozzoLinux, Windows Propriétaire, avec une période d'essai gratuite2000 Solaris Containers (Zones)illumos (OpenSolaris),Solaris,Propriétaire2004 (ZFS) Network Virtualization and Resource Control (Crossbow) FAQ FreeBSD jailFreeBSD, DragonFly BSDLicence BSD2000 (ZFS) vkernelDragonFly BSDLicence BSD2006 ? ? ? sysjailOpenBSD, NetBSDLicence BSD2006–2009 WPARsAIXPropriétaire2007 iCore Virtual AccountsWindows XPPropriétaire2008 ? SandboxieWindows GNU GPLv32004 systemd-nspawnLinux GNU GPLv2.1+2010 ?? TurboWindowsPropriétaire2012 rktLinux Licence Apache 2.02014–2018 ?? Les conteneurs Linux non répertoriés ci-dessus incluent :
LXD, un wrapper alternatif autour de LXC développé par Canonical PodmanRootless containers with Podman and fuse-overlayfs, CERN Workshop, 2019-06-04, un remplaçant de Docker Charliecloud, un ensemble d'outils de conteneur utilisés sur les systèmes HPC La plateforme MicroVM de conteneurs Kata Bottlerocket, un système d'exploitation open source basé sur Linux qui est spécialement conçu par Amazon Web Services pour exécuter des conteneurs sur des machines virtuelles ou des hôtes bare metal
Articles connexes Orchestration de conteneurs groupes de contrôle Conteneur Linux Hyperviseur Créateurs d'applications portables Initiative de conteneurs ouverts Informatique sans serveur Le gestionnaire de paquets snap Hyperviseur de stockage Serveur privé virtuel (VPS)
Références
Liens externes
Une courte introduction à trois techniques de virtualisation différentes Virtualisation et conteneurisation de l'infrastructure applicative : une comparaison, , par Mathijs Jeroen Scheepers Conteneurs et données persistantes, LWN.net, , par Josh Berkus
Catégorie:Linux Catégorie:Sécurité du système d'exploitation Catégorie:Pages avec des traductions non relues