Getting started with the UI
This tutorial gives a quick introduction to using the LXD UI. It covers installing and initializing LXD, getting access to the UI, and carrying out some standard operations like creating, configuring, and interacting with instances, configuring storage, and using projects.
After going through these steps, you will have a general idea of how to use LXD through its UI, and you can start exploring more advanced use cases!
Note
Ensure that you have 20 GiB free disk space before starting this tutorial.
Install and initialize LXD
The easiest way to install LXD is to install the snap package. If you prefer a different installation method, or use a Linux distribution that is not supported by the snap package, see How to install LXD.
-
Install
snapd
:-
Run
snap version
to find out if snap is installed on your system:~$
snap version
snap 2.63+24.04ubuntu0.1``snapd 2.63+24.04ubuntu0.1``series 16``ubuntu 24.04``kernel 5.15.0-117-generic
If you see a table of version numbers, snap is installed and you can continue with the next step of installing LXD.
-
If the command returns an error, run the following commands to install the latest version of
snapd
on Ubuntu:sudo apt update sudo apt install snapd
Note
For other Linux distributions, see the installation instructions (opens in a new tab) in the Snapcraft documentation.
-
-
Enter the following command to install LXD:
sudo snap install lxd
If you get an error message that the LXD snap is already installed, run the following command to refresh it and ensure that you are running an up-to-date version:
sudo snap refresh lxd
-
Check if the current user is part of the
lxd
group (the group was automatically created during the previous step):getent group lxd | grep "$USER"
If this command returns a result, you’re set up correctly and can continue with the next step.
If there is no result, enter the following commands to add the current user to the
lxd
group (which is needed to grant the user permission to interact with LXD):sudo usermod -aG lxd "$USER" newgrp lxd
-
Enter the following command to initialize LXD:
lxd init --minimal
This will create a minimal setup with default options. If you want to tune the initialization options, see How to initialize LXD for more information.
-
LXD supports both Containers and VMs. For LXD virtual machines, your host system must be capable of KVM virtualization. To check this, run the following command:
lxc info | grep -FA2 'instance\_types'
The following output indicates that your host system is capable of virtualization:
instance_types: - container - virtual-machine
If
virtual-machine
fails to appear in the output, this indicates that the host system is not capable of virtualization. In this case, LXD can only be used for containers. You can proceed with this tutorial to learn about using containers, but disregard the steps that refer to virtual machines.
Access the UI
You access the LXD UI through your browser. See How to access the LXD web UI for more information.
-
Expose LXD to the network by setting the
core.https_address
server configuration option:lxc config set core.https_address :8443
-
Access the UI in your browser by entering the server address (for example,
https://127.0.0.1:8443
(opens in a new tab) for a local server, or an address likehttps://192.0.2.10:8443
for a server running on192.0.2.10
).If you have not set up a secure TLS server certificate, LXD uses a self-signed certificate, which will cause a security warning in your browser. Use your browser’s mechanism to continue despite the security warning.
-
Set up the certificates that are required for the UI client to authenticate with the LXD server by following the steps presented in the UI.
You have two options, depending on whether you already have a client certificate selected in your browser:
-
If you don’t have a certificate yet, click Create a new certificate to get instructions for creating a set of certificates, adding the public key to the server’s trust store, and adding the private key to your browser.
-
If you already have a client certificate in your browser, select “use an existing certificate” to authorize the certificate with the server and re-use it.
See Remote API authentication for more information.
-
Create and start instances
Let’s start by launching a few instances. With instance, we mean either a container or a virtual machine. See Containers and VMs for information about the difference between the two instance types.
-
Select Instances from the navigation.
-
Click Create instance to launch a container called
first
using the Ubuntu 24.04 LTS image:To select the base image, click Browse images. Click Select next to the Ubuntu 24.04 LTS image.
Note
The images that are displayed are hosted on pre-configured Remote image servers. You can filter which images are displayed.
You can also upload a custom ISO file to boot from. See Create a VM that boots from an ISO for more information.
-
To launch the container, click Create and start.
Note
Launching this container takes a few seconds, because the image must be downloaded and unpacked first.
-
Create another container called
second
, using the same image. After entering the name and selecting the image, click Create instead of Create and start.This container will be created but not started.
Note
Creating this container is quicker than launching the first, because the image is already available locally.
-
Create and start a VM called
ubuntu-vm
using the Ubuntu 24.04 LTS image. To create a VM instead of a container, select VM as the instance type:Note
Even though you are using the same image name to launch the instance, LXD downloads a slightly different image that is compatible with VMs.
-
Create (do not click Create and start yet) a VM called
ubuntu-desktop
. When selecting the image, filter by variant “desktop” to find the Ubuntu 24.04 LTS desktop image. Note that after you select the image, the instance type is automatically set to VM:To run smoothly, the desktop VM needs more RAM. Therefore, navigate to Advanced > Resource limits and set the Memory limit to 4 GiB. Then click Create and start to start the instance.
-
Check the list of instances that you created:
You will see that all but the
second
container are running. This is because you created thesecond
container but didn’t start it.You can start the
second
container by clicking the Start button (▷) next to it.
See How to create instances for more information.
Inspect instances
In the list of instances, click on one of the lines to see more information about the respective instance:
Click on an instance name to go to the instance detail page, where you can inspect your instance:
-
The Overview tab shows general information and usage statistics about the instance.
-
The Configuration tab contains the instance configuration. For now, just click through to inspect the configuration. We’ll do some updates later.
If you want to see the full instance configuration, go to the YAML configuration:
-
The Snapshots tab shows available snapshots. You can ignore this for now; we’ll look into snapshots later.
-
The Terminal tab allows you to interact with your instance. For example, enter the following command to display information about the operating system:
cat /etc/\*release
Or have some fun:
apt update apt install fortune /usr/games/fortune
See Get shell access to your instance for more information.
Note
When you navigate away from the Terminal tab, you are asked to confirm. The reason for this confirmation prompt is that the terminal session is not saved, so once you navigate away, your command history is lost.
-
The Console tab is mainly relevant during startup of an instance, and for VMs.
Go to the instance detail page of the
ubuntu-desktop
VM and check the graphic console:See How to access the console for more information.
-
The Logs tab contains log files for inspection and download. Running instances have only limited information. More log files are added if an instance ends up in error state.
See How to troubleshoot failing instances for more information.
Stop and delete instances
For the remainder of the tutorial, we don’t need all of the instances we created. So let’s clean some of them up:
-
Go back to the instances list.
-
Stop the
second
container by clicking the Stop button (□) next to it. -
Delete the
second
container. To do so, click the instance name to go to the instance detail page. Then click the Delete instance button at the top. -
Go to the instance detail page of the
ubuntu-vm
VM to delete it.You will see that the Delete instance button at the top is not active. This is because the instance is still running.
Stop it by clicking the Stop button (□) at the top, then click Delete instance.
Tip
If stopping an instance takes a long time, click the spinning Stop button to go back to the confirmation prompt, where you can select to force-stop the instance.
See How to manage instances for more information.
Configure instances
There are several limits and configuration options that you can set for your instances. See Instance options for an overview.
Let’s create another container with some resource limits:
-
On the instances list, click Create instance. Enter
limited
as the instance name and select the Ubuntu 24.04 LTS image. -
Expand Advanced and go to Resource limits.
-
Change the Exposed CPU limit to 1 and the Memory limit to 4 GiB:
-
Click Create and start.
-
When the instance is running, go to its instance detail page and select Configuration > Advanced > Resource limits. Confirm that the limits you set are visible.
-
Go to the Terminal tab and enter the following commands:
free -m nproc
You should see that the total memory is limited to 4096, and the number of available CPUs is 1.
-
Go to the instance detail page of the
first
container and enter the same commands.You should see that the values differ from those of the
limited
container. The exact values depend on your host system (so if your host system has only one CPU, for example, you might see one CPU for thefirst
container as well). -
You can also update the configuration while your container is running:
Depending on the instance type and the storage drivers that you use, there are more configuration options that you can specify. For example, you can configure the size (quota) of the root disk device for a VM:
-
Go to the terminal for the
ubuntu-desktop
VM and check the current size of the root disk device (/dev/sda2
):df -h
-
Navigate to Configuration > Advanced > Disk devices.
Tip
By default, the size of the root disk is inherited from the default profile. Profiles store a set of configuration options and can be applied to instances instead of specifying the configuration option for each instance separately.
See How to use profiles for more information.
-
Override the size of the root disk device to be 30 GiB:
-
Save the configuration, and then restart the VM by clicking the Restart button ().
-
In the terminal, check the size of the root disk device again:
df -h
Note
Note that the size has changed.
See How to configure instances and Instance configuration for more information.
Manage snapshots
You can create a snapshot of your instance, which makes it easy to restore the instance to a previous state.
-
Go to the instance detail page of the
first
container and select the Snapshots tab. -
Click Create snapshot and enter the snapshot name
clean
. Leave the other options unchanged and create the snapshot.You should now see the snapshot in the list.
-
Go to the Terminal tab and break the container:
rm /usr/bin/bash
-
Confirm the breakage by reloading the page:
The UI cannot open a terminal in your container anymore, because you deleted the
bash
command. -
Go back to the Snapshots tab and restore the container to the state of the snapshot by clicking the Restore snapshot button () next to it.
-
Go back to the Terminal tab. The terminal should now load again.
-
Go to the Snapshots tab and delete the snapshot by clicking the Delete snapshot button () next to it.
See Use snapshots for instance backup for more information.
Add a custom storage volume
You can add additional storage to your instance, and also share storage between different instances. See Storage volumes for more information.
Let’s start by creating a custom storage volume:
-
Navigate to Storage > Volumes.
Even though you have not created any custom storage volumes yet, you should see several storage volumes in the list. These are instance volumes (which contain the root disks of your instances) and image volumes (which contain the cached base images).
-
Click
Create volume
and enter a name and a size. Leave the default content type (filesystem
).
After creating the instance, we can attach it to some instances:
-
Go to the instance detail page of the
first
container. -
Go to Configuration > Advanced > Disk devices.
-
Click Edit instance and then Attach disk device.
-
Select the disk device that you just created.
Tip
You can create a custom volume directly from this screen as well.
-
Enter
/data
as the mount point and save your changes: -
Go to the Terminal tab and enter the following command to create a file on the custom volume:
touch /data/hello\_world
-
Go to the instance detail page of the
ubuntu-desktop
VM and add the same custom storage volume with the same mount point (/data
). -
Go to the Terminal tab and enter the following command to see the file you created from your
first
container:ls /data/
Note
You can also look at the directory in the file browser. To do so, enter the following command in the terminal first:
chown ubuntu /data /data/\*
Then switch to the console, open the file browser, and navigate to the
/data
folder:
Use projects
You can use projects to group related instances, and other entities, on your LXD server. See Instances grouping with projects and How to create and configure projects for more information.
Originally, there is only a default project on the server. All the instances you created so far are part of this project.
Now, let’s create another project:
-
Expand the Project dropdown and click Create project:
-
Enter
tutorial
as the project name. -
For features, select
Customised
.You can then select which features should be isolated. “Isolated” in this context means that if you select one of the features, entities of this type are confined to the project. So when you use a project where, for example, storage volumes are isolated, you can see only the storage volumes that are defined within the project.
-
Deselect
Storage volumes
and create the project.
The new project is automatically selected for you. Let’s check its content:
-
Go to Instances.
You will see that there are no instances in your project, because instances are always isolated, and the instances you created earlier are in the default project.
-
Create an instance in the new project.
You should notice that you get an error about missing root storage. The reason for this is that the root storage is usually defined in the default profile, but profiles are isolated in the project.
-
To resolve the error, edit the root storage. Use the
default
pool and leave the size empty.Then create the instance.
-
Go to Storage > Volumes.
Remember that in the default project, you saw three different kinds of storage volumes in the volume list:
-
Instance (container or VM) volumes
-
Image volumes
-
Custom volumes
You should see the same three types in the
tutorial
project. However, note the following:-
You can see only one instance volume and one image volume. These are for the one instance you created in the
tutorial
project.You cannot see the instance and image volumes for the instances you created in the default project, because both instances and images are isolated in the
tutorial
project, so you cannot see the corresponding storage volumes from other projects. -
You can see the custom storage volume that you created in the default project.
Because you deselected
Storage volumes
when creating the project, storage volumes are not isolated, and you can therefore see storage volumes from other projects.
-
Clean up entities
Now that we’ve run through the basic functionality of LXD, let’s clean up the entities we created throughout the tutorial.
-
With the
tutorial
project still selected, go to the instances list and stop and delete the instance you created in this project. -
Go to Images and click the Delete button () next to it.
-
Go to Configuration and click the Delete project button in the top-right corner.
After deleting the project, you are automatically switched back to the default project.
-
Stop and delete all instances in the default project. To do this all at once, go to the instance list and select all instances. Then click Stop at the top. Finally, click Delete at the top.
-
Go to Storage > Volumes and click the Delete button () next to the
tutorial_volume
storage volume.
Note
Optionally, you can also delete the images that you used. However, this isn’t really needed. If you keep them, they will eventually expire (by default, when they haven’t been used for ten days).
Next steps
Now that you’ve done your first experiments with LXD, you should read up on important concepts in the Explanation section and check out the How-to guides to start working with LXD!