LXC, pour "linux containers", est un système de virtualisation similaire à Docker (Docker était initialement basé sur LXC), et lxd est une sorte de superviseur, un outil de plus haut niveau pour LXC. Je vous laisse lire la doc, mais c'est génial. Comparé à Docker, lxc/lxd:

  • est plus orienté "tout dans une VM". LXD fait tourner une distro, tout ce qu'on fait dans une VM ou sur une vrai machine, on peut le faire dans une image LXD. À l'inverset les images Docker sont censées être plus petites, dédiées à une tâche et sont éphémères. Voir Why LXD ?
  • peut se souvenir de l'état de la machine virtuelle, des données enregistrées
  • possède une api go et python
  • permet de migrer des images, en live, d'un server à un autre
  • possède bien moins de doc et les retours, positifs ou négatifs, sont rares.

Étant plus que prudent sur Docker, je m'intéresse de près à lxd (je n'ai encore rien mis en prod, pas d'avis sur ça).

Update: on peut maintenant installer LXD dans Debian avec un Snap. Un paquet Debian est aussi en cours.

LXD est développé par Canonical. La dernière version est dispo sur Ubuntu 16.04. Sur Debian, on a la v1 de LXC, il n'y a pas encore de paquet pour LXD, lequel nécessite lxc v2 qui est présent dans les backports de Jessie. On va compiler LXD, ce qui est rapide.

On commence par installer les dépôts backport:

echo "deb http://ftp2.fr.debian.org/debian/ jessie-backports main" >> /etc/apt/sources.list.d/additional-repositories.list

On installe les dépendances:

sudo apt-get -t jessie-backports install lxc-dev lxc golang-go squashfs-tools xz-utils

On clone le projet lxd:

git clone git://github.com/lxc/lxd
cd lxd

À partir de là il suffit de suivre le README. Pour info, il nous suffit de :

mkdir -p ~/go
export GOPATH=~/go
go get github.com/lxc/lxd
cd $GOPATH/src/github.com/lxc/lxd
make

et voilà.

Maintenant, amusons-nous: https://linuxcontainers.org/lxd/getting-started-cli/

Nous pouvons télécharger ou créer des images, en prendre des snapshots, avoir la main sur un shell, inclure des fichiers du système hôte, accéder au réseau, configurer des profils, choisir son système de fichiers, interagir avec un démon LXD à distance, utiliser son API rest, … Facile. Mais qui a des retours pour une mise en prod, un déploiement d'application Python/Django ?