- EPSI B3 2016/2017 - David Gayerie Licence Creative Commons

LXC (Linux Containers) est une solution de virtualisation basée sur la capacité du noyau Linux à faire fonctionner des environnements isolés. Les conteneurs partagent le même noyau mais l'utilisation des processeurs, mémoire vive, système de fichier... est isolée les uns des autres. Il s'agit donc d'une méthode de virtualisation légère puisque la machine elle-même n'est pas virtualisée. On parle alors de conteneur plutôt que de machine virtuelle.

LXD est l'hyperviseur de LXC.

LXC va nous permettre de créer rapidement des machines afin de pouvoir les configurer. Il s'agit donc d'un outil particulièrement utile à la fois pour le déploiement mais aussi les tests.

Installation

L'installation de LXD se fait à partir du gestionnaire de paquet de votre distribution Linux. Pour une distribution basée sur Debian (Ubuntu, Mint...), il suffit de taper en ligne de commande:


sudo apt install lxd
			

Vous devez ensuite configurer le service LXD avec la commande :


sudo lxd init
			

Vous pouvez conserver la valeur des paramètres telle qu'elle vous est proposée. LXD est maintenant installé en tant que service. Vous allez pouvoir utiliser la commande lxc qui va vous permettre d'interagir avec l'hyperviseur.

Utilisation

lxc permet de manipuler facilement vos conteneurs. Cette section liste les commandes les plus utiles.

Pour voir la liste des conteneurs installés, leur état et leurs adresses réseau :


lxc list
			

Pour créer un conteneur ;


lxc launch images:<distribution>/<release>/<architecture> <nom du conteneur>
			

La liste des images est disponible sur https://images.linuxcontainers.org/.

Pour créer un conteneur Debian jessie pour une architecture 64 bits :


lxc launch images:debian/jessie/amd64 <nom du conteneur>
			

Pour démarrer/arrêter/relancer un conteneur :


lxc start <nom du conteneur>
lxc stop <nom du conteneur>
lxc restart <nom du conteneur>
			

Pour obtenir des informations détaillées sur le conteneur :


lxc info <nom du conteneur>
			

Pour lancer un shell en mode superutilisateur


lxc shell <nom du conteneur>
			

Pour exécuter une commande en mode superutilisateur


lxc exec <nom du conteneur> -- <commande>
			

Pour supprimer un conteneur


lxc delete <nom du conteneur>
			

Pour créer un snapshot de l'état d'un conteneur


lxc snapshot <nom du conteneur> <nom du snapshot>
			

Pour restaurer un snapshot


lxc restore <nom du conteneur> <nom du snapshot>
			

Pour copier un conteneur


lxc copy <nom du conteneur> <nom du nouveau conteneur>
			

Pour copier un conteneur à partir d'un snapshot


lxc copy <nom du conteneur>/<nom du snapshot> <nom du nouveau conteneur>
			

Exercice : création d'un conteneur Ubuntu

Objectif
Écrire un script shell qui permet de créer un conteneur Ubuntu Xenial.

Ce script permet de créer un conteneur Debian à jour avec un compte utilisateur accessible en ssh.


lxc launch images:ubuntu/xenial/amd64 <nom du conteneur>
lxc exec <nom du conteneur> -- apt update
lxc exec <nom du conteneur> -- apt -y upgrade
lxc exec <nom du conteneur> -- apt -y install openssh-server
lxc exec <nom du conteneur> -- adduser $USER
		
Exemple de script pour LXC

#!/bin/bash -e

CONTAINER_NAME="$1"

while [ -z "$CONTAINER_NAME" ]
do
  read -p "Donnez le nom du nouveau conteneur: " CONTAINER_NAME
done

if [ $(lxc list -c n | grep -c "| *$CONTAINER_NAME *|") == 1 ]
then
  echo "Un conteneur porte déja ce nom..."
else
  lxc launch images:ubuntu/xenial/amd64 "$CONTAINER_NAME"
  sleep 5
fi

lxc exec "$CONTAINER_NAME" -- apt update
sleep 5
lxc exec "$CONTAINER_NAME" -- apt -y upgrade
lxc exec "$CONTAINER_NAME" -- apt -y install openssh-server python sudo
lxc exec "$CONTAINER_NAME" -- adduser $USER
lxc exec "$CONTAINER_NAME" -- usermod -a -G sudo $USER