Lxc
Installation et utilisation de LXC (au plus simple)
Installation
Installation des paquets
# apt install lxc bridge-utils
Configuration du reseau
Création d'une interface pour le mode bridge (le NAT c'est le mal)
# vim /etc/network/interfaces
<source lang="bash"> auto br0 iface br0 inet static address 192.168.1.161 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 bridge_ports eth0 bridge_stp off bridge_maxwait 5 bridge_fd 0 </source>
Création d'un conteneur et configuration
Création d'un conteneur sous Debian 8
# lxc-create -n <NOM_CONTENEUR> -t debian -- -r jessie
Ajout de la configuration réseau. Attention, la directive <source lang="bash" inline>lxc.network.ipv4</source> donne une IP au conteneur mais le fichier interfaces du debian est réglé sur dhcp par défaut. Le conteneur récupère donc 2 IP. Soit on désactive cette directive, soit on vire le DHCP (je pense que mettre une IP fixe au conteneur est plus simple).
# vim /var/lib/lxc/<NOM_CONTENEUR>/config
<source lang="bash"> lxc.network.type = veth lxc.network.hwaddr = 00:16:3e:62:91:94 lxc.network.name = eth0
- lxc.network.ipv4 = 192.168.1.163
lxc.network.link = br0 lxc.network.flags = up </source>
Commandes de gestion des conteneurs
Démarrage
Démarrage du conteneur en tache de fond
# lxc-start -n <NOM_CONTENEUR> -d
Console
- ntrer dans la console du conteur (attach). Pour sortir, tappez <source inline>ctrl+a q</source>
# lxc-console -n <NOM_CONTENEUR>
Arrêter
Arrêter le conteneur (-k pour forcer)
# lxc-stop -n <NOM_CONTENEUR> [-k]
Supprimer
Supprimer un conteneur (-f pour forcer)
# lxc-destroy -n <NOM_CONTENEUR> [-f]
À noter qu'il est préférable d'utiliser la commande suivante pour supprimer un conteneur (j'ai déjà eu des mauvaises surprises avec l'autre commandes)
# rm -rf /var/lib/lxc/<NOM_CONTENEUR>
Lister
Lister les conteurs démarrés ou arrétés
# lxc-ls [--active | --stopped]
Lister les conteneur dans un tableau
# lxc-ls --fancy
Info
Savoir si un conteneur est allumé ou éteint
# lxc-info -n <NOM_CONTENEUR>
Sauvegarder et restaurer un conteneur
Sauvegarde
Sauvegarde (conserve automatiquement les permissions)
# ls /var/lib/lxc/ # tar czvf Nom_Conteneur_Date.tar.gz Nom_Conteneur
Restauration
Restaurer le conteneur (par défaut, l'option -p est activé et permet de conserver les permissions. Verifiez si c'est le cas le première fois)
# ls /var/lib/lxc/ # tar xzvf[p| --preserve-permissions] Nom_Conteneur_Date.tar.gz
Bonus
Script de génération d'adresse MAC (en fonction du nom du conteneur) <source lang="bash">
if [ -n "$1" ]; then
OID="44:8a:5b"
RAND=$(echo $1 | md5sum | sed 's/\(..\)\(..\)\(..\).*/\1:\2:\3/')
echo "$OID:$RAND"
else
echo "ERREUR: Merci de soumettre un nom pour générer l'adresse MAC :"
echo " $FUNCNAME myhost"
fi
</source>
Informations utiles
- Les conteneurs sont situés dans <source lang="bash" inline>/var/lib/lxc</source>
- Les conteneurs étalons téléchargés sont stockés dans <source lang="bash" inline>/var/cache/lxc</source>
- Le paquet contenant l'outil ping est <source lang="bash" inline>iputils-ping</source>
- Pour fixer le DNS (qui est automatiquement récupéré par le DHCP) il faut installer le paquet <source lang="bash" inline>resolconf</source> et mettre une section dns-namerver <IP_DNS> dans le fichier <source lang="bash" inline>/etc/network/interfaces</source>
- Détails des arguments <source lang="bash" inline>lxc.network</source> du fichier de config : https://linuxcontainers.org/fr/lxc/manpages/man5/lxc.container.conf.5.html