LXC - to pojemniki Linuksowe (ang. LinuX Containers) pozwalające tworzyć wirtualne środowiska pracy korzystające z tego samego jądra co system gospodarza.
Instalujemy następujące pakiety wraz z zależnościami:
sudo apt install lxc lxctl libvirt-bin
Sprawdzamy, czy mamy włączone w jądrze grupy kontroli:
$ lxc-checkconfig
W wynikach powyższego polecenia powinniśmy otrzymać zawartość podobną do tej:
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-4.4.0-57-generic
--- 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
Bridges: enabled
Advanced netfilter: enabled
CONFIG_NF_NAT_IPV4: enabled
CONFIG_NF_NAT_IPV6: enabled
CONFIG_IP_NF_TARGET_MASQUERADE: enabled
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled
FUSE (for use with lxcfs): enabled
--- Checkpoint/Restore ---
checkpoint restore: enabled
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities: enabled
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
Utworzenie pojemnika o nazwie ubuntu_lxc z system Ubuntu w tej samej wersji co ta zainstaowana na komputerze gospodarza:
sudo lxc-create -n ubuntu_lxc -t ubuntu
Opcja -n określa nazwę nadaną tworzonemu pojemnikowi, opcja -t określa szablon (powyżej szablon dla systemu Ubuntu)
na podstawie, którego torzymy pojemnik (dostępne szablony znajdują się w katalogu: /usr/share/lxc/templates).
Utworzenie pojemnika o nazwie trusty_lxc z system Ubuntu 14.04 (Trusty Tahr) w architekturze 64-bitowej:
sudo lxc-create -n trusty_lxc -t ubuntu -- -r trusty -a amd64
Po opcji -r podajemy nazwę wydania (--release np. trusty) a po opcji -a architekturę (np. amd64).
Wyświetlenie istniejących pojemników:
sudo lxc-ls
Uruchomienie pojemnika o podanej nazwie:
sudo lxc-start -n ubuntu_lxc -d
Wyświetlenie informacji o podanym pojemniku (m.in. czy jest on uruchomiony):
sudo lxc-info -n ubuntu_lxc
Zatrzymanie pojemnika o podanej nazwie:
sudo lxc-stop -n ubuntu_lxc
Po uruchomieniu pojemnika można się podłączyć do jego shella za pomocą następującego polecenia:
sudo lxc-console -n ubuntu_lxc
Uwaga! Powyższe polecenie początkowo może wyświetlić tylko następującą zawartość:
Connected to tty 1
Type to exit the console, to enter Ctrl+a itself
i nie będzie można zalogować się do shella. W takim razie należy się upewnić, że adres IP pojemnika
(wyświetlany przez komendę lxc-info) nie jest blokowany przez firewalla.
Domyślne dane do zalogowania się do shella pojemnika dla systemu Ubuntu, to:
login: ubuntu
hasło: ubuntu
Dane te są wyświetlane na końcu procesu tworzenia pojemnika.
Po zakończeniu pracy w shellu pojemnika możemy się wylogować za pomocą <Ctrl+D>
i nacisnąć kombinację <Ctrl+a q>, żeby opuścić konsolę pojemnika.
Klonowanie pojemnika, klonowany pojemnik musi być zatrzymany:
sudo lxc-clone -o nazwa_pojemnika_do_sklonowania -n nazwa_nowego_pojemnika
Usuwanie pojemnika:
sudo lxc-destroy -n nazwa_pojemnika
Zamrożenie pojemnika:
sudo lxc-freeze -n nazwa_pojemnika
Wznowienie działania pojemnika:
sudo lxc-unfreeze -n nazwa_pojemnika
Wyświetlenie wszystkich aktywnych pojemników:
sudo lxc-ls --active
Wyświetlenie wszystkich zatrzymanych pojemników:
sudo lxc-ls --stopped
Wyświetlenie adresu IP pojemnika:
sudo lxc-info -i -n nazwa_pojemnika
Wyświetlenie PID-u procesu pojemnika:
sudo lxc-info -p -n nazwa_pojemnika
Uruchomienie aplikacji w pojemniku:
sudo lxc-attach -n nazwa_pojemnika --polecenie
np. aktualizacja pojemnika:
sudo lxc-attach -n ubuntu_lxc -- apt-get -qq update
lub sprawdzenie czy uruchomiona jest usługa ssh:
sudo lxc-attach -n ubuntu_lxc -- apt-get -qq -y upgradesudo lxc-attach -n ubuntu_lxc -- systemctl status sshd.service
Czeka aż pojemnik o podanej nazwie znajdzie się w stanie RUNNING (uruchomiony):
sudo lxc-wait -n ubuntu_lxc -s 'RUNNING'
Czeka aż pojemnik o podanej nazwie znajdzie się w stanie STOPPED (zatrzymany):
sudo lxc-wait -n ubuntu_lxc -s 'STOPPED'