- 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.

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 LXC 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 lxc
			

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-ls -f
			

Pour créer un conteneur ;


lxc-create --template download --name <nom du conteneur> -- <paramètres de création du conteneur>
			

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


lxc-create --template download --name <nom du conteneur> -- -d debian -r jessie -a amd64
			

Pour démarrer/arrêter un conteneur :


lxc-start -n <nom du conteneur>
lxc-stop -n <nom du conteneur>
			

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


lxc-info -n <nom du conteneur>
			

Pour lancer un shell en mode superutilisateur


lxc-attach -n <nom du conteneur> -- /bin/bash
			

Pour exécuter une commande en mode superutilisateur


lxc-attach -n <nom du conteneur> -- <commande>
			

Pour supprimer un conteneur


lxc-destroy -n <nom du conteneur>
			

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


lxc-snapshot -n <nom du conteneur>
			

Pour voir liste des snapshots disponible pour un conteneur


lxc-snapshot -n <nom du conteneur> -L
			

Pour restaurer un snapshot


lxc-snapshot -n <nom du conteneur> -r <nom du snapshot>
			

Pour copier un conteneur


lxc-copy -n <nom du conteneur> -N <nom du nouveau conteneur>
			

Pour copier un conteneur à partir d'un snapshot


lxc-snapshot -n <nom du conteneur> -r <nom du snapshot> -N <nom du nouveau conteneur>
			

Exercice : création d'un conteneur Debian

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.


sudo lxc-create --template download --name <nom du conteneur> -- -d ubuntu -r xenial -a amd64
sudo lxc-start -n <nom du conteneur>
sudo lxc-attach -n <nom du conteneur> -- apt update
sudo lxc-attach -n <nom du conteneur> -- apt -y upgrade
sudo lxc-attach -n <nom du conteneur> -- apt -y install openssh-server
sudo lxc-attach -n <nom du conteneur> -- adduser $USER
		
Exemple de script Bash

#!/bin/bash -e

CONTAINER_NAME="$1"

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

if [ $(sudo lxc-ls -1 | grep -c "^$CONTAINER_NAME$") == 1 ]
then
  echo "Un conteneur porte déja ce nom..."
else
  sudo lxc-create --template download --name "$CONTAINER_NAME" -- -d ubuntu -r xenial -a amd64
fi

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