Chroot est l'environnement le plus léger qui pourrait vous convenir. Il vous permet d'installer une autre distribution (ou une autre installation de la même distribution), avec les mêmes utilisateurs, avec la même configuration réseau, etc. Chroot ne fournit qu'une isolation grossière au niveau du système de fichiers. Parcourir ce site pour chroot peut vous aider, si vous n'êtes toujours pas sûr de ce que chroot peut et ne peut pas faire.
Si vous recherchez la prochaine étape, LXC est maintenant inclus dans la ligne principale du noyau. Un invité LXC (appelé conteneur) a son propre système de fichiers, processus et espace réseau. La racine dans le conteneur est également la racine sur l'hôte ; LXC protège contre de nombreuses actions accidentelles d'une racine invitée, mais pas contre une racine invitée malveillante (il s'agit d'une fonctionnalité prévue, surveillez cet espace).
D'autres technologies quelque peu similaires à LXC sont VServer et OpenVZ. Une fonctionnalité importante fournie par OpenVZ, mais pas par VServer ou LXC, est les points de contrôle :vous pouvez prendre un instantané d'une machine en cours d'exécution et le restaurer ultérieurement. Un autre candidat est Linux en mode utilisateur, qui exécute un système Linux complet à l'intérieur d'un processus qui s'exécute en tant qu'utilisateur ordinaire dans l'hôte.
Pour expérimenter une autre installation de système d'exploitation, chroot convient. Si vous souhaitez exécuter des services dans l'installation expérimentale ou jouer avec la mise en réseau, optez pour LXC. Si vous voulez des instantanés, utilisez OpenVZ. Si vous voulez un noyau complètement séparé mais avec peu de surcharge de mémoire, utilisez Linux en mode utilisateur. Si vous voulez des instantanés et un noyau séparé, utilisez VirtualBox.
Docker facilite l'utilisation de LXC :
Caractéristiques notables
Isolation du système de fichiers :chaque conteneur de processus s'exécute dans un système de fichiers racine complètement séparé.
Isolement des ressources :les ressources système telles que le processeur et la mémoire peuvent être allouées différemment à chaque conteneur de processus, à l'aide de cgroups.
Isolement du réseau :chaque conteneur de processus s'exécute dans son propre espace de noms réseau, avec une interface virtuelle et une adresse IP qui lui sont propres.
Copie sur écriture :les systèmes de fichiers racine sont créés à l'aide de la copie sur écriture, ce qui rend le déploiement extrêmement rapide, économe en mémoire et en disque.
Journalisation :les flux standard (stdout/stderr/stdin) de chaque conteneur de processus sont collectés et enregistrés pour une récupération en temps réel ou par lots.
Gestion du changement :les modifications apportées au système de fichiers d'un conteneur peuvent être validées dans une nouvelle image et réutilisées pour créer davantage de conteneurs. Aucun modèle ou configuration manuelle requis.
Shell interactif :docker peut allouer un pseudo-tty et l'attacher à l'entrée standard de n'importe quel conteneur, par exemple pour exécuter un shell interactif jetable.
Sous le capot
Sous le capot, Docker est construit sur les composants suivants :
Les capacités de groupe de contrôle et d'espacement de noms du noyau Linux
AUFS, un puissant système de fichiers d'union avec des capacités de copie sur écriture
Le langage de programmation Go
lxc, un ensemble de scripts pratiques pour simplifier la création de conteneurs Linux.
Examinez les conteneurs OpenVZ ou Linux, qui implémentent tous deux un environnement pseudo-virtualisé léger avec des zones utilisateur uniques sur un noyau commun.
OpenVZ est plus mature à ce stade.