LXC
| Fiche express | |
|---|---|
| Type | Virtualisation légère par conteneurs système (isolation au niveau du noyau Linux) |
| Composants | LXC (bibliothèque liblxc + outils bas niveau) · LXD (démon de gestion, API REST, CLI lxc)
|
| Mécanismes noyau | Namespaces (isolation) + Cgroups (limitation de ressources) |
| Diffère de | Docker (conteneurs applicatifs mono-processus) — voir section dédiée |
| Voir aussi | KVM · Namespaces · Docker · Proxmox |
LXC (LinuX Containers) est un ensemble d'outils et d'une bibliothèque (liblxc) permettant de créer des conteneurs système sur Linux : des environnements isolés qui font tourner un système complet (init, plusieurs processus, gestionnaire de paquets) en partageant directement le noyau de la machine hôte, sans émulation matérielle. L'isolation repose sur deux mécanismes noyau combinés : les Namespaces (qui cloisonnent PID, réseau, points de montage, hostname, IPC, utilisateurs) et les Cgroups (qui limitent et comptabilisent CPU, mémoire, I/O par groupe de processus).
LXD est une couche de gestion développée par-dessus LXC : un démon exposant une API REST, un client en ligne de commande (lxc), la gestion d'images, de pools de stockage (dir, ZFS, Btrfs, LVM, Ceph), de réseaux, de profils et de projets, ainsi que le clustering multi-hôtes. Depuis LXD 4, le même démon peut également piloter des machines virtuelles complètes (via QEMU), ce qui en fait une plateforme de gestion unifiée conteneurs + VM plutôt qu'un simple habillage de LXC.
Piège de nommage courant : les commandes historiques de LXC sont préfixées lxc- (lxc-create, lxc-start, lxc-attach, lxc-ls), tandis que le client de LXD s'appelle simplement lxc (sans tiret) — deux outils distincts, à ne pas confondre malgré la ressemblance des noms.
Utilisation courante (LXD)
# Lister les images disponibles depuis le dépôt distant
lxc image list images: debian
# Créer et démarrer un conteneur à partir d'une image distante
lxc launch images:debian/12 mon-conteneur
# Lister les conteneurs et VM gérés localement
lxc list
# Ouvrir un shell dans le conteneur
lxc exec mon-conteneur -- bash
# Consulter/modifier la configuration (limites CPU, mémoire...)
lxc config show mon-conteneur
lxc config set mon-conteneur limits.cpu 2
lxc config set mon-conteneur limits.memory 2GB
# Gestion du stockage et du réseau
lxc storage list
lxc network list
# Arrêter / supprimer
lxc stop mon-conteneur
lxc delete mon-conteneur
Différence avec Docker
LXC/LXD et Docker reposent sur les mêmes primitives noyau (Namespaces, Cgroups, overlayfs) mais répondent à une philosophie différente :
| LXC/LXD (conteneurs système) | Docker (conteneurs applicatifs) | |
|---|---|---|
| Contenu du conteneur | Un système complet : init (systemd ou équivalent), plusieurs services, gestionnaire de paquets, état persistant — s'administre comme une VM légère (SSH, mises à jour...) | Idéalement un seul processus/service par conteneur, image immuable construite à partir d'un Dockerfile/format OCI |
| Cycle de vie | Conteneur "pet" : on le maintient dans la durée, on le met à jour en place | Conteneur "cattle" : on le détruit et on le recrée à partir d'une nouvelle image plutôt que de le mettre à jour |
| Écosystème | Images de distributions Linux classiques, orienté infrastructure/hébergement de VM | Registry d'images applicatives (Docker Hub), orienté CI/CD et orchestration (Kubernetes) |
| Cas d'usage typique | Remplacer une VM légère quand la virtualisation matérielle complète n'est pas nécessaire | Packager et déployer une application avec ses dépendances, à grande échelle |
En résumé : LXC/LXD rapproche le conteneur d'une VM (système complet, partage du noyau hôte en moins), là où Docker package une application isolée destinée à être orchestrée en masse. Les deux s'opposent également à une virtualisation complète comme KVM : pas d'émulation matérielle ni d'hyperviseur, donc démarrage quasi instantané et overhead très faible, mais isolation moins forte qu'une VM puisque le noyau est partagé avec l'hôte (une faille noyau impacte potentiellement tous les conteneurs).
Note historique : LXD et Incus
En 2023, à la suite d'un désaccord sur la gouvernance du projet entre Canonical (éditeur d'Ubuntu, qui maintenait LXD) et l'organisation Linux Containers (qui héberge historiquement LXC), une partie de l'équipe à l'origine de LXD a créé un projet dérivé (fork) nommé Incus, repris sous l'ombrelle Linux Containers (à vérifier pour le détail exact de l'historique et l'état actuel des deux projets, la situation ayant continué d'évoluer). Les deux projets restent très proches en architecture et en usage.
Voir aussi
- Namespaces — isolation noyau utilisée par LXC comme par Docker
- Cgroups — limitation de ressources, complémentaire aux namespaces
- Docker — conteneurs applicatifs, philosophie différente de LXC/LXD
- KVM — virtualisation complète avec émulation matérielle, à comparer à l'isolation noyau de LXC
- Proxmox — intègre LXC comme option de conteneurs système aux côtés de KVM