LXC ist kein monolithisches System. Es ist eine Sammlung von Kernel-Funktionen, mit denen Prozesse auf verschiedene Arten isoliert werden können, und ein Userspace-Tool, das alle diese Funktionen zusammen verwendet, um vollwertige Container zu erstellen. Aber die einzelnen Features sind ohne LXC noch eigenständig nutzbar. Außerdem benötigt LXC keine Chroot, und selbst wenn Sie eine Chroot geben, können Sie Verzeichnisse vom Host-System an den Container binden und diese bestimmten Verzeichnisbäume zwischen dem Host und dem Container freigeben.
Zum Beispiel werden Cgroups von LXC verwendet, um Ressourcenbeschränkungen für Container festzulegen. Sie können jedoch verwendet werden, um Ressourcengrenzen für Prozessgruppen festzulegen, ohne die LXC-Tools zu verwenden. Sie können /sys/fd/cgroup/memory
oder direkt manipulieren, um Prozesse in Cgroups zu setzen, die die Menge an Speicher oder CPU begrenzen, die sie verwenden dürfen. Wenn Sie sich auf einem System mit systemd
befinden, können Sie die Speichergrenzen für eine Gruppe von Prozessen unter Verwendung von MemoryLimit=200M
oder ähnlichem in der Datei .service
für einen bestimmten Dienst steuern.
Wenn Sie LXC verwenden möchten, um eine einfache Ressourcenverwaltung durchzuführen, können Sie dies mit oder ohne Chroot tun. Wenn Sie einen LXC-Container starten, können Sie auswählen, welche Ressourcen Sie isolieren möchten. Sie können also einen Container nur mit einem virtualisierten Netzwerk erstellen und sonst nichts; oder ein Container mit nur Speicherbeschränkungen, aber alles andere mit dem Host teilen. Die einzigen Dinge, die isoliert werden, sind diejenigen, die in der Konfigurationsdatei für Ihren Container angegeben sind. Beispiel: lxc
wird mit mehreren Beispielcontainerdefinitionen geliefert, die nur das Netzwerk isolieren. Sie teilen sich eine Root-Partition und fast alles andere mit dem Host. Hier ist, wie ein Behälter identisch mit dem Host-System ausgeführt werden, außer es keine Netzwerkschnittstelle hat:
sudo lxc-execute -n foo -f /usr/share/doc/lxc/examples/lxc-no-netns.conf /bin/bash
Wenn Sie einige Dateien mit dem Host gemeinsam genutzt werden, andere aber nicht, haben Sie zwei Möglichkeiten; Sie könnten ein gemeinsames Stammverzeichnis verwenden und die Dateien, die im Container unterschiedlich sein sollen, mounten. Oder Sie können eine Chroot verwenden, aber mounten Sie die Dateien, die Sie im Container freigeben möchten.
Hier ist zum Beispiel die Konfiguration für einen Container, der alles mit dem Host teilt, mit Ausnahme von /home
; es stattdessen binden-Halterungen /home/me/fake-home
über /home
innerhalb des Behälters:
lxc.mount.entry = /home/me/fake-home /home none rw,bind 0 0
Oder wenn Sie eine ganz andere Wurzel haben wollen, aber immer noch einige Verzeichnisse wie /usr
gemeinsam nutzen, können Sie ein paar Verzeichnisse in einem Verzeichnis montieren binden, und benutze das als Wurzel des Dateisystems.
Sie haben also viele Optionen und können je nach Bedarf nur eine Komponente, mehr als eine oder so viele wie LXC unterstützen.