Depuis que Canonical a repris le contrôle exclusif du projet LXD en 2023, la communauté Linux Containers — qui en était l’initiatrice — a décidé de forker le projet sous le nom Incus. Maintenu par les développeurs originaux de LXD, Incus est aujourd’hui disponible directement dans les dépôts officiels de Debian stable et d’Ubuntu, sans dépendance à des PPA tiers. Sa dernière version stable est Incus 7.2 (juin 2026).
Incus est un gestionnaire unifié de conteneurs système (basés sur LXC) et de machines virtuelles (via QEMU/KVM), piloté par une API REST et une interface en ligne de commande cohérente. Il s’adresse aux administrateurs système qui souhaitent provisionner des environnements Linux isolés — du poste de développement au cluster de production — sans la complexité d’un orchestrateur comme Kubernetes.
Dans ce guide, nous allons installer et configurer Incus sur Debian 12 (Bookworm) ou Ubuntu 24.04 LTS, créer nos premiers conteneurs et machines virtuelles, gérer les ressources, les snapshots et les profils, et voir comment migrer depuis une installation LXD existante.
Pourquoi Incus plutôt que LXD ?
Le changement de gouvernance de LXD a entraîné plusieurs divergences importantes :
- Indépendance de Canonical : Incus est publié sous licence Apache 2.0, sans CLA (Contributor License Agreement). Les contributions restent propriété de leurs auteurs.
- Intégration dans les distributions : Debian 12 et Ubuntu 24.04 LTS packagèrent Incus dans leurs dépôts officiels, là où LXD n’est disponible que via Snap.
- Allègement de la commande : Incus remplace la commande
lxcparincus, ce qui évite toute confusion avec les outils LXC bas niveau. - API épurée : Plusieurs endpoints dépréciés de LXD ont été supprimés, rendant l’API plus cohérente.
Installation sur Debian 12 / Ubuntu 24.04
Incus est disponible directement depuis les dépôts officiels. Aucun PPA ni dépôt tiers n’est nécessaire.
Installation complète (conteneurs + VMs)
sudo apt update
sudo apt install incus
Le paquet incus installe le support complet : conteneurs système LXC et machines virtuelles QEMU. Pour un serveur sans hyperviseur KVM (conteneurs uniquement) :
sudo apt install incus-base
Ajouter votre utilisateur aux groupes Incus
Deux groupes sont disponibles selon le niveau d’accès souhaité :
# Accès standard (création de conteneurs, pas de configuration système)
sudo usermod -aG incus $USER
# Accès administrateur complet
sudo usermod -aG incus-admin $USER
# Appliquer sans déconnexion
newgrp incus-admin
Initialisation d’Incus
Avant de créer la moindre instance, il faut initialiser le démon Incus. La commande incus admin init pose une série de questions sur le réseau, le stockage et le clustering.
Initialisation interactive
sudo incus admin init
Pour un serveur autonome standard, répondez ainsi :
- Clustering :
no - Storage pool : choisissez
dir(simple) oubtrfs/zfssi disponible - Bridge réseau :
yes— créeincusbr0avec NAT - IPv6 :
nosi non utilisé
Initialisation automatique (non-interactive)
sudo incus admin init --minimal
Cette option applique une configuration par défaut minimale, idéale pour l’automatisation (scripts Ansible, CI/CD).
Vérifiez que le service est actif :
systemctl status incus
incus version
Gestion des instances
Lancer un conteneur
Incus télécharge les images depuis le serveur officiel images: (Linux Containers) ou ubuntu: (images Ubuntu officielles).
# Lancer un conteneur Debian 12
incus launch images:debian/12 mon-conteneur
# Lancer un conteneur Ubuntu 24.04
incus launch ubuntu:24.04 srv-ubuntu
# Lister les images disponibles pour Debian
incus image list images: debian
Lancer une machine virtuelle
L’ajout du flag --vm provisionne une VM complète via QEMU/KVM, avec le même workflow que les conteneurs :
incus launch images:debian/12 ma-vm --vm
# Vérifier le type d'instance
incus list
Interagir avec une instance
# Ouvrir un shell interactif
incus exec mon-conteneur -- bash
# Exécuter une commande sans shell interactif
incus exec mon-conteneur -- apt-get update
# Transférer des fichiers
incus file pull mon-conteneur/etc/hostname .
incus file push hostname mon-conteneur/etc/hostname
# Consulter les logs système
incus exec mon-conteneur -- journalctl -xe
Limiter les ressources CPU et mémoire
Les limites peuvent être appliquées au lancement ou sur une instance existante :
# Au lancement
incus launch images:debian/12 srv-limité
--config limits.cpu=2
--config limits.memory=512MiB
# Sur une instance existante
incus config set srv-limité limits.cpu=1
incus config set srv-limité limits.memory=256MiB
# Vérifier la configuration
incus config show srv-limité
Cycle de vie des instances
# Arrêter une instance
incus stop mon-conteneur
# Démarrer
incus start mon-conteneur
# Redémarrer
incus restart mon-conteneur
# Supprimer (instance arrêtée)
incus delete mon-conteneur
# Supprimer en forçant l'arrêt
incus delete mon-conteneur --force
Snapshots et restauration
Les snapshots permettent de capturer l’état d’une instance à un instant précis — avant une mise à jour critique par exemple.
# Créer un snapshot nommé
incus snapshot create mon-conteneur avant-upgrade
# Lister les snapshots d'une instance
incus info mon-conteneur
# Restaurer depuis un snapshot
incus snapshot restore mon-conteneur avant-upgrade
# Supprimer un snapshot
incus snapshot delete mon-conteneur avant-upgrade
Pour des snapshots planifiés automatiquement :
# Snapshot quotidien à 2h du matin, conserver 7 versions
incus config set mon-conteneur snapshots.schedule "0 2 * * *"
incus config set mon-conteneur snapshots.expiry 7d
Profils Incus
Les profils permettent de définir des configurations réutilisables (ressources, appareils, variables d’environnement) applicables à plusieurs instances. Un profil default est créé lors de l’initialisation.
# Lister les profils existants
incus profile list
# Créer un profil personnalisé
incus profile create production
# Éditer le profil
incus profile edit production
Exemple de profil YAML pour un serveur de production :
cat << 'EOF' | incus profile edit production
config:
limits.cpu: "4"
limits.memory: 2GiB
boot.autostart: "true"
description: Profil serveur de production
devices:
eth0:
name: eth0
network: incusbr0
type: nic
root:
path: /
pool: default
size: 20GiB
type: disk
name: production
EOF
Appliquer un profil à une instance :
incus launch images:debian/12 srv-prod --profile production
Migration depuis LXD
Si vous avez déjà une installation LXD, le paquet incus-extra fournit l’outil de migration :
sudo apt install incus-extra
# Lancer la migration (migre conteneurs, images, profils, réseaux)
sudo lxd-to-incus
L’outil interrompt LXD, copie les données vers Incus et redémarre les instances. Il est conseillé de réaliser des snapshots LXD avant toute migration.
À lire également
- LXD 6.x : orchestration de conteneurs Linux avec profils et clustering
- Podman : alternative rootless à Docker — installation et migration
- Installation et Configuration des Conteneurs LXC sur Linux
- Gestion des ressources cgroups v1/v2 avec LXC