LXC is a lightweight Virtualization technology that is used to run multiple isolated virtual units often referred to as containers in a chroot environment on a single host using a single Linux kernel.
Some common terminologies used with LXC include:
- chroot – Chroot also referred to as change root or change root jail is a section in the file system which is isolated from the rest of the file system. A program executed in this environment cannot access files outside the designated directory tree.
- cgroups – This is a Kernel feature that allows aggregating or partitioning tasks (processes) and all their children into hierarchically organized groups to isolate resources.
Installing LXC on Ubuntu 22.04|20.04|18.04|16.04
LXC can easily be installed on Ubuntu from upstream repositories using the following commands:
sudo apt update sudo apt install lxc
The above command will install lxc package and all dependencies required then configure a default container network. The name of the bridge is lxcbr0:
$ ip ad | grep lxc 3: lxcbr0:
mtu 1500 qdisc noqueue state DOWN group default qlen 1000 inet 10.0.3.1/24 scope global lxcbr0
After the installation, define uid mappings to run containers as non root user. See LXC man page docs for more details.
# Create directory if it doesn't exist mkdir -p ~/.config/lxc # Add configs required 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 "lxc.net.0.link = lxcbr0" >> ~/.config/lxc/default.conf echo "$USER veth lxcbr0 2" | sudo tee -a /etc/lxc/lxc-usernet
List current LXC configs:
$ lxc-config -l lxc.default_config lxc.lxcpath lxc.bdev.lvm.vg lxc.bdev.lvm.thin_pool lxc.bdev.zfs.root lxc.cgroup.use lxc.cgroup.pattern
Using LXC onUbuntu 22.04|20.04|18.04|16.04
You can use LXC in two modes:
- Privileged – This is when you run lxc commands as root user.
- Unprivileged – This is when you run commands as a non-root user.
Below is an example of essential commands to create an LXC container.
$ lxc-create -t download \ -n mylxc-ubuntu -- \ --dist ubuntu \ --release focal \ --arch amd64
- -n for the name of the container
- -t for a template.
If you get an error message “ERROR: Unable to fetch GPG key from keyserver“, you can use
$ lxc-create -t download \ -n mylxc-ubuntu -- \ --dist ubuntu \ --release focal \ --arch amd64 \ --no-validate
Downloading the image index WARNING: Running without gpg validation! Downloading the rootfs Downloading the metadata The image cache is now ready Unpacking the rootfs --- You just created an Ubuntu focal amd64 (20211228_07:42) container. To enable SSH, run: apt install openssh-server No default root or user password are set by LXC.
Once the container has been created, it is nor started by default. You can list all lxc containers using:
$ lxc-ls mylxc-ubuntu
To start the container, run:
$ lxc-start -n
# Example $ lxc-start -n mylxc-ubuntu
Install LXC Web UI on Ubuntu
There are a number of tools that you can use to manage your LXC containers. On this article, we’ll install and use LXC Web Panel. Run this command to install it:
wget https://lxc-webpanel.github.io/tools/install.sh -O - | sudo bash
This will automatically install and configure LXC Web UI for you. You’ll get an output similar to below after installation.
022-01-07 08:56:55 (65.4 MB/s) - written to stdout [2679/2679] _ __ _______ __ __ _ _____ _ | | \ \ / / ____| \ \ / / | | | __ \ | | | | \ V / | \ \ /\ / /__| |__ | |__) |_ _ _ __ ___| | | | > <| | \ \/ \/ / _ \ '_ \ | ___/ _` | '_ \ / _ \ | | |____ / . \ |____ \ /\ / __/ |_) | | | | (_| | | | | __/ | |______/_/ \_\_____| \/ \/ \___|_.__/ |_| \__,_|_| |_|\___|_| Automatic installer Installing requirement... + Installing Python + Installing Python pip E: Package 'python-pip' has no installation candidate | + Flask Python... Cloning LXC Web Panel... Cloning into '/srv/lwp'... remote: Enumerating objects: 243, done. remote: Total 243 (delta 0), reused 0 (delta 0), pack-reused 243 Receiving objects: 100% (243/243), 198.33 KiB | 9.92 MiB/s, done. Resolving deltas: 100% (108/108), done. Installation complete! Adding /etc/init.d/lwp... Done Starting server...done. Connect you on http://your-ip-address:5000/
As you can see, the service is listening on port 5000. If you have a firewall, open the port so that you can access it from a remote device.
sudo ufw allow 5000
You can now open the URL http://your-ip-address:5000/ on your browser to access the dashboard.
Login with user admin and password admin. Don’t forget to change the password after logging in.
Updating LXC Web Panel
To perform an automatic update run the commands:
wget https://lxc-webpanel.github.io/tools/update.sh -O - | sudo bash
You now have LXC and LXC Web Panel installed on your Ubuntu system. Enjoy using the tools to run containers in your system.