
Two Incus mechanisms take you from "a few instances by hand" to an industrialised setup. Profiles are reusable configuration sets (resources, network, storage) applied to several instances. Projects compartmentalise sets of instances, images and networks, like separate spaces on one server. This guide shows how to create them, combine them and use them. Tested on Incus 7.0. For anyone managing more than a handful of containers.
What you will learn
- Create and apply a configuration profile.
- Combine several profiles on an instance.
- Compartmentalise with projects.
- Choose between a profile and a project.
Profiles: a reusable configuration
A profile gathers settings (CPU and memory limits, network and disk devices) that apply to several instances at once. Every instance uses at least the default profile:
incus profile list+---------+-----------------------+---------+| NAME | DESCRIPTION | USED BY |+---------+-----------------------+---------+| default | Default Incus profile | 3 |+---------+-----------------------+---------+You create a profile and define configuration in it:
incus profile create webincus profile set web limits.memory=1GiBincus profile show web# name: web# config:# limits.memory: 1GiBApplying and combining profiles
A profile applies at launch, or is added to an existing instance. Above all, profiles stack: Incus applies them in order, and the last one wins on conflict.
# at creation, combining default and webincus launch images:debian/13 srv -p default -p web
# on an existing instanceincus profile add srv webThat is the key to industrialising: a base profile (network, SSH keys), a web profile (resources), a monitoring profile (agent), assembled by role without repeating configuration.
Projects: compartmentalising one server
A project is an isolated space: its instances, images, profiles and networks are its own and do not interfere with the others. It is the multi-tenant unit of Incus.
incus project list# | default (current) | ... | Default Incus project |
incus project create test-projYou switch between projects, or target one for the duration of a command:
incus project switch test-proj # change the current projectincus --project test-proj list # one command inside a projectEvery project starts empty: instances created inside it do not show in default, and the reverse holds too. Ideal for separating environments (dev, prod), clients or teams on a single server.
Profile or project: which one
The two answer different needs, and they combine.
| Need | Tool |
|---|---|
| Reuse a configuration (resources, devices) | profile |
| Isolate sets of instances and networks | project |
| Instance roles (web, db, monitoring) | stacked profiles |
| Separate environments or clients | projects |
In practice: projects carve the server into spaces, and inside each project profiles industrialise the instance configuration. That same mechanism, pushed further with quotas and scoped credentials, is what turns a cluster into a multi-tenant private cloud.
Key points
- A profile is a reusable configuration; every instance uses at least
default. - Profiles stack (
-p base -p web), the last one wins: you compose by role. - A project is a compartmentalised space (its own instances, images, networks).
- You switch with
incus project switchor target with--project. - Profiles for configuration, projects for isolation: the two combine.
FAQ: common questions about Incus profiles and projects
A reusable configuration
A profile gathers settings (CPU and memory limits, network and disk devices) that apply to several instances. Every instance inherits at least default.
incus profile create web
incus profile set web limits.memory=1GiB
You apply it at launch (-p web) or to an existing instance (incus profile add). It is the foundation of industrialising your setup.
Profiles stack
incus launch images:debian/13 srv -p default -p web
incus profile add srv monitoring
Incus applies profiles in order; on conflict, the last one wins.
You compose by role: a base profile (network, SSH keys), a web profile (resources), a monitoring profile (agent), assembled without repeating configuration.
An isolated space
A project is a compartmentalised space: its instances, images, profiles and networks are its own.
incus project create test-proj
incus project switch test-proj
incus --project test-proj list
Instances in one project do not appear in the others. Ideal for separating environments (dev, prod), clients or teams on a single server.
Two complementary needs
| Need | Tool |
|---|---|
| Reuse a configuration | profile |
| Isolate sets of instances | project |
| Roles (web, db, monitoring) | stacked profiles |
| Separate environments or clients | projects |
Projects carve the server into spaces; inside each, profiles industrialise the configuration. The two combine.
Next steps
- Terraform provider: version profiles and projects as code instead of recreating them by hand on every server.
- Ansible connection plugin: populate the inside of instances launched from your profiles, without SSH.
- Securing Incus: turn an ordinary project into a restricted one that forbids privileged containers.