LXC – Linux containers – are a relatively new technology available on Linux. LXC is similar to virtualization (VMWare, KVM, Parallels…), but it is much closer to the concept of BSD “jails”. There are some advantages to using LXC over virtualization:
- No overhead. LXC is just a container, isolating users, processes, and files, but not emulating a processor, network cards, sound, etc. The end result is no overhead in using LXC containers at all.
Instant-on, instant-off, instant-setup. Starting a container takes less than a second, as does shutting down. Once you download the initial OS image (see below), setting up new containers takes seconds. No installation procedures to go through!
Extremely easy to set up, use, and expand on. On Ubuntu 12.04 (and later), installation consists of one command. Setting up your first container is also 1 command. Starting that container – also 1 command. No installation, setting up users, restarting your machine, kernel modules, downloading ISOs, etc.
Docker uses LXC under the hood. I haven’t used Docker much, but it’s becoming really popular.
I use LXC all the time for development work. Whenever I need a clean Ubuntu installation to run tests on (great for making sure your setup process actually works!), try things out (different databases, ideas), or installing things I know I won’t need for a long time (as soon as I’m done with school, TeXLive is going to be removed with 1 command!).
Here’s how to get started on Ubuntu 12.04 and later.
sudo apt-get install lxc lxc-templates debootstrap
Setting up an Ubuntu Container
sudo lxc-create -t ubuntu -n my-first-container -- -r precise
You probably guessed – “my-first-container” is the name of the container, running Ubuntu Precise (12.04).
This command will download the latest Ubuntu 12.04 packages and install them. It will also cache the image for instant creation later (just use the same command for more containers). It will also set up simple NAT networking.
Using the Container
sudo lxc-start -n my-first-container
That’s all! You’ll be asked to log in. The Ubuntu container has a default username “ubuntu” and password “ubuntu”. Check the machine’s IP address with the command:
Stopping the Container
sudo shutdown -h now
Maybe “halt” or “poweroff” work, but I’ve aliased this and it’s muscle-memory for me.
Deleting (Destroying) a Container
sudo lxc-destroy -n my-first-container
That’s all there is to it! The image for creation of future containers won’t be erased, but this container will be.