LXC nie jest systemem monolitycznym. Jest to zbiór funkcji jądra, które można wykorzystać do izolowania procesów na różne sposoby, oraz narzędzie przestrzeni użytkownika do korzystania ze wszystkich tych funkcji w celu utworzenia pełnoprawnych kontenerów. Jednak poszczególne funkcje są nadal dostępne samodzielnie, bez LXC. Co więcej, LXC nie wymaga chroota, a nawet kiedy dajesz mu chroot, możesz katalogi bind-mount z hosta do kontenera, dzieląc te konkretne drzewa katalogów między hostem a kontenerem.
Na przykład crupa są używane przez LXC do ustawiania limitów zasobów dla kontenerów. Można je jednak wykorzystać do ustawienia limitów zasobów dla grup procesów bez korzystania z narzędzi LXC. Możesz bezpośrednio manipulować /sys/fd/cgroup/memory
lub , aby umieścić proces w cgroups, które ograniczają ilość pamięci lub procesora, z którego mogą korzystać. Lub jeśli korzystasz z systemu używającego systemd
, możesz kontrolować limity pamięci dla grupy procesów przy użyciu MemoryLimit=200M
lub tym podobnych w pliku .service
dla danej usługi.
Jeśli chcesz używać LXC do łatwego zarządzania zasobami, możesz to zrobić z chroot lub bez niego. Podczas uruchamiania kontenera LXC możesz wybrać, które zasoby chcesz wyizolować; więc możesz utworzyć kontener z tylko wirtualną siecią i nic więcej; lub kontener z ograniczeniami pamięci, ale dzielący wszystko z hostem. Jedyne rzeczy, które zostaną wyizolowane, są określone w pliku konfiguracyjnym dla twojego kontenera. Na przykład lxc
zawiera kilka przykładowych definicji kontenerów, które izolują tylko sieć; dzielą partycję główną i prawie wszystko inne z hostem. Oto jak uruchomić pojemnik identyczny do systemu hosta oprócz tego, że ma interfejs sieciowy:
sudo lxc-execute -n foo -f /usr/share/doc/lxc/examples/lxc-no-netns.conf /bin/bash
jeśli chcesz niektóre pliki mają być dzielone z gospodarzem, ale nie inne, masz dwie możliwości; można użyć współużytkowanego katalogu głównego i zamontować pliki, które mają się różnić w kontenerze; lub możesz użyć chroot, ale zamontuj pliki, które chcesz udostępnić w kontenerze.
Oto przykład konfiguracji kontenera, który dzieli wszystko z hostem za wyjątkiem /home
; to zamiast wiązać-Wierzchowiec /home/me/fake-home
nad /home
w pojemniku:
lxc.mount.entry = /home/me/fake-home /home none rw,bind 0 0
Lub jeśli chcesz mieć zupełnie inny pierwiastek, ale nadal mają pewne katalogi jak /usr
można wiązać zamontować kilka katalogów w katalogu i użyj tego jako katalogu głównego systemu plików.
Masz wiele opcji i możesz wybrać izolowanie tylko jednego komponentu, więcej niż jednego lub tak wielu, jak obsługuje LXC, w zależności od Twoich potrzeb.