The LXC package combines these Linux kernel mechanisms to provide a userspace container object, a lightweight virtual system with full resource isolation and resource control for an application or a system.
Linux Containers take a completely different approach than system virtualization technologies such as KVM and Xen, which started by booting separate virtual systems on emulated hardware and then attempted to lower their overhead via paravirtualization and related mechanisms. Instead of retrofitting efficiency onto full isolation, LXC started out with an efficient mechanism (existing Linux process management) and added isolation, resulting in a system virtualization mechanism as scalable and portable as chroot, capable of simultaneously supporting thousands of emulated systems on a single server while also providing lightweight virtualization options to routers and smart phones.
Kurz gesagt, LXC verwendet den Kernel und die Ressourcen des Host-Systems und stellt diese dem “Gast” zur Verfügung. Es wird kein “PC / Hardware” emuliert, wie das z.B. bei Virtual Box der Fall ist. Der Vorteil von LXC ist unter anderem, dass die Ressourcen optimal ausgenutzt werden, Nachteil ist, dass nur Linux unterstützt wird. Wer Windows benötigt, der muss auf eine Virtualisierungslösung (Virtual Box / VMware) zurück greifen.
LXC unterstützt grundsätzlich zwei unterschiedliche Arten der Virtualisierung:
1) Anwendung
2) Betriebssystem
Bei einer “Anwendung Virtualisierung” wird nur die Anwendung im “Container” ausgeführt “sudo lxc-execute -n CONTAINERNAME /bin/bash”, auf diese Funktion werde ich nicht weiter eingehen. Ich habe einige Zeit gebraucht, um zu verstehen, wie das geht und was damit nicht geht.
Bei einem Betriebssystem sieht das ganz anders aus, hier wird das gesamte System gestartet und kann wie eine “normale” VM behandelt werden. Über den Befehl:
sudo lxc-create -t ubuntu -n CN
wird ein Ubuntu Container mit dem Namen “CN” erstellt. Alle notwendigen Programme sind in diesem Container enthalten. Dieser Container verhält sich wie ein eigenes Ubuntu System, welches kaum Ressourcen benötigt und sehr schnell ist. Diesen Container verwende ich für Testinstallationen / Serverkonfigurationen und Tests von Scripts.
Nachtrag: Templates (installiert) gibt es für folgende Systeme
/usr/lib/lxc/templates/lxc-busybox
/usr/lib/lxc/templates/lxc-debian
/usr/lib/lxc/templates/lxc-fedora
/usr/lib/lxc/templates/lxc-opensuse
/usr/lib/lxc/templates/lxc-sshd
/usr/lib/lxc/templates/lxc-ubuntu
/usr/lib/lxc/templates/lxc-ubuntu-cloud
Installation von LXC:
sudo apt-get install lxc
Das war’s auch schon eigentlich braucht man nicht mehr, die Befehle zum Erstellen/ Starten/ Stoppen/ Pause/ Löschen etc. werden im Terminal ausgeführt.
Ich habe noch zusätzlich folgendes installiert:
sudo apt-get install libvirt-bin
sudo apt-get install virt-manager
Über den Virt-Manager können LXC Container (Anwendung / Betriebssystem) angelegt und verwaltet werden (Start, Stop etc. und Ressourcen CPU, Ram etc.). Über diese GUI kann allerdings kein Betriebssystem Container erzeugt werden, das muss per Hand gemacht werden (sudo lxc-create -t ubuntu -n CN). Der Container befindet sich dann unter /var/lib/lxc/CN. Das Filesystem, was bei der Einrichtung im Virt-Manager angegeben werden muss ist dann /var/lib/lxc/CN/rootfs
Die Einrichtung mit dem Virt-Manager geht dann wie folgt vor sich:
(Hier Beispiel Einstellungen CN)

Fertig, der Ubuntu Container kann verwendet werden. Ein X-System ist nicht drauf installiert, dann muss man bei Bedarf selber machen (nicht zu empfehlen). Ich verwende mehrere Container für die Software Entwicklung und Tests.
1) N-00 Apache, PHP, Tools
2) N-02 Ruby, Rails, lighttpd
3) D-01 mysql, SQLite
4) T-01 Tsung Injector 01
5) T-01 Tsung Injector 02
Alle 5 Container laufen gleichzeitig auf meinem Macbook Pro ohne Probleme. Bei extremen Lasttests mit Tsung, geht der Rechner in die Knie, gut für Grenzlast Tests.





Muss die CPU das unterstützen wie bei KVM?
Hallo lightonflux,
nein muss sie nicht, LXC läuft auch auf alten CPU. LXC stellt nur einen Container zur Verfügung, in dem ein OS auf dem bereits vorhandenen Kernel, Ressourcen und Filesystem läuft.
Bei einer Virtualisierung muss der gesamte Rechner nebst Hardware emuliert werden, was eine entsprechende CPU erfordert.