Introduction
Incus is a community-maintained fork of Canonical's LXD, managed under the Linux Containers project. It provides full system containers and virtual machines through a single tool, combining the density of containers with the isolation of VMs under one consistent API.
What Incus Does
- Manages both system containers (LXC) and QEMU-based virtual machines
- Provides image-based workflows with a public image server
- Supports clustering for distributing instances across multiple hosts
- Enables live migration of running containers and VMs
- Offers fine-grained resource limits for CPU, memory, disk, and network
Architecture Overview
Incus runs as a daemon exposing a REST API. The CLI (incus) communicates with this API to manage instances. Containers use LXC with kernel namespaces and cgroups. VMs use QEMU/KVM with virtio devices. Both instance types share the same storage, network, and profile abstractions, allowing unified management.
Self-Hosting & Configuration
- Install from distro packages (Zabbly repo for Debian/Ubuntu) or build from Go source
- Run incus admin init to configure storage pool, network bridge, and clustering
- Use profiles to define reusable configurations for CPU, memory, and devices
- Configure storage backends: ZFS, Btrfs, LVM, or directory
- Set up clustering by joining additional nodes to the leader
Key Features
- Unified management of containers and VMs through one tool
- Built-in image server with pre-built images for 30+ Linux distributions
- Clustering with automatic instance placement and failure recovery
- Snapshot and backup support with scheduled automatic snapshots
- Project-based multi-tenancy for isolating workloads and users
Comparison with Similar Tools
- LXD — Incus is the community fork after Canonical moved LXD to a CLA model; feature-equivalent with independent governance
- Docker — application containers; Incus provides full system containers with init, SSH, and multi-process support
- Proxmox VE — hypervisor with web UI; Incus is CLI/API-first and lighter weight
- libvirt/virsh — lower-level VM management; Incus adds container support and a modern REST API
FAQ
Q: What is the difference between Incus and LXD? A: Incus is a community fork of LXD maintained by the Linux Containers project. It diverged after Canonical changed LXD's licensing. Functionally they are similar, with Incus adding community-driven features.
Q: Can I migrate from LXD to Incus? A: Yes. The Incus project provides a lxd-to-incus migration tool that converts LXD installations in place.
Q: Does Incus replace Docker? A: They serve different purposes. Docker runs application containers (one process). Incus runs system containers (full OS) and VMs. They can complement each other.
Q: What storage backends are supported? A: ZFS, Btrfs, LVM, Ceph, and plain directory. ZFS and Btrfs offer the best snapshot and copy-on-write performance.