Wikipedia le fait très bien. Voici la définition de LXC :
LXC, contraction de l’anglais Linux Containers1 est un système de virtualisation, utilisant l'isolation comme méthode de cloisonnement au niveau du système d'exploitation. Il est utilisé pour faire fonctionner des environnements Linux isolés les uns des autres dans des conteneurs partageant le même noyau et une plus ou moins grande partie du système hôte. Le conteneur apporte une virtualisation de l'environnement d'exécution (Processeur, Mémoire vive, réseau, système de fichier…) et non pas de la machine. Pour cette raison, on parle de « conteneur » et non de machine virtuelle.
Ce système est similaire aux autres systèmes de virtualisations au niveau du système d'exploitation comme openVZ, Linux-VServer sur Linux ou comme les BSD jails de FreeBSD, ou encore les zones Solaris.
LXC repose sur les fonctionnalités des Cgroups du noyau Linux disponibles depuis la version 2.6.24 du noyau. Il repose également sur d'autres fonctionnalités de cloisonnement comme le cloisonnement des espaces de nommage du noyau, permettant d'éviter à un système de connaître les ressources utilisées par le système hôte ou un autre conteneur.\\
Paquets requis pour l'installation
apt-get install lxc
Paquets optionnels pour l'installation
apt-get install bridge-utils libvirt-bin debootstrap
LXC est maintenant installé.
Voici, comment tester la configuration.
lxc-checkconfig
Kernel config /proc/config.gz not found, looking in other places... Found kernel config file /boot/config-3.2.0-4-amd64 --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled --- Control groups --- Cgroup: enabled Cgroup clone_children flag: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled File capabilities: enabled Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
tous doit être au vert.
LXC vient avec des Templates, c'est à dire des scripts permettant l'installation simple d'un système. Il en existe pour Debian, Archlinux, Fedora, OpenSuse et Ubuntu.
Création d'un conteneur avec le système debian jessie :
lxc-create -n MyName -t debian -- -r jessie
-r jessie
comme arguments au template debian
.lxc-create -t debian -h
Dans mon exemple je suis partie sur le template debian
.
Le fichier est situé dans /var/lib/lxc/MyName/config
et il pourrait ressembler à ça :
lxc.utsname = MyName lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.name = lxcnet0 lxc.network.hwaddr = 00:FF:AA:00:00:01 lxc.network.ipv4 = 192.168.1.6/24 lxc.network.ipv4.gateway = 192.168.1.1 lxc.start.auto = 1 lxc.arch = amd64 lxc.mount = /var/lib/lxc/MyName/fstab lxc.include = /usr/share/lxc/config/debian.common.conf lxc.rootfs = /var/lib/lxc/MyName/rootfs lxc.kmsg = 0
lxc.utsname : définit le nom de votre conteneur
lxc.network.type : définit le type de virtualisation réseau à utiliser pour votre conteneur.
Plusieurs type sont possible :
lxc.network.link
lxc.network.link
et affectée au conteneur.lxc.network.vlan.id
macvlan
est liée à l'interface spécifiée par lxc.network.link
et affectée au conteneurlxc.network.link
lxc.network.flags : définit une action à faire pour le réseau up
permet d'activer l'interface
lxc.network.link : définit l'interface qui va être utilisé sur votre hôte
lxc.network.name : Nom de l’interface réseau dans le conteneur
lxc.network.hwaddr : L'adresse MAC de l'interface est allouée dynamiquement par défaut à l'interface virtuelle, mais dans certains cas, ceci est nécessaire pour résoudre un conflit d'adresse MAC ou pour avoir toujours la même adresse ipv6 locale de lien.
lxc.network.ipv4 : assigne une adresse IPV4 à l'interface virtuelle
lxc.network.ipv4.gateway : définit l'adresse IPV4 qui est utilisé comme passerelle par défaut, celle-ci sera inséré dans le conteneur
lxc.start.auto : définit si le conteneur doit être démarrer automatiquement, 0 = éteint et 1 = allumé
lxc.arch : définit l'architecture du conteneur les options valide sont : x86, i686, x86_64, amd64
lxc.mount : définit l'endroit ou se situe le fichier contenant les information de montage au formatfstab
lxc.include : spécifie le fichier a inclure, le fichier inclue peut être dans le même format de configuration lxc.
lxc.rootfs : spécifie le chemin du système de fichier du conteneur
lxc.kmsg : Définissez cette valeur sur 1 pour activer les Liens symboliques /dev/kmsg
.
Comme vu dans le fichier de configuration, nous avons choisis une interface bridge comme lien avec le réseau.
Donc nous devons créer cette interface de pont.
Dans le fichier /etc/network/interfaces
de l’hôte
bridge-utils
.
auto br0 iface br0 inet static bridge_ports eth0 bridge_fd 0 bridge_stp off bridge_maxwait 0 address 192.168.1.20 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.254 # les options dns-* sont implémentées par le paquet resolvconf package, si installé dns-nameservers 192.168.1.1 192.168.1.2 dns-search ksh-linux.info
Relancez les connections réseaux:
/etc/init.d/networking restart
veth
accède au réseau via le bridge créé sur l’hôte.echo 1 > /proc/sys/net/ipv4/ip_forward
Pour que ce soit fait à chaque démarrage :
vim /etc/sysctl.conf
puis dé-commenter la ligne suivante :
net.ipv4.ip_forward=1
ensuite nous pouvons masquer l'IP et rediriger le trafic de notre interface 192.168.1.20
vers notre conteneur 192.168.1.5
:
iptables -t nat -A POSTROUTING -s 192.168.1.5 -o br0 -j MASQUERADE iptables -t nat -A PREROUTING -d 192.168.1.20/32 -j DNAT --to-destination 192.168.1.5
Démarrer un container :
lxc-start -n MyName -d
-n: indique le nom de votre conteneur -d: pour lancer le conteneur comme un daemon
Démarrage automatique de lxc, et donc de vos conteneur :
systemctl enable lxc
ou
update-rc.d lxc defaults
lxc.start.auto = 1
Se connecter au conteneur :
lxc-console -n MyName
pour en sortir faire ctrl+a puis q
Arrêter un conteneur :
lxc-stop -n MyName
Mettre en pause un conteneur :
lxc-freeze -n MyName
Sortir de pause un conteneur :
lxc-unfreeze -n MyName
Détruire un conteneur :
lxc-destroy -n MyName
Lister les conteneurs :
lxc-ls
Afficher l’état (démarré/arrêté/en pause) et l’IP de tous les conteneurs :
lxc-ls --fancy
ou
lxc-ls -f
Afficher des informations sur un conteneur :
lxc-info -n MyName
Purger le cache d’une image :
/usr/share/lxc/templates/lxc-debian --clean