Razlika između inačica stranice LXC
(Nova stranica: LXC (Linux containers) skup je alata i metoda kojima se omogućuje izolacija procesa, korisnika i mreža od matičnog sustava: razina izolacije slična je virtualizacijskim tehnika...) |
m (→Dodatne opcije) |
||
Nije prikazano 17 međuinačica istog suradnika | |||
Redak 1: | Redak 1: | ||
− | LXC (Linux containers) skup je alata i metoda kojima se omogućuje izolacija procesa, korisnika | + | LXC (Linux containers) skup je alata i metoda baziranih na mogućnosti kontrolnih grupa (cgroups) [[Linux]] [[kernel]]a kojima se omogućuje izolacija procesa, korisnika, mreža i sl. od matičnog sustava: razina izolacije slična je virtualizacijskim tehnikama, ali je ograničenje u tome što sustav u spremniku/kontejneru dijeli isti kernel s matičnim sustavom, dok u usporedbi s chrootom LXC omogućuje puno veću fleksibilnost i upravljanje virtualnim resursima (ne samo datotekama). |
+ | |||
+ | == Instalacija na primjeru Fedore == | ||
+ | |||
+ | * instalacija LXC paketa (lxc, lxc-templates, dnsmasq...) | ||
+ | |||
+ | dnf install lxc lxc-templates lxc-extra | ||
+ | |||
+ | * instalacija dodatnih paketa potrebnih za ovaj vodič: | ||
+ | |||
+ | dnf install debootstrap | ||
+ | |||
+ | * podešavanje mrežnog pristupa preko systemd servisa (donekle prema [https://www.flockport.com/enable-lxc-networking-in-debian-jessie-fedora-and-others/]): lxc-net.service; za različite pristupe vidjeti [https://wiki.debian.org/LXC/SimpleBridge]; moguće je korištenje i libvirtd daemona [https://fedoraproject.org/wiki/LXC] - ali u tom slučaju potrebno je koristiti neke pretpostavljene značajke takvog pristupa (preporučljivo ukoliko se već koristi libvirtd na istom sustavu) | ||
+ | |||
+ | * u ''/etc/sysconfig/lxc'' potrebno je omogućiti LXC bridge: | ||
+ | USE_LXC_BRIDGE="true" | ||
+ | |||
+ | * nakon toga, u većini distribucija postoji već pripremljeni systemd servis koji stvara mrežni most, omogućuje ga, postavlja IP adrese u 10.0.3.0 subnetu (10.0.3.1 je adresa matičnog sustava, dok se 10.0.3.x dodjeljuju spremnicima: informacije o dodjeljenim IP-ovima dnsmasq sprema u ''/var/lib/misc/dnsmasq.lxcbr0.leases'') | ||
+ | |||
+ | systemctl enable lxc-net | ||
+ | systemctl start lxc-net | ||
+ | |||
+ | * omogućavanje opcije automatskog pokretanja LXC spremnika pri pokretanju sustava: | ||
+ | |||
+ | systemctl enable lxc | ||
+ | systemctl start lxc | ||
+ | |||
+ | * s ovim mrežnim postavom u ''/etc/lxc/default.conf'' predstoji još dodati informacije o mreži koje će uključivati svi spremnici: | ||
+ | |||
+ | lxc.network.type = veth | ||
+ | lxc.network.link = lxcbr0 | ||
+ | lxc.network.flags = up | ||
+ | lxc.network.hwaddr = 00:16:3e:xx:xx:xx | ||
+ | |||
+ | == Predlošci u LXC-u == | ||
+ | |||
+ | LXC omogućuje izradu spremnika na temelju predložaka (templates), a s paketom ''lxc-templates'' već dolazi mnogo pripremljenih (popis se može naći obično u ''/usr/share/lxc/templates/''). Postoji i ''download'' predložak preko kojeg se mogu direktno preuzeti gotove slike iz repozitorija [http://images.linuxcontainers.org/ images.linuxcontainers.org]. | ||
+ | |||
+ | Stvaranje novog spremnika iz predloška postiže se s '''lxc-create''' naredbom, npr. | ||
+ | |||
+ | lxc-create --template download --name mojspremnik | ||
+ | |||
+ | gdje je ''--template'' (ili samo ''-t'') naziv predloška iz kojeg se spremnik kreira, a ''--name'' (''-n'') je naziv tog (budućeg) spremnika. | ||
+ | |||
+ | Opcije download-predlošku, odnosno skripti, mogu se proslijediti i direktno, npr. | ||
+ | |||
+ | lxc-create --template download --name fedora23 -- --dist fedora --release 23 --arch amd64 | ||
+ | lxc-create --template download --name ubuntu_i386 -- --dist ubuntu --release precise --arch i386 | ||
+ | |||
+ | ili kraće -d, -r i -a za distribuciju, izdanje i arhitekturu. | ||
+ | |||
+ | == Osnovne naredbe == | ||
+ | |||
+ | * ''lxc-create --name imespremnika'' - naredba za stvaranje novog spremnika (obično će se spremnik stvoriti u '/var/lib/lxc' ako nije drugačije naznačeno s opcijom ''--dir'' ili s ''default.conf'') | ||
+ | * ''lxc-start --name imespremnika'' - pokreće spremnik (treba paziti na opciju --daemon/-d koja je na nekim distribucijama zadana, a na nekima ne - u pravilu se želi pokrenuti spremnik u pozadini, s --daemon) | ||
+ | * ''lxc-ls --fancy'' - popis spremnika s dodatnim informacijama, bez -f, odnosno --fancy ispisuje samo popis | ||
+ | * ''lxc-checkconfig'' - provjerava postavke sustava i kernela kako bi se ustanovilo podržava li sustav LXC spremnike | ||
+ | * ''lxc-destroy --name imespremnika'' - uklanja, odnosno briše spremnik zadanog naziva | ||
+ | * ''lxc-stop --name imespremnika'' - zaustavlja spremnik (obrnuto od lxc-start) | ||
+ | * ''lxc-attach --name imespremnika'' - ulaženje u spremnik (obično direktno kao root korisnik, ako se ne koristi ''--elevated-privileges=PRIVILEGES'') | ||
+ | * ''lxc-top'' - prikaz potrošnje resursa pokrenutih spremnika | ||
+ | * ''lxc-snapshot'' - spremanje trenutnog stanja spremnika | ||
+ | Popis svih naredbi abecednim redom: | ||
+ | lxc-attach | ||
+ | lxc-autostart | ||
+ | lxc-cgroup | ||
+ | lxc-checkconfig | ||
+ | lxc-checkpoint | ||
+ | lxc-config | ||
+ | lxc-console | ||
+ | lxc-copy | ||
+ | lxc-create | ||
+ | lxc-destroy | ||
+ | lxc-device | ||
+ | lxc-execute | ||
+ | lxc-freeze | ||
+ | lxc-info | ||
+ | lxc-ls | ||
+ | lxc-monitor | ||
+ | lxc-snapshot | ||
+ | lxc-start | ||
+ | lxc-stop | ||
+ | lxc-top | ||
+ | lxc-unfreeze | ||
+ | lxc-unshare | ||
+ | lxc-usernsexec | ||
+ | lxc-wait | ||
+ | |||
+ | == Dodatne opcije == | ||
+ | Sljedeće opcije dodaju se za svaki spremnik posebno u ''/var/lib/lxc/<imespremnika>/config'' (ili, ako se baš želi, u ''/etc/lxc/default.conf''): | ||
+ | * limitiranje broja jezgri po spremniku: | ||
+ | lxc.cgroup.cpuset.cpus = 0-1 # 2 jezgre | ||
+ | * automatski start spremnika pri pokretanju sustava: | ||
+ | lxc.start.auto = 1 | ||
+ | lxc.group = onboot | ||
+ | * dostupnost X11 servera, kao i audio i video uređaja unutar spremnika: | ||
+ | # mounts | ||
+ | # fix for X11 (non-debian-based distro) https://lists.linuxcontainers.org/pipermail/lxc-users/2015-February/008468.html | ||
+ | lxc.mount.entry = tmpfs tmp tmpfs defaults | ||
+ | lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir | ||
+ | lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir | ||
+ | lxc.mount.entry = /tmp/.X11-unix tmp/.X11-unix none bind,optional,create=dir | ||
+ | lxc.mount.entry = /dev/video0 dev/video0 none bind,optional,create=file | ||
+ | |||
+ | * dopuštenje pristupu USB uređaju iz LXC-a (npr. web kamera na /dev/video0): | ||
+ | lxc.cgroup.devices.allow=c 81:0 rwm | ||
+ | |||
+ | == Dodatno: podešavanje firewalld-a (CentOS) == | ||
+ | |||
+ | firewall-cmd --direct --passthrough ipv4 -I FORWARD -i lxcbr0 -j ACCEPT | ||
+ | firewall-cmd --direct --passthrough ipv4 -I FORWARD -o lxcbr0 -j ACCEPT | ||
+ | |||
+ | == Reference / Dodatni materijali == | ||
+ | * [https://www.flockport.com/lxc-guide/ Flockport.com - LXC Guide] | ||
+ | * [https://www.flockport.com/run-gui-apps-in-lxc-containers/ Flockport.com - Run GUI apps in LXC containers] | ||
+ | * [http://superuser.com/questions/990855/configure-firewalld-to-allow-bridged-virtual-machine-network-access Postavke Firewalld-a za mrežni most] | ||
+ | * [https://wiki.gentoo.org/wiki/LXC#Unprivileged_containers Gentoo Wiki - LXC Unprivileged containers] |
Trenutačna izmjena od 19:33, 5. listopada 2016.
LXC (Linux containers) skup je alata i metoda baziranih na mogućnosti kontrolnih grupa (cgroups) Linux kernela kojima se omogućuje izolacija procesa, korisnika, mreža i sl. od matičnog sustava: razina izolacije slična je virtualizacijskim tehnikama, ali je ograničenje u tome što sustav u spremniku/kontejneru dijeli isti kernel s matičnim sustavom, dok u usporedbi s chrootom LXC omogućuje puno veću fleksibilnost i upravljanje virtualnim resursima (ne samo datotekama).
Sadržaj
Instalacija na primjeru Fedore
- instalacija LXC paketa (lxc, lxc-templates, dnsmasq...)
dnf install lxc lxc-templates lxc-extra
- instalacija dodatnih paketa potrebnih za ovaj vodič:
dnf install debootstrap
- podešavanje mrežnog pristupa preko systemd servisa (donekle prema [1]): lxc-net.service; za različite pristupe vidjeti [2]; moguće je korištenje i libvirtd daemona [3] - ali u tom slučaju potrebno je koristiti neke pretpostavljene značajke takvog pristupa (preporučljivo ukoliko se već koristi libvirtd na istom sustavu)
- u /etc/sysconfig/lxc potrebno je omogućiti LXC bridge:
USE_LXC_BRIDGE="true"
- nakon toga, u većini distribucija postoji već pripremljeni systemd servis koji stvara mrežni most, omogućuje ga, postavlja IP adrese u 10.0.3.0 subnetu (10.0.3.1 je adresa matičnog sustava, dok se 10.0.3.x dodjeljuju spremnicima: informacije o dodjeljenim IP-ovima dnsmasq sprema u /var/lib/misc/dnsmasq.lxcbr0.leases)
systemctl enable lxc-net systemctl start lxc-net
- omogućavanje opcije automatskog pokretanja LXC spremnika pri pokretanju sustava:
systemctl enable lxc systemctl start lxc
- s ovim mrežnim postavom u /etc/lxc/default.conf predstoji još dodati informacije o mreži koje će uključivati svi spremnici:
lxc.network.type = veth lxc.network.link = lxcbr0 lxc.network.flags = up lxc.network.hwaddr = 00:16:3e:xx:xx:xx
Predlošci u LXC-u
LXC omogućuje izradu spremnika na temelju predložaka (templates), a s paketom lxc-templates već dolazi mnogo pripremljenih (popis se može naći obično u /usr/share/lxc/templates/). Postoji i download predložak preko kojeg se mogu direktno preuzeti gotove slike iz repozitorija images.linuxcontainers.org.
Stvaranje novog spremnika iz predloška postiže se s lxc-create naredbom, npr.
lxc-create --template download --name mojspremnik
gdje je --template (ili samo -t) naziv predloška iz kojeg se spremnik kreira, a --name (-n) je naziv tog (budućeg) spremnika.
Opcije download-predlošku, odnosno skripti, mogu se proslijediti i direktno, npr.
lxc-create --template download --name fedora23 -- --dist fedora --release 23 --arch amd64 lxc-create --template download --name ubuntu_i386 -- --dist ubuntu --release precise --arch i386
ili kraće -d, -r i -a za distribuciju, izdanje i arhitekturu.
Osnovne naredbe
- lxc-create --name imespremnika - naredba za stvaranje novog spremnika (obično će se spremnik stvoriti u '/var/lib/lxc' ako nije drugačije naznačeno s opcijom --dir ili s default.conf)
- lxc-start --name imespremnika - pokreće spremnik (treba paziti na opciju --daemon/-d koja je na nekim distribucijama zadana, a na nekima ne - u pravilu se želi pokrenuti spremnik u pozadini, s --daemon)
- lxc-ls --fancy - popis spremnika s dodatnim informacijama, bez -f, odnosno --fancy ispisuje samo popis
- lxc-checkconfig - provjerava postavke sustava i kernela kako bi se ustanovilo podržava li sustav LXC spremnike
- lxc-destroy --name imespremnika - uklanja, odnosno briše spremnik zadanog naziva
- lxc-stop --name imespremnika - zaustavlja spremnik (obrnuto od lxc-start)
- lxc-attach --name imespremnika - ulaženje u spremnik (obično direktno kao root korisnik, ako se ne koristi --elevated-privileges=PRIVILEGES)
- lxc-top - prikaz potrošnje resursa pokrenutih spremnika
- lxc-snapshot - spremanje trenutnog stanja spremnika
Popis svih naredbi abecednim redom:
lxc-attach lxc-autostart lxc-cgroup lxc-checkconfig lxc-checkpoint lxc-config lxc-console lxc-copy lxc-create lxc-destroy lxc-device lxc-execute lxc-freeze lxc-info lxc-ls lxc-monitor lxc-snapshot lxc-start lxc-stop lxc-top lxc-unfreeze lxc-unshare lxc-usernsexec lxc-wait
Dodatne opcije
Sljedeće opcije dodaju se za svaki spremnik posebno u /var/lib/lxc/<imespremnika>/config (ili, ako se baš želi, u /etc/lxc/default.conf):
- limitiranje broja jezgri po spremniku:
lxc.cgroup.cpuset.cpus = 0-1 # 2 jezgre
- automatski start spremnika pri pokretanju sustava:
lxc.start.auto = 1 lxc.group = onboot
- dostupnost X11 servera, kao i audio i video uređaja unutar spremnika:
# mounts # fix for X11 (non-debian-based distro) https://lists.linuxcontainers.org/pipermail/lxc-users/2015-February/008468.html lxc.mount.entry = tmpfs tmp tmpfs defaults lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir lxc.mount.entry = /tmp/.X11-unix tmp/.X11-unix none bind,optional,create=dir lxc.mount.entry = /dev/video0 dev/video0 none bind,optional,create=file
- dopuštenje pristupu USB uređaju iz LXC-a (npr. web kamera na /dev/video0):
lxc.cgroup.devices.allow=c 81:0 rwm
Dodatno: podešavanje firewalld-a (CentOS)
firewall-cmd --direct --passthrough ipv4 -I FORWARD -i lxcbr0 -j ACCEPT firewall-cmd --direct --passthrough ipv4 -I FORWARD -o lxcbr0 -j ACCEPT