LXC
These instructions assume Ubuntu 12.04 LTS.
Install and set up LXC container
First, install LXC and create a base container, then clone a project container from it. Here's roughly what I had to do to set up LXC nicely.
sudo apt-get install lxc
Create a base container to serve as a template
sudo lxc-create -t ubuntu -n base sudo lxc-start -n base
Log in with the default account, (username ubuntu, password ubuntu), then add yourself as a user with sudo:
sudo adduser username sudo adduser username sudo
This installs some nifty default guff, fixes the probably broken UTC timezone, and fixes locales BEFORE you install things that expect UTF-8 locales, but in particular PostgreSQL (otherwise you end up with SQL_ASCII encoding and nobody wants that):
sudo apt-get install git bash-completion language-pack-en openssh-server sudo dpkg-reconfigure tzdata
Set up a SSH shortcut for containers
Back on your host workstation, set up an SSH shortcut. If you add the following to your ~/.ssh/config, you will be able to ssh to your containers nice and easily:
# LXC containers Host *.lxc StrictHostKeyChecking no UserKnownHostsFile /dev/null ProxyCommand nc $(host $(echo %h | sed "s/\.lxc//g") 10.0.3.1 | tail -1 | awk '{print $NF}') %p
Then one can ssh to the containers by appending .lxc to the container name:
ssh myproject.lxc
and then schlepp your handy stuff over:
scp -rp ~/.bashrc ~/.vim* ~/.gitconfig base.lxc: scp ~/.ssh/authorized_keys base.lxc:.ssh/authorized_keys
Clone a new project container from the template
Now you should have a useful base container, so clone it for your nifty-kitten project and start it (most usefully in a screen session):
sudo lxc-shutdown -n base sudo lxc-clone -o base -n nifty-kitten screen sudo lxc-start -n nifty-kitten [Ctrl-a] [d] to detach