VM - LXC - Docker
Voici ma vision simplifiée et personnelle des trois :
-
VM - isolement de tout l'écosystème
-
LXC - applications partageant des tranches du même noyau
-
Docker - Offres groupées d'applications cloisonnées
VM - Si je veux virtualiser quelque chose et que je veux qu'un contrôle complet du logiciel, du réseau, etc., et que son noyau soit protégé des autres processus, j'utilise une VM. C'est la seule option que je connaisse lorsqu'il s'agit d'applications Windows uniquement.
LXC - Je peux tout contrôler sauf le noyau. Même s'il existe des partitions entre les conteneurs LXC, tous les conteneurs LXC partagent le même noyau. Cependant, j'ai l'impression d'avoir plus de contrôle de lecture/écriture à l'intérieur du conteneur, similaire à une VM, mais en utilisant beaucoup moins de ressources, similaire à Docker.
Lorsque je configure une application autonome sous Linux, j'essaie généralement d'abord un conteneur LXC.
Docker - Si je veux des piles d'applications éphémères, mais groupées/portables, Docker est un excellent choix pour cela. Je peux créer un "ensemble" complet d'applications en utilisant un simple script YAML ou quelque chose comme ça. Idéal pour configurer des environnements de développement très rapidement. Permet d'éviter cette situation "Cela a fonctionné sur ma machine".
LXC Avantages :
-
LXC peut facilement s'exécuter en tant que non-root ou root
-
LXC essaie de se rapprocher le plus possible d'une VM avec le moins de surcharge possible (j'ai donc plus l'impression de me connecter à une seule VM supplémentaire)
-
Vous avez le contrôle complet d'un système d'exploitation Linux, de systemd aux utilisateurs, en passant par la mise en réseau, 95 % de ce que vous attendez d'avoir lorsque vous travaillez avec un système Linux nu ou une machine virtuelle Linux.
-
Utilise CGroupsV2 (similaire à CHroot) pour partitionner le noyau entre les conteneurs système.
-
Je peux exécuter Fedora, Debian, Suse ou toute autre distribution Linux presque comme si elle était entièrement installée sur mon système. Applications installées, scripts, bibliothèques, compilation d'éléments.
-
Des instantanés peuvent être pris du conteneur LXC et Proxmox permet un retour à un état précédent
-
(Ceci n'est que mon opinion) J'estime avoir plus de liberté pour configurer les applications installées comme je le souhaite dans un conteneur système LXC. Je souhaite désinstaller une bibliothèque particulière, je peux le faire facilement, puis revenir en arrière si je me trompe.
Désavantages:
-
Les autorisations pour les utilisateurs et les ressources nécessitent un certain apprentissage pour bien les utiliser pleinement
-
L'adoption n'est pas répandue dans le domaine de l'auto-hébergement car Docker est plus populaire
-
Faire fonctionner les mêmes applications côte à côte est plus difficile car il s'agit d'un système entier (comme essayer d'installer deux versions différentes de Firefox sur un système. C'est faisable, mais problématique)
-
Je dois me rappeler que je gère désormais un système entier, et cela inclut les mises à jour du système d'exploitation dans le conteneur, ce qui peut casser des choses.
DOCKER/PODMAN
Avantages :
-
Utilise un moteur middleware/gestionnaire pour communiquer les appels d'application à l'hôte et fonctionne avec des ensembles d'applications packagés et leurs dépendances ensemble pour s'exécuter sur le même hôte.
-
Permet à différents ensembles des mêmes piles d'applications de s'exécuter côte à côte avec elles potentiellement sans interférer les unes avec les autres (par exemple, exécuter PHP7 et une ancienne version de MYSQL dans un conteneur Docker et exécuter la dernière version de PHP8 et un version plus récente de MYSQL dans un autre conteneur et l'hôte n'est pas affecté)
-
La configuration d'un environnement de développement complet d'outils (base de données, bibliothèques et autres applications associées) peut se produire en quelques minutes avec un fichier YAML correctement configuré.
-
Toutes les bibliothèques et applications sont préinstallées, il n'est donc souvent pas nécessaire d'installer de logiciel supplémentaire
Désavantages:
-
Les modifications apportées au logiciel à l'intérieur du conteneur signifient que l'ensemble du conteneur doit être reconstruit et redistribué.
-
Il est difficile de vérifier ce qui s'exécute à l'intérieur du conteneur, car vous n'avez pas un accès à 100 % à ce qui s'exécute dans le conteneur, mais uniquement aux variables que le moteur Docker ou le créateur du conteneur permet d'utiliser.
-
De nombreux conteneurs distribués doivent s'exécuter en tant que root sur le système hôte, ce qui pose problème pour de nombreuses raisons.