Aller au contenu
Conteneurs & Orchestration medium

Le moteur de conteneurs LXC

11 min de lecture

logo LXC

LXC, ou LinuX Containers, est une technologie de virtualisation légère qui permet d'exécuter plusieurs environnements d'exploitation Linux isolés (conteneurs) sur une seule machine hôte Linux. Contrairement aux machines virtuelles traditionnelles, les conteneurs LXC partagent le même noyau du système d'exploitation de l'hôte, ce qui les rend plus efficaces en termes de ressources et plus rapides à démarrer.

LXC occupe une position intermédiaire entre la machine virtuelle et le conteneur applicatif façon Docker : il démarre un système complet avec son init, ses services et son gestionnaire de paquets, mais sans hyperviseur ni noyau invité. Les trois points ci-dessous détaillent ce que ce compromis apporte au quotidien. Gardez en tête sa contrepartie : comme le noyau est celui de l'hôte, LXC ne permet ni de faire tourner un autre système d'exploitation, ni d'obtenir l'isolation matérielle d'une VM.

  1. Efficacité des ressources : En partageant le noyau de l'hôte, les conteneurs LXC utilisent moins de ressources matérielles par rapport aux machines virtuelles, ce qui permet de maximiser l'utilisation du matériel.
  2. Démarrage rapide : Les conteneurs LXC se lancent en quelques secondes, ce qui les rend idéaux pour le déploiement rapide d'applications.
  3. Isolation légère : Bien que les conteneurs partagent le noyau, ils restent isolés les uns des autres, garantissant une sécurité et une stabilité adéquates.

Toutes les grandes distributions packagent LXC, mais le nom des paquets, la présence des modèles de conteneurs et la version livrée diffèrent d'une famille à l'autre. Les commandes ci-dessous couvrent les cas les plus courants. Quelle que soit la distribution, l'installation du paquet ne suffit pas à garantir que LXC fonctionnera : c'est le noyau de l'hôte qui doit exposer les namespaces et les cgroups nécessaires, et lxc-checkconfig sert précisément à le vérifier.

Avant de commencer l'installation de LXC, assurez-vous de disposer d'un système Linux compatible. LXC est largement pris en charge sur diverses distributions Linux, notamment Ubuntu, Debian, CentOS et plus encore.

La méthode d'installation de LXC peut varier légèrement en fonction de la distribution Linux que vous utilisez. Voici des commandes d'installation courantes pour quelques distributions populaires :

Le paquet lxc installe les commandes lxc-* ; le paquet lxc-templates ajoute les modèles de création historiques, à ne pas confondre avec le template download employé plus bas pour créer le conteneur web1.

Fenêtre de terminal
sudo apt update
sudo apt install lxc lxc-templates

LXC n'est pas fourni par les dépôts de base : le paquet vient d'EPEL, d'où l'activation préalable de epel-release.

Fenêtre de terminal
sudo yum install epel-release
sudo yum install lxc

Arch livre LXC dans ses dépôts officiels et suit le rythme de la rolling release : attendez-vous à une version nettement plus récente que sur une distribution stable, avec les changements de comportement que cela implique.

Fenêtre de terminal
sudo pacman -S lxc

Fedora fournit également LXC dans ses dépôts officiels, sans dépôt tiers à activer.

Fenêtre de terminal
sudo dnf install lxc

Après avoir installé LXC, vous pouvez vérifier si tout est bien configuré avec la commande suivante :

Fenêtre de terminal
lxc-checkconfig
LXC version 5.0.0~git2209-g5a7b9ce67
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-5.15.0-88-generic
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
--- Control groups ---
Cgroups: enabled
Cgroup namespace: enabled
Cgroup v1 mount points:
Cgroup v2 mount points:
/sys/fs/cgroup
Cgroup v1 systemd controller: missing
Cgroup v1 freezer controller: missing
Cgroup ns_cgroup: required
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled
--- Misc ---
Veth pair device: enabled, loaded
Macvlan: enabled, not loaded
Vlan: enabled, not loaded
Bridges: enabled, loaded
Advanced netfilter: enabled, loaded
CONFIG_IP_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled, loaded
CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled, not loaded
FUSE (for use with lxcfs): enabled, not loaded
--- Checkpoint/Restore ---
checkpoint restore: enabled
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities:
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

Lorsque LXC est installé, il peut être utile de configurer quelques paramètres initiaux. Vous pouvez définir des répertoires de stockage par défaut, des réseaux et d'autres options de configuration selon vos besoins spécifiques.

Fenêtre de terminal
mkdir -p ~/.config/lxc
echo "lxc.include = /etc/lxc/default.conf" > ~/.config/lxc/default.conf
echo "lxc.idmap = u 0 100000 65536" >> ~/.config/lxc/default.conf
echo "lxc.idmap = g 0 100000 65536" >> ~/.config/lxc/default.conf
echo "lxc.net.0.type = veth" >> ~/.config/lxc/default.conf
echo "lxc.net.0.link = lxcbr0" >> ~/.config/lxc/default.conf
echo "$USER veth lxcbr0 2" | sudo tee -a /etc/lxc/lxc-usernet

LXC ne s'utilise pas via une CLI unique à sous-commandes : chaque action a sa propre commande lxc-*, et toutes désignent le conteneur avec l'option -n. Les manipulations ci-dessous déroulent un cycle de vie complet sur un conteneur nommé web1 : création, démarrage, inspection, accès à un shell, puis destruction. En mode non privilégié (celui configuré plus haut avec lxc.idmap), ces commandes s'exécutent avec votre compte utilisateur, sans sudo, et le conteneur vit dans ~/.local/share/lxc/.

Dans un premier temps, il faut télécharger une image. La commande lxc-create avec le template download interroge le miroir linuxcontainers.org et propose une liste interactive (distribution, version, architecture) :

Fenêtre de terminal
lxc-create -t download -n web1

Pour voir la liste des conteneurs LXC sur votre système :

Fenêtre de terminal
lxc-ls -f
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
web1 STOPPED 0 - - - true

Le conteneur démarre en arrière-plan et la main vous est rendue immédiatement ; ajoutez -F si vous voulez rester au premier plan et suivre la séquence de boot sur votre terminal.

Fenêtre de terminal
lxc-start -n web1

Vérification, le conteneur passe à l'état RUNNING et reçoit une IP DHCP sur le bridge lxcbr0 :

Fenêtre de terminal
lxc-ls -f
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
web1 RUNNING 0 - 10.0.3.166 - true

lxc-stop demande d'abord un arrêt propre au système du conteneur et attend qu'il se termine ; l'option -k coupe les processus sans attendre, au risque de perdre les écritures en cours.

Fenêtre de terminal
lxc-stop -n web1

Là où lxc-ls liste tous les conteneurs, lxc-info détaille un seul d'entre eux : le PID de son processus init côté hôte, son adresse IP, le nom de l'interface veth créée sur l'hôte et les compteurs de trafic réseau.

Fenêtre de terminal
lxc-info -n web1
Name: web1
State: RUNNING
PID: 114645
IP: 10.0.3.166
Link: veth1000_RH6L
TX bytes: 1.89 KiB
RX bytes: 2.91 KiB
Total bytes: 4.80 KiB

lxc-attach exécute une commande à l'intérieur des namespaces du conteneur, sans passer par SSH ni serveur à installer. Le -- sépare les options de lxc-attach de la commande à lancer : ici sh, car l'image téléchargée est une Alpine Linux qui n'embarque pas bash.

Fenêtre de terminal
lxc-attach -n web1 -- sh
/ # cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.18.4
PRETTY_NAME="Alpine Linux v3.18"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
exit

Pour supprimer un conteneur LXC (le conteneur doit être arrêté au préalable) :

Fenêtre de terminal
lxc-destroy -n web1

Les conteneurs LXC (Linux Containers) sont une solution puissante et polyvalente pour la virtualisation légère sous Linux. Ils offrent un moyen efficace de créer, gérer et isoler des environnements d'exécution Linux, ce qui les rend adaptés à une variété de cas d'utilisation en développement logiciel et en administration système.

Il est important de noter que, bien que les conteneurs LXC soient une solution puissante, leur utilisation nécessite une compréhension approfondie des concepts sous-jacents et une planification soignée pour garantir une utilisation efficace et sécurisée.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn