LXD
LXD est un logiciel libre développé par Canonical pour simplifier la manipulation de conteneurs de logiciels à la manière d'un hyperviseur de VM. C'est une surcouche logicielle de LXC. Il fait partie du projet global LinuX Containers de gestion de containers.
Il a l'avantage d'être beaucoup plus léger qu'une machine virtuelle classique, car il ne virtualise pas un OS complet mais partage de nombreuses ressources avec l'OS hôte. On parle d'environnements virtuels (voir la page virtualisation pour plus d'information). Il s'appuie sur des fonctions comme les espaces de noms et les groupes de contrôle du noyau pour isoler le container du reste de la machine.
LXD permet donc de faire tourner plusieurs serveurs sur une même machine et de les isoler les uns des autres et de la machine hôte pour une plus grande sécurité.
Pour un particulier, il peux être intéressant d'utiliser un container pour démarrer un serveur ouvert sur l'internet. Ainsi, si il est mal configuré et qu'un hacker arrivait à s'introduire sur votre serveur, il serait bloqué à l’intérieur du container et n'aurait pas accès à vos fichiers persos, qui eux restent sur l’hôte.
Pré-requis
Avoir installé Ubuntu 16.04 ou une version ultérieure
Installation
Pour l'installer, il suffit d'installez le paquet lxd.
Configuration
La configuration de LXD se realise en entrant la commande suivante dans une console :
sudo lxd init
Il faut alors répondre aux questions du configurateur. Si vous n’êtes pas un pro du sujet et/ou un as des réseaux, vous pouvez simplement valider toutes les réponses par défaut proposées.
- Les images de vos containers seront alors stockée sur votre disque (option
dir
à la questionName of the storage backend to use (dir or zfs) [default=zfs]:
) - LXD sera accessible uniquement en local (option
no
à la questionWould you like LXD to be available over the network (yes/no) [default=no]?
) - Une connexion réseau par pont (bridged network) sera configurée sur votre ordinateur. En validant les options proposées dans les boites de dialogue de cette étape, vous allez créer un sous-réseau privé virtuel sur votre machine. Les différents containers pourront communiquer entre eux sur ce réseau. Ils pourront accéder à l’extérieur grâce au mécanisme NAT (Network Address Translation) mais ne seront pas accessibles depuis l’extérieur. Pour faire simple, vos containers sont sur un réseau interne à votre ordinateur exactement comme vos ordinateurs sont sur votre réseau local derrière votre box Internet / Firewall.
Si besoin, vous pourrez reconfigurer votre sous-réseau privée virtuel en entrant la commande :
sudo dpkg-reconfigure -p medium lxd
Enfin, afin de ne pas à avoir à passer en mode super-utilisateur à chaque commande, il faut ajouter son user
au groupe lxd
sudo adduser nom_utilisateur lxd
Création et manipulation des containers
Création
Maintenant que votre hyperviseur est correctement configuré, nous pouvons créer un premier container Debian
nommé MonContainer
en entrant la commande :
lxc launch images:debian/stretch MonContainer
LXD va aller chercher sur le serveur d'image images:
l'image correspondant à la distribution Debian dans sa version Stretch.
Il existe 3 serveurs d'images:
ubuntu:
(contenant les images des versions stables d'Ubuntu)ubuntu-daily:
(Contenant les dernières versions d'Ubuntu)images:
(Contenant les images de diverses distributions Linux)
Pour obtenir la liste des images disponibles sur un serveur d'images, par exemple pour le serveur ubuntu-daily:
tapez la commande
lxc image list ubuntu-daily:
Manipulation
Pour obtenir la liste des containers présents sur votre machine, tapez :
lxc list
Pour arrêter l’exécution de votre container MonContainer
lxc stop MonContainer
Et reprendre son exécution
lxc start MonContainer
Et enfin pour le supprimer définitivement
lxc delete MonContainer
Exportation / Importation
Comme les machines virtuelles, les containers sont portables. Lorsque vous avez configuré un container, vous pouvez l'exporter pour le réimporter sur une autre machine hôte.
Pour l'exportation, la commande est
lxc publish MonContainer --alias=MyContainer --force lxc image export MyContainer
Vous vous retrouvez alors avec un fichier de ce genre 0bf450c17cb7034077c83487e0.tar.gz. Vous pouvez le passer sur votre autre système hôte et l'importer dans votre serveur d'images local avec la commande suivante :
lxc image import 0bf450c17cb7034077c83487e0.tar.gz
Tapez ensuite
lxc image list
pour connaitre les infos sur votre image importée et les utiliser pour créer un nouveau container
Travailler dans vos containers
Pour exécuter une commande dans votre container MonContainer
, tapez par exemple :
lxc exec MonContainer -- apt get update
Si vous souhaitez exécuter plusieurs taches, il est alors préférable de "rentrer" dans le container comme suit :
lxc exec MonContainer -- /bin/bash
Vous pouvez aussi y entrer en temps que utilisateur ubuntu
lxc exec MonContainer -- sudo --login --user ubuntu
Les images Ubuntu ont un user ubuntu
preconfiguré avec les droits de sudo sans password.
Vous pouvez faire ce que vous voulez dans votre container sans risque d’endommager ou corrompre votre système hôte. Ce qui se passe dans le container reste dans le container.
Il est toutefois possible de partager des fichiers et/ou des répertoires entre l'hôte et le container. Par exemple, pour copier le fichier truc.zip
dans votre container :
lxc file push truc.zip MonContainer/tmp/
Vous pouvez aussi recuperer ce fichier truc.zip
sur votre système hôte:
lxc file pull MonContainer/etc/truc.zip .
Enfin, pour monter un repertoire de partage entre votre système hôte et votre container:
lxc config device add MonContainer MonContainerDevice disk source=/tmp/ path=/host/tmp
Ceci monte le dossier /tmp/ de l'hôte vers le dossier /host/tmp du container.
Aller plus loin
( lien mort ) Pour configurer votre container, et votre hôte, afin de le rendre visible sur Internet, je vous invite à lire ce tuto(FR). Indispensable si vous installez un serveur web, ftp ou autre dans votre container.
Pour faire fonctionner des applications graphiques, accéder à la carte son, etc, je vous invite à suivre ce tuto (EN). Notez, qu'il faudra mettre à jour LXD pour utiliser la version 2.7 minimum. Cette méthode peux être inintéressante pour installer des logiciels qui installent des packages i386 comme wine ou google-earth sans compromettre les dépendances des packages de votre système hôte.