LXC containers are great for application isolation and safe deployment. Running unprivileged containers is the safest way to run containers in a production environment. This note contains enough information to create your own safe container.
Install LXC:
apt-get install -y lxc
Now create non-root system user for lxc:
useradd --home-dir /srv/lxc --create-home lxc
echo "lxc veth lxcbr0 2" | sudo tee -a /etc/lxc/lxc-usernet
passwd lxc <type password>
I recommend to add autostart as default behaviour:
su lxcusr
and add lines
# Autostart
lxc.start.auto = 1
lxc.start.delay = 5
to file ~/.config/lxc/default.conf
Add uid mappings in ~/.config/lxc/default.conf
:
# UID mappings
lxc.include = /etc/lxc/default.conf
lxc.id_map = u 0 100000 65536
lxc.id_map = g 0 100000 65536
Before container creation, you must login as lxc user directly (like ssh lxc@server.name
), or you will get error.
Create first container:
lxc-create -t download -n sample.dima.io -- -d ubuntu -r xenial -a amd64
lxc-start -d -n sample.dima.io
lxc-attach -n sample.dima.io
Don not forget to delete default user in container:
userdel ubuntu && rm -rf /home/ubuntu