
LXD je sistemski menadžer kontejnera nove generacije, kažu . Nudi korisničko sučelje slično onom za virtualne mašine, ali umjesto toga koristi Linux kontejnere.
Jezgor LXD je privilegiran demon (usluga pokrenuta s root pravima) koji pruža REST API putem lokalnog unix socketa, kao i preko mreže, ako je postavljena odgovarajuća konfiguracija. Klijenti, poput alata naredbenog retka isporučenog s LXD, šalju zahtjeve putem ovog REST API-a. To znači da, bez obzira da li se obraćate lokalnom hostu ili udaljenom, sve funkcionira na isti način.
U ovom članku nećemo detaljno razmatrati koncepte LXD, niti ćemo se baviti svim dostupnim mogućnostima izložene u dokumentaciji, uključujući nedavnu implementaciju u najnovijim verzijama LXD koja podržava QEMU virtualne mašine paralelno s kontejnerima. Umjesto toga, upoznat ćemo se samo s osnovnim mogućnostima upravljanja kontejnerima — postavit ćemo pohrambene pool-ove, mrežu, pokrenuti kontejner, primijeniti limite na resurse, kao i istražiti kako koristiti snimke, kako biste dobili osnovno razumijevanje LXD-a i koristili kontejnere u Linuxu.
Za potpune informacije trebate se obratiti službenom izvoru:
Navigacija
Instalacija LXD
Instalacija LXD na Ubuntu distribucijama
U distribuciji Ubuntu 19.10 paket lxd ima prevođenje na :
apt search lxd
lxd/eoan 1:0.7 all
Transitional package - lxd -> snap (lxd)To znači da će biti instalirana dva paketa, jedan sistemski, a drugi kao snap paket. Instalacija dva paketa u sistemu može stvoriti određeni problem, gdje sistemski paket može postati siroče ako se snap paket ukloni menadžerom snap paketa.
Pronađi paket lxd u snap repozitoriju može se sljedećom naredbom:
snap find lxd
Ime Verzija Sažetak
lxd 3.21 Menadžer sistemskih kontejnera i API
lxd-demo-server 0+git.6d54658 Online softverske demonstracijske sesije koristeći LXD
nova ocata OpenStack Compute Service (nova)
nova-hypervisor ocata OpenStack Compute Service - KVM Hypervisor (nova)
distrobuilder 1.0 Alat za izradu slika za LXC i LXD
fabrica 0.1 Izradite snapove jednostavno usmjeravajući web obrazac na...
satellite 0.1.2 Napredna skalabilna platforma za otvorene izvore obavještajnih podatakaPokretanjem naredbe list možemo se uvjeriti da paket lxd još nije instaliran:
snap list
Ime Verzija Rev Praćenje Izdavač Napomene
core 16-2.43.3 8689 stabilno canonical✓ coreIako je LXD snap paket, potrebno ga je instalirati putem sistemskog paketa lxd, koji će stvoriti odgovarajuću grupu u sistemu, potrebne alate u /usr/bin itd.
sudo apt update
sudo apt install lxdProvjerimo da li je paket instaliran kao snap paket:
snap list
Ime Verzija Rev Praćenje Izdavač Napomene
core 16-2.43.3 8689 stabilno canonical✓ core
lxd 3.21 13474 stabilno/... canonical✓ -Instalacija LXD na Arch Linux distribucijama
Da bi se instalirao LXD paket u sistemu, potrebno je izvršiti sljedeće naredbe, prva -- ažurira listu paketa dostupnih u repozitoriju, a druga -- direktno instalira paket:
sudo pacman -Syyu && sudo pacman -S lxdNakon instalacije paketa, za upravljanje LXD poput običnog korisnika, potrebno ga je dodati u sistemsku grupu lxd:
sudo usermod -a -G lxd user1Provjerimo da li je korisnik user1 dodavan u grupu lxd:
id -Gn user1
user1 adm dialout cdrom floppy sudo audio dip video plugdev netdev lxdAko grupa lxd nije vidljiva na popisu, potrebno je ponovo aktivirati sesiju korisnika. Da bi to učinili, treba se odjaviti i ponovo prijaviti u sustav kao taj isti korisnik.
Aktiviramo systemd pokretanje LXD usluge pri pokretanju sistema:
sudo systemctl enable lxdPokrećemo uslugu:
sudo systemctl start lxdProvjeravamo status usluge:
sudo systemctl status lxdPohrana LXD (Storage)
Prije nego što započnemo inicijalizaciju, moramo shvatiti kako je logički strukturirano skladište u LXD.
Skladište (Skladište) od jednog ili više Storage Pool koji koriste jedan od podržanih datotečnih sustava kao što su ZFS, BTRFS, LVM ili obične mape. Svaki Storage Pool je podijeljen na volumene (Storage Volume) koji sadrže slike, kontejnere ili podatke za druge svrhe.
- Slike — to su posebno sastavljene distribucije bez Linux jezgre i dostupne su iz vanjskih izvora
- Kontejneri — to su raspakirani distribucije iz slika, spremne za korištenje
- Trenutne snimke — to su snimke stanja kontejnera na koje se može vratiti

Za upravljanje pohranom u LXD koristi se naredba lxc storage za koju se pomoći može dobiti upisanjem ključa — lxc storage --help
Sljedeća naredba prikazuje popis svih Storage Pool u LXD pohrana:
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
| IME | OPIS | VOZAČ | IZVOR | KORIŠTEN DEO |
+---------+-------------+--------+--------------------------------+---------+
| hddpool | | btrfs | /dev/loop1 | 2 |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool | | btrfs | /var/lib/lxd/disks/ssdpool.img | 4 |
+---------+-------------+--------+--------------------------------+---------+Za pregled popisa svih Storage Volume u odabranom Storage Pool koristi se naredba lxc storage volume list:
lxc storage volume list hddpool
+-------+----------------------------------+-------------+---------+
| TIPO | IME | OPIS | KORIŠTEN DEO |
+-------+----------------------------------+-------------+---------+
| slika | ebd565585223487526ddb3607f515... | | 1 |
+-------+----------------------------------+-------------+---------+lxc storage volume list ssdpool
+-----------+----------------------------------+-------------+---------+
| TIPO | IME | OPIS | KORIŠTEN DEO |
+-----------+----------------------------------+-------------+---------+
| kontejner | alp3 | | 1 |
+-----------+----------------------------------+-------------+---------+
| kontejner | jupyter | | 1 |
+-----------+----------------------------------+-------------+---------+
| slika | ebd565585223487526ddb3607f515... | | 1 |
+-----------+----------------------------------+-------------+---------+Također, ako je za Storage Pool prilikom stvaranja odabran datotečni sustav BTRFS, popis Storage Volume ili subvolumena u interpretaciji BTRFS može se dobiti pomoću alata tog datotečnog sustava:
sudo btrfs subvolume list -p /var/lib/lxd/storage-pools/hddpool
ID 257 gen 818 parent 5 top level 5 path images/ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3sudo btrfs subvolume list -p /var/lib/lxd/storage-pools/ssdpool
ID 257 gen 1820 parent 5 top level 5 path images/ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
ID 260 gen 1819 parent 5 top level 5 path containers/jupyter
ID 263 gen 1820 parent 5 top level 5 path containers/alp3Inicijalizacija LXD
Prije stvaranja i korištenja kontejnera potrebno je izvršiti opću inicijalizaciju LXD koja stvara i postavlja mrežu, kao i pohranu. To se može izvršiti ručno uz pomoć standardnih klijentskih naredbi koje su dostupne na popisu pozivom naredbe lxc --help ili uz pomoć čarobnjaka za inicijalizaciju lxd init odgovaranjem na nekoliko pitanja.
Odabir datotečnog sustava za Pool pohrane
Tijekom inicijalizacije LXD postavlja nekoliko pitanja, među kojima je i određivanje tipa datotečnog sustava za zadani Storage Pool. Zadano se odabire datotečni sustav BTRFS. Izmjena na drugi FS nakon stvaranja neće biti moguća. Za odabir FS nudi se :
Značajka
Direktorij
Btrfs
LVM
ZFS
CEPH
Optimizirano pohranjivanje slika
no
da
da
da
da
Optimizirano stvaranje instanci
no
da
da
da
da
Optimizirano stvaranje snimaka
no
da
da
da
da
Optimizirani prijenos slika
no
da
no
da
da
Optimizirani prijenos instanci
no
da
no
da
da
Kopiranje pri pisanju
no
da
da
da
da
Na temelju blokova
no
no
da
no
da
Instantno kloniranje
no
da
da
da
da
Upravljač pohrane upotrebljiv unutar kontejnera
da
da
no
no
no
Obnova iz starijih snimaka (ne najnovijih)
da
da
da
no
da
Kvota za pohranu
da(*)
da
da
da
no
Inicijalizacija mreže i Pool pohrane putem čarobnjaka
Sljedeća komanda koju ćemo razmotriti nudi konfiguriranje osnovnih komponenti LXD odgovorima na jednostavna pitanja putem čarobnjaka za inicijalizaciju.
Pokrenite naredbu lxc init i unesite odgovore na pitanja nakon znaka dvotočke kako je prikazano u primjeru ispod ili ih izmijenite prema vašim uvjetima:
lxd init
Želite li koristiti LXD klasteriranje? (da/ne) [zadano=ne]:
Želite li konfigurirati novu pohranu? (da/ne) [zadano=da]:
Ime nove pohrane [zadano=default]: ssdpool
Ime sustava pohrane koji želite koristiti (lvm, btrfs, dir) [zadano=btrfs]:
Želite li stvoriti novi BTRFS bazen? (da/ne) [zadano=da]:
Želite li koristiti postojeći blok uređaj? (da/ne) [zadano=ne]:
Veličina novog loop uređaja u GB (minimalno 1GB) [zadano=15GB]: 10GB
Želite li se povezati s MAAS poslužiteljem? (da/ne) [zadano=ne]:
Želite li stvoriti novi lokalni mrežni most? (da/ne) [zadano=da]:
Kako želite nazvati novi most? [zadano=lxdbr0]:
Koja IPv4 adresa treba biti korištena? (CIDR subnet notacija, “auto” ili “none”) [zadano=auto]: 10.0.5.1/24
Želite li da LXD NAT-ira IPv4 promet na vašem mostu? [zadano=da]:
Koja IPv6 adresa treba biti korištena? (CIDR subnet notacija, “auto” ili “none”) [zadano=auto]: none
Želite li da LXD bude dostupan putem mreže? (da/ne) [zadano=ne]:
Želite li da zastarjele predmemorirane slike budu automatski ažurirane? (da/ne) [zadano=da] ne
Želite li da se ispiše YAML "lxd init" predkontekst? (da/ne) [zadano=ne]: Kreiranje dodatnog Pool-a pohrane
U prethodnom koraku stvorili smo Storage Pool kojima smo dali naziv ssdpool i datoteka se nalazi na mom sustavu na adresi /var/lib/lxd/disks/ssdpool.img. Ova adresa datotečnog sustava odgovara fizičkom SSD disku u mom PC-u.
Sljedećim radnjama, kako bismo proširili razumijevanje o ulozi Storage Pool u pohrani, stvorit ćemo drugi Storage Pool koji će se fizički nalaziti na drugom tipu diska, na HDD-u. Problem je u tome što LXD ne dopušta stvaranje Storage Pool izvan adrese /var/lib/lxd/disks/ i čak simboličke veze neće raditi, . Ova ograničenja mogu se zaobići prilikom inicijalizacije/formata Storage Pool navodeći vrijednost kao blok uređaj umjesto puta do loopback-datoteke navodeći to u ključnoj source.
Dakle, do stvaranja Storage Pool potrebno je odrediti loopback datoteku ili postojeći odjeljak u vašem datotečnom sustavu koji će se koristiti. U tu svrhu, stvorit ćemo i koristiti datoteku čiju veličinu ograničavamo na 10 GB:
dd if=\/dev\/zero of=\/mnt\/work\/lxd\/hddpool.img bs=1MB count=10000
10000+0 records in
10000+0 records out
10000000000 bytes (10 GB, 9,3 GiB) copied, 38,4414 s, 260 MB\/sPovezujemo loopback datoteku na slobodni loopback uređaj:
sudo losetup --find --show \/mnt\/work\/lxd\/hddpool.img
\/dev\/loop1Zahvaljujući ključu --show , izvršavanje naredbe prikazuje ime uređaja na koje je povezana naša loopback datoteka. Ako je potrebno, možemo ispisati popis svih zauzetih uređaja ovog tipa kako bismo provjerili ispravnost naših radnji:
losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
\/dev\/loop1 0 0 0 0 \/mnt\/work\/lxd\/hddpool.img 0 512
\/dev\/loop0 0 0 1 0 \/var\/lib\/lxd\/disks\/ssdpool.img 0 512Na popisu možemo otkriti da je na uređaju /dev/loop1 povezana loopback datoteka /mnt/work/lxd/hddpool.img, a na uređaju /dev/loop0 povezana loopback datoteka /var/lib/lxd/disks/ssdpool.img koji odgovara zadanoj postavci Storage Pool.
Sljedeća naredba stvara novi Storage Pool u LXD-u na temelju upravo pripremljene loopback datoteke. LXD će formatirati loopback datoteku /mnt/work/lxd/hddpool.img na uređaju /dev/loop1 u BTRFS datotečni sustav:
lxc storage create hddpool btrfs size=10GB source=\/dev\/loop1Ispisat ćemo popis svih Storage Pool na zaslon:
lxc storage list
+---------+-------------+--------+--------------------------------+---------+
| NAME | DESCRIPTION | DRIVER | SOURCE | USED BY |
+---------+-------------+--------+--------------------------------+---------+
| hddpool | | btrfs | \/dev\/loop1 | 0 |
+---------+-------------+--------+--------------------------------+---------+
| ssdpool | | btrfs | \/var\/lib\/lxd\/disks\/ssdpool.img | 0 |
+---------+-------------+--------+--------------------------------+---------+Povećanje veličine Pool-a pohrane
Nakon stvaranja Storage Pool, ako je potrebno, može se proširiti. Za Storage Pool temeljenu na BTRFS datotečnom sustavu izvršite sljedeće naredbe:
sudo truncate -s +5G \/mnt\/work\/lxd\/hddpool.img
sudo losetup -c \/dev\/loop1
sudo btrfs filesystem resize max \/var\/lib\/lxd\/storage-pools\/hddpoolAutomatsko umetanje loopback datoteke u slot loopback uređaja
Imamo jedan mali problem, prilikom ponovnog pokretanja sustava domaćina, datoteka /mnt/work/lxd/hddpool.img "izgubit će se" s uređaja /dev/loop1 i usluga LXD će se srušiti prilikom pokretanja jer je neće vidjeti na tom uređaju. Za rješavanje ovog problema potrebno je stvoriti sustavsku uslugu koja će umetnuti ovu datoteku u uređaj /dev/loop1 prilikom pokretanja sustava domaćina.
Stvorit ćemo unit datoteku tipa usluga u /etc/systemd/system/ za sustav inicijalizacije SystemD:
cat << EOF | sudo tee -a \/etc\/systemd\/system\/lxd-hddpool.service
[Unit]
Description=Losetup LXD Storage Pool (hddpool)
After=local-fs.target
[Service]
Type=oneshot
ExecStart=\/sbin\/losetup \/dev\/loop1 \/mnt\/work\/lxd\/hddpool.img
RemainAfterExit=true
[Install]
WantedBy=local-fs.target
EOFAktiviramo uslugu:
sudo systemctl enable lxd-hddpool
Stvorena je simbolička poveznica /etc/systemd/system/local-fs.target.wants/lxd-hddpool.service → /etc/systemd/system/lxd-hddpool.service.Nakon ponovnog pokretanja host sustava provjeravamo status usluge:
systemctl status lxd-hddpool.service
● lxd-hddpool.service - Losetup LXD Storage Pool (hddpool)
Učitano: učitano (/etc/systemd/system/lxd-hddpool.service; omogućeno; zadani uvjet: onemogućeno)
Aktivno: aktivno (izašao) od Srij 2020-04-08 03:43:53 MSK; prije 1min 37s
Proces: 711 ExecStart=/sbin/losetup /dev/loop1 /mnt/work/lxd/hddpool.img (kod=izašao, status=0/U_SPJEH)
Glavni PID: 711 (kod=izašao, status=0/U_SPJEH)
08 trav 03:43:52 manjaro systemd[1]: Pokreće Losetup LXD Storage Pool (hddpool)...
08 trav 03:43:53 manjaro systemd[1]: Završen Losetup LXD Storage Pool (hddpool).Iz ispisa možemo potvrditi da je stanje usluge aktivno, unatoč tome što je izvršenje našeg skriptnog koda iz jedne naredbe završilo, ovo nam je omogućila opcija RemainAfterExit=true.
Sigurnost. Privilegije kontejnera
Budući da se svi procesi kontejnera zapravo izvršavaju u izolaciji na host sustavu koristeći njegovo jezgro, LXD nudi privilegiranost procesa za dodatnu zaštitu pristupa procesima kontejnera u sustavu host, gdje:
Privilegirani kontejneri — to su kontejneri u kojima procesi s UID i GID odgovaraju istom vlasniku kao na host sustavu. Na primjer, proces pokrenut u kontejneru s UID jednakim 0 ima sve iste pristupne privilegije kao i proces host sustava s UID jednakim 0. Drugim riječima, root korisnik u kontejneru ima sve privilegije ne samo u kontejneru, već i na host sustavu ako može izaći iz izoliranog imenskog prostora kontejnera.
Nepprivilegirani kontejneri — to su kontejneri u kojima procesi pripadaju vlasniku UID i GID iz raspona od 0 do 65535, ali za host sustav vlasnik se maskira pomoću dodanog bita SubUID i SubGID odgovarajuće. Na primjer, korisnik s UID=0 u kontejneru će biti zabilježen na host sustavu kao
SubUID + UID. To štiti host sustav jer, ako neki proces u kontejneru uspije izaći iz svog izoliranog imenskog prostora, može komunicirati s host sustavom samo kao proces s nepoznatim, vrlo visokim UID/GID.
Zadano, novi kontejneri imaju status neprivilegiranih, pa moramo definirati SubUID i SubGID.
Stvorit ćemo dva konfiguracijska datoteke u kojima ćemo postaviti masku za SubUID i SubGID:
sudo touch /etc{/subuid,/subgid}
sudo usermod --add-subuids 1000000-1065535 root
sudo usermod --add-subgids 1000000-1065535 rootDa bi se promjene primijenile, servis LXD mora biti ponovno pokrenut:
sudo systemctl restart lxdKreiranje virtualnog mrežnog preklopnika
Budući da smo ranije inicijalizirali mrežu pomoću čarobnjaka za inicijalizaciju lxd init i stvorili mrežni uređaj lxdbr0, u ovom dijelu ćemo se samo upoznati s mrežom u LXD i s tim kako stvoriti virtualni prekidač (mrežni most, bridge) pomoću klijentske komande.
Sljedeća shema prikazuje kako prekidač (mrežni most, bridge) povezuje host i kontejnere u mrežu:

Kontejneri mogu komunicirati putem mreže s drugim kontejnerima ili hostom na kojem se ti kontejneri nalaze. Da bi to funkcioniralo, potrebno je povezati virtualne mrežne kartice kontejnera s virtualnim prekidačem. Prvo ćemo stvoriti prekidač, a mrežni sučelja kontejnera će biti povezana u sljedećim poglavljima, nakon što se sam kontejner stvori.
Sljedeća komanda stvara prekidač s podsjetnikom 10.0.5.0/24 i IPv4 adresom 10.0.5.1/24, kao i uključuje ipv4.nat tako da kontejneri mogu dobiti pristup internetu putem hosta koristeći uslugu NAT:
lxc network create lxdbr0 ipv4.address=10.0.5.1/24 ipv4.nat=true ipv6.address=noneProvjeravamo popis mrežnih uređaja dostupnih LXD:
lxc network list
+--------+----------+---------+-------------+---------+
| NAME | TYPE | MANAGED | DESCRIPTION | USED BY |
+--------+----------+---------+-------------+---------+
| eno1 | physical | NO | | 0 |
+--------+----------+---------+-------------+---------+
| lxdbr0 | bridge | YES | | 0 |
+--------+----------+---------+-------------+---------+Također, provjeru postojanja mrežnog uređaja možemo izvršiti putem standardnog alata Linux-distribucije — ip link ili ip addr:
ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno1: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether bc:ee:7b:5a:6b:44 brd ff:ff:ff:ff:ff:ff
altname enp0s25
inet6 fe80::9571:11f3:6e0c:c07b/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: lxdbr0: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether c2:38:90:df:cb:59 brd ff:ff:ff:ff:ff:ff
inet 10.0.5.1/24 scope global lxdbr0
valid_lft forever preferred_lft forever
inet6 fe80::c038:90ff:fedf:cb59/64 scope link
valid_lft forever preferred_lft forever
5: veth3ddab174@if4: mtu 1500 qdisc noqueue master lxdbr0 state UP group default qlen 1000
link/ether ca:c3:5c:1d:22:26 brd ff:ff:ff:ff:ff:ff link-netnsid 0Konfiguracijski profil
Svaki kontejner u LXD ima svoju vlastitu konfiguraciju i može je proširiti pomoću globalno deklariranih konfiguracija koje se nazivaju profili konfiguracije. Primjena profila konfiguracije na kontejner ima kaskadni model, sljedeći primjer to demonstrira:

U ovom primjeru, u sustavu LXD stvorena su tri profila: default, hddpool i hostfs. Sva tri profila su primijenjena na kontejner koji ima lokalnu konfiguraciju (siva zona). Profil default ima uređaj root čiji je parametar pool je ssdpool, ali zahvaljujući kaskadnom modelu primjene konfiguracije možemo primijeniti za kontejner profil hddpool čiji je parametar pool koji će preklopiti taj isti parametar iz profila default i kontejner će dobiti konfiguraciju uređaja root s parametrom pool jednakim hddpool, a profil hostfs samo dodaje novi uređaj u kontejner.
Kako bi se vidio popis dostupnih profila konfiguracije služi sljedeća naredba:
lxc profile list
+---------+---------+
| NAME | USED BY |
+---------+---------+
| default | 1 |
+---------+---------+
| hddroot | 0 |
+---------+---------+
| ssdroot | 1 |
+---------+---------+Potpuni popis dostupnih naredbi za rad s profilom može se dobiti dodavanjem ključa --help:
lxc profile --help
Description:
Upravljaj profilima
Usage:
lxc profile [command]
Available Commands:
add Dodaj profile instancama
assign Dodijeli skupove profila instancama
copy Kopiraj profile
create Stvori profile
delete Izbriši profile
device Upravljaj uređajima instanci
edit Uredi konfiguracije profila kao YAML
get Dobij vrijednosti za ključeve konfiguracije profila
list Prikaži profile
remove Ukloni profile iz instanci
rename Preimenuj profile
set Postavi ključeve konfiguracije profila
show Prikaži konfiguracije profila
unset Ukloni ključeve konfiguracije profilaUređivanje profila
Profil konfiguracije prema zadanim postavkama default nema konfiguraciju mrežnog adaptera za kontejner i svi novo kreirani kontejneri nemaju mrežu, za njih je potrebno stvoriti lokalne (izdvojene) portove mreže odvojeno naredbom, ali možemo stvoriti u profilu konfiguracije globalni mrežni uređaj koji će biti dijeljen između svih kontejnera koji koriste taj profil. Tako će odmah nakon naredbe za stvaranje novog kontejnera imati mrežu s pristupom u mrežu. Pritom, nema ograničenja, uvijek možemo kasnije stvoriti lokalni mrežni uređaj ako za tim bude potrebe.
Sljedeća naredba će dodati u profil konfiguracije uređaj eth0 vrste nic priključenog na mrežu lxdbr0:
lxc profile device add default eth0 nic network=lxdbr0 name=eth0Važno je napomenuti da, s obzirom na to da smo zapravo dodali uređaj u konfiguracijski profil, ako bismo u uređaju naveli statičku IP adresu, svi kontejneri koji budu koristili taj profil dijelit će istu IP adresu. Ako postoji potreba za stvaranjem kontejnera s odvojenom statičkom IP adresom, tada treba stvoriti konfiguraciju mrežnog uređaja na razini kontejnera (lokalna konfiguracija) s parametrom IP adrese, a ne na razini profila.
Provjerimo profil:
lxc profile show default
config: {}
description: Default LXD profile
devices:
eth0:
name: eth0
network: lxdbr0
type: nic
root:
path: \/
pool: ssdpool
type: disk
name: default
used_by: []U ovom profilu možemo vidjeti da će za sve novo stvorene kontejnere biti stvorena dva uređaja (devices):
eth0— Uređaj tipanicspojen na prekidač (mrežni most)lxdbr0root— Uređaj tipadiskkoji koristi spremišni bazenssdpool
Kreiranje novih profila
Za korištenje ranije stvorenih Storage Pool kontejnere, stvorit ćemo konfiguracijski profil ssdroot u koji ćemo dodati uređaj tipa disk s točkom montiranja / (root) koristeći ranije stvorene Storage Pool — ssdpool:
lxc profile create ssdroot
lxc profile device add ssdroot root disk path=\/ pool=ssdpoolSlično tome, stvaramo uređaj tipa disk, ali u ovom slučaju koristi Storage Pool — hddpool:
lxc profile create hddroot
lxc profile device add hddroot root disk path=\/ pool=hddpoolProvjeravamo konfiguracijske profile:
lxc profile show ssdroot
config: {}
description: ""
devices:
root:
path: \/
pool: ssdpool
type: disk
name: ssdroot
used_by: []lxc profile show hddroot
config: {}
description: ""
devices:
root:
path: /\
pool: hddpool
type: disk
name: hddroot
used_by: []Repozitorij slika
Kontejneri se stvaraju iz slika koje predstavljaju posebno sakupljene distribucije bez Linux kernela. Stoga, prije nego što pokrenemo kontejner, on mora biti raspoređen iz te slike. Izvor slika je lokalni repozitorij u koji se slike učitavaju iz vanjskih repozitorija.
Udaljeni repozitoriji slika
Po defaultu, LXD je postavljen za primanje slika iz tri daljinska izvora:
- ubuntu: (za stabilne Ubuntu slike)
- ubuntu-daily: (za dnevne Ubuntu slike)
- images: (za mnoštvo drugih distribucija)
lxc remote list
+-----------------+------------------------------------------+--------+--------+
| NAME | URL | PUBLIC | STATIC |
+-----------------+------------------------------------------+--------+--------+
| images | https://images.linuxcontainers.org | DA | NE |
+-----------------+------------------------------------------+--------+--------+
| local (default) | unix:// | NE | DA |
+-----------------+------------------------------------------+--------+--------+
| ubuntu | https://cloud-images.ubuntu.com/releases | DA | DA |
+-----------------+------------------------------------------+--------+--------+
| ubuntu-daily | https://cloud-images.ubuntu.com/daily | DA | DA |
+-----------------+------------------------------------------+--------+--------+Na primjer, repozitorij ubuntu: ima sljedeće slike:
lxc image -c dasut list ubuntu: | head -n 11
+----------------------------------------------+--------------+----------+------------+
| OPIS | ARHITEKTURA | VELIČINA| TIP |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (izdanje) (20150728) | x86_64 | 153.72MB | KONTAINER |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (izdanje) (20150819) | x86_64 | 152.91MB | KONTAINER |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (izdanje) (20150906) | x86_64 | 154.69MB | KONTAINER |
+----------------------------------------------+--------------+----------+------------+
| ubuntu 12.04 LTS amd64 (izdanje) (20150930) | x86_64 | 153.86MB | KONTAINER |
+----------------------------------------------+--------------+----------+------------+Kako bismo prikazali ograničen broj kolona, koristili smo opciju -c s parametrima dasut, a također smo ograničili dužinu popisa pomoću komande head.
Za prikaz popisa slika dostupna je filtracija. Sljedeća komanda će prikazati popis svih dostupnih arhitektura distribucije :
lxc image -c ldast list images:alpine/3.11
+------------------------------+--------------------------------------+--------------+
| ALIAS | OPIS | ARHITEKTURA |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11 (3 više) | Alpine 3.11 amd64 (20200220_13:00) | x86_64 |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/arm64 (1 više) | Alpine 3.11 arm64 (20200220_13:00) | aarch64 |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/armhf (1 više) | Alpine 3.11 armhf (20200220_13:00) | armv7l |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/i386 (1 više) | Alpine 3.11 i386 (20200220_13:01) | i686 |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/ppc64el (1 više) | Alpine 3.11 ppc64el (20200220_13:00) | ppc64le |
+------------------------------+--------------------------------------+--------------+
| alpine/3.11/s390x (1 više) | Alpine 3.11 s390x (20200220_13:00) | s390x |
+------------------------------+--------------------------------------+--------------+Lokalni repozitorij slika
Za početak korištenja kontejnera potrebno je dodati sliku iz globalnog repozitorija u lokalni local:. Sada je lokalni repozitorij prazan, što potvrđuje naredba lxc image list. Ako se metodi list ne navede repozitorij, prema zadanim postavkama koristit će se lokalni repozitorij — local:
lxc image list local:
+-------+-------------+--------+-------------+--------------+------+------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE |
+-------+-------------+--------+-------------+--------------+------+------+Upravljanje slikama u repozitoriju provodi se sljedećim metodama:
Komanda
Opis
lxc image alias
Upravljaj aliasima slika
lxc image copy
Kopiraj slike između poslužitelja
lxc image izbriši
Obriši slike
lxc image edit
Uredi svojstva slika
lxc image export
Izvezi i preuzmi slike
lxc image uvoz
Uvezi slike u skladište slika
lxc image info
Prikaži korisne informacije o slikama
lxc image list
Popis slika
lxc image osvježi
Osvježi slike
lxc image prikaži
Prikaži svojstva slike
Kopiramo sliku u lokalni repozitorij iz globalnog images::
lxc image copy images:alpine/3.11/amd64 local: --alias=alpine3
Slika je uspješno kopirana!Ispišimo popis svih slika dostupnih sada u lokalnom repozitoriju local::
lxc image -c lfdatsu list local:
+---------+--------------+------------------------------------+--------------+
| ALIAS | FINGERPRINT | DESCRIPTION | ARCHITECTURE |
+---------+--------------+------------------------------------+--------------+
| alpine3 | 73a3093d4a5c | Alpine 3.11 amd64 (20200220_13:00) | x86_64 |
+---------+--------------+------------------------------------+--------------+Konfiguracija LXD-a
Osim interaktivnog moda, LXD također podržava neinteraktivni način postavljanja konfiguracije, što znači da se konfiguracija postavlja u obliku YAML datoteke, posebnog formata koji omogućava postavljanje cijele konfiguracije odjednom, zaobilazeći izvedbu mnogih interaktivnih naredbi koje su obrađene gore u ovom članku, uključujući konfiguraciju mreže, stvaranje profila konfiguracije itd. Ovdje nećemo razmatrati ovo područje, možete se s time upoznati .
Sljedeća interaktivna naredba lxc config koju ćemo razmotriti, omogućava postavljanje konfiguracije. Na primjer, kako bi se preuzete slike u lokalni repozitorij ne ažurirale automatski iz globalnih repozitorija, možemo omogućiti ovo ponašanje sljedećom naredbom:
lxc config set images.auto_update_cached=falseKreiranje i upravljanje kontejnerom
Za stvaranje kontejnera koristi se naredba lxc init kojom se prosljeđuju vrijednosti repozitrij:slika i zatim željeni identifikator za kontejner. Repo biti može navedeno kao lokalno local: tako i bilo koji globalni. Ako repozitorij nije naveden, lokalni repozitorij se koristi prema zadanim postavkama za pretraživanje slike. Ako je slika navedena iz globalnog repozitorija, prvo će se slika preuzeti u lokalni repozitorij, a zatim koristiti za stvaranje kontejnera.
Izvršimo sljedeću naredbu kako bismo stvorili naš prvi kontejner:
lxc init alpine3 alp --storage=hddpool --profile=default --profile=hddrootRazmotrit ćemo redom ključeve naredbe koje ovdje koristimo:
alpine3— Navodi se alias (pseudonim) za sliku koja je prethodno preuzeta u lokalni repozitorij. Ako alias nije bio stvoren za ovu sliku, uvijek se može pozvati na sliku po njenom Fingerprint koji se ispisuje u tablici.alp— Postavlja se identifikator za kontejner--storage— Ovaj ključ ukazuje u kojem Storage Pool će biti stvoren kontejner--profile— Ovi ključevi kaskadno primjenjuju konfiguraciju na kontejner iz prethodno stvorenih profila konfiguracije
Pokrećemo kontejner koji započinje pokretanje init sustava distribucije:
lxc start alpTakođer, možemo iskoristiti naredbu lxc launch koja omogućuje spajanje naredbi lxc init i lxc start u jednu operaciju.
Provjeravamo stanje kontejnera:
lxc list -c ns46tb
+------+---------+------------------+------+-----------+--------------+
| NAME | STATE | IPV4 | IPV6 | TYPE | STORAGE POOL |
+------+---------+------------------+------+-----------+--------------+
| alp | RUNNING | 10.0.5.46 (eth0) | | CONTAINER | hddpool |
+------+---------+------------------+------+-----------+--------------+Provjeravamo konfiguraciju kontejnera:
lxc config show alp
architecture: x86_64
config:
image.architecture: amd64
image.description: Alpine 3.11 amd64 (20200326_13:39)
image.os: Alpine
image.release: "3.11"
image.serial: "20200326_13:39"
image.type: squashfs
volatile.base_image: ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
volatile.eth0.host_name: vethb1fe71d8
volatile.eth0.hwaddr: 00:16:3e:5f:73:3e
volatile.idmap.base: "0"
volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.last_state.power: RUNNING
devices:
root:
path: \/
pool: hddpool
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""U odjeljku profiles možemo se uvjeriti da ovaj kontejner koristi dva profila konfiguracije — default i hddroot. U odjeljku devices možemo otkriti samo jedan uređaj, budući da je mrežni uređaj stvoren na razini profila default. Da biste vidjeli sve uređaje koje kontejner koristi, potrebno je dodati ključ --expanded:
lxc config show alp --expanded
architecture: x86_64
config:
image.architecture: amd64
image.description: Alpine 3.11 amd64 (20200326_13:39)
image.os: Alpine
image.release: "3.11"
image.serial: "20200326_13:39"
image.type: squashfs
volatile.base_image: ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
volatile.eth0.host_name: vethb1fe71d8
volatile.eth0.hwaddr: 00:16:3e:5f:73:3e
volatile.idmap.base: "0"
volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.last_state.power: RUNNING
devices:
eth0:
name: eth0
network: lxdbr0
type: nic
root:
path: \/
pool: hddpool
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""Postavljanje statičke IP adrese
Ako pokušamo postaviti IP adresu za mrežni uređaj eth0 komandom lxc config device set alp namijenjenu za konfiguraciju kontejnera, dobit ćemo grešku koja će nam reći da uređaj ne postoji jer uređaj eth0 koji koristi kontejner pripada profilu default:
lxc config device set alp eth0 ipv4.address 10.0.5.5
Error: The device doesn't existNaravno, možemo postaviti statičku IP adresu za eth0 uređaj u profilu, ali ona će biti jedinstvena za sve kontejnere koji koriste ovaj profil. Stoga, dodajmo izdvojen uređaj za kontejner:
lxc config device add alp eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5Nakon toga, potrebno je restartati kontejner:
lxc restart alpAko sada pogledamo na konfiguraciju kontejnera, ne trebamo primjenjivati opciju --expanded da bismo vidjeli mrežni uređaj eth0, jer smo ga kreirali na razini kontejnera i on je kaskadno prikrio isti uređaj iz profila. default:
lxc config show alp
architecture: x86_64
config:
image.architecture: amd64
image.description: Alpine 3.11 amd64 (20200326_13:39)
image.os: Alpine
image.release: "3.11"
image.serial: "20200326_13:39"
image.type: squashfs
volatile.base_image: ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
volatile.eth0.host_name: veth2a1dc59d
volatile.eth0.hwaddr: 00:16:3e:0e:e2:71
volatile.idmap.base: "0"
volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":65536}]'
volatile.last_state.power: RUNNING
devices:
eth0:
ipv4.address: 10.0.5.5
name: eth0
nictype: bridged
parent: lxdbr0
type: nic
root:
path: \/
pool: hddpool
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""Brisanje kontejnera
Za brisanje kontejnera koristi se komanda lxc delete, ali prije nego što obrišemo kontejner, on mora biti zaustavljen pomoću komande lxc stop:
lxc stop alplxc list
+------+---------+-------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+---------+-------------------+------+-----------+-----------+
| alp | STOPPED | 10.0.5.10 (eth0) | | KONTAINER | 0 |
+------+---------+-------------------+------+-----------+-----------+Nakon što smo se uvjerili da je stanje kontejnera STOPPED, može se obrisati iz Storage Pool:
lxc delete alpPristup kontejneru
Za izvođenje komandi unutar kontejnera, direktno, bez mrežnih veza, koristi se komanda lxc exec koja izvršava komande unutar kontejnera bez pokretanja sistemske ljuske. Ako trebate izvršiti komandu unutar ljuske, koristeći shell obrasce, kao što su varijable, preusmjeravanja fajlova (pipe) itd., tada treba eksplicitno pokrenuti ljusku i proslijediti komandu kao ključ, na primjer:
lxc exec alp -- \/bin\/sh -c "echo $HOME"U komandi je korišten specijalni simbol za escaping za specijalni simbol $ tako da varijabla $HOME nije interpretirana na host mašini, već isključivo unutar kontejnera.
Također, moguće je pokrenuti interaktivni režim ljuske, a nakon završetka sesije izvršiti hotkey CTRL+D:
lxc exec alp -- \/bin\/shUpravljanje resursima kontejnera
U LXD-u možete upravljati resursima kontejnera pomoću posebnog skupa konfiguracije. Potpuni popis konfiguracijskih parametara kontejnera možete pronaći .
Ograničenje resursa RAM-a (OS)
Parametar limits.memory ograničava količinu RAM-a dostupnog za kontejner. Kao vrijednost se navodi broj i jedan od .
Postavimo kontejneru ograničenje na količinu RAM-a od 256 MB:
lxc config set alp limits.memory 256MBTakođer, postoje i drugi parametri za ograničavanje memorije:
limits.memory.enforcelimits.memory.hugepageslimits.memory.swaplimits.memory.swap.priority
Komanda lxc config show omogućuje prikaz svih konfiguracija kontejnera, uključujući primjenjeno ograničenje resursa koje je postavljeno:
lxc config show alp
architecture: x86_64
config:
image.architecture: amd64
image.description: Alpine 3.11 amd64 (20200220_13:00)
image.os: Alpine
image.release: "3.11"
image.serial: "20200220_13:00"
image.type: squashfs
limits.memory: 256MB
volatile.base_image: 73a3093d4a5ce0148fd84b95369b3fbecd19a537ddfd2e2d20caa2eef0e8fd60
volatile.eth0.host_name: veth75b6df07
volatile.eth0.hwaddr: 00:16:3e:a1:e7:46
volatile.idmap.base: "0"
volatile.idmap.current: '[]'
volatile.idmap.next: '[]'
volatile.last_state.idmap: '[]'
volatile.last_state.power: RUNNING
devices: {}
ephemeral: false
profiles:
- default
stateful: false
description: ""Ograničenje resursa CPU-a (JP)
Za ograničavanje resursa CPU postoji nekoliko :
limit.cpu— vezuje kontejner za jedno ili više CPU jezgrilimits.cpu.allowance— upravlja ili kvotama CFS scheduler-a kada je vrijeme ograničeno, ili univerzalnim mehanizmom dijeljenja resursa CPU kada je prošlo postotaklimits.cpu.priority— prioritet scheduler-a kada je više instanci, koje dijele skup procesora, dobilo isti postotak procesora
lxc config set alp limits.cpu.allowance 40%lxc config show alp
architecture: x86_64
config:
image.architecture: amd64
image.description: Alpine 3.11 amd64 (20200220_13:00)
image.os: Alpine
image.release: "3.11"
image.serial: "20200220_13:00"
image.type: squashfs
limits.cpu.allowance: 40%
limits.memory: 256MB
volatile.base_image: 73a3093d4a5ce0148fd84b95369b3fbecd19a537ddfd2e2d20caa2eef0e8fd60
volatile.eth0.host_name: veth75b6df07
volatile.eth0.hwaddr: 00:16:3e:a1:e7:46
volatile.idmap.base: "0"
volatile.idmap.current: '[]'
volatile.idmap.next: '[]'
volatile.last_state.idmap: '[]'
volatile.last_state.power: RUNNING
devices: {}
ephemeral: false
profiles:
- default
stateful: false
description: ""Ograničenje prostora na disku
Osim ograničenja poput limits.read, limits.write također možemo ograničiti količinu diska koje kontejner može koristiti (radi samo s ZFS ili BTRFS):
lxc config device set alp root size=2GBNakon postavljanja, u parametru devices.root.size možemo provjeriti postavljene granice:
lxc config show alp
...
devices:
root:
path: \/
pool: hddpool
size: 2GB
type: disk
ephemeral: false
profiles:
- default
- hddroot
stateful: false
description: ""Za pregled korištenih diskovnih kvota možemo dobiti iz komande lxc info:
lxc info alp
...
Resources:
Processes: 5
Disk usage:
root: 1.05GB
CPU usage:
CPU usage (in seconds): 1
Memory usage:
Memory (current): 5.46MB
Network usage:
eth0:
Bytes received: 802B
Bytes sent: 1.59kB
Packets received: 4
Packets sent: 14
lo:
Bytes received: 0B
Bytes sent: 0B
Packets received: 0
Packets sent: 0Unatoč tome što smo postavili ograničenje za korijenski uređaj kontejnera na 2GB, sistemski alati kao što su df neće vidjeti ovo ograničenje. U tu svrhu ćemo provesti mali test i otkriti kako to radi.
Stvorit ćemo 2 nova identična kontejnera u istom Storage Pool (hddpool):
lxc init alpine3 alp1 --storage=hddpool --profile=default --profile=hddroot
lxc init alpine3 alp2 --storage=hddpool --profile=default --profile=hddrootlxc list
+------+---------+------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+---------+------------------+------+-----------+-----------+
| alp1 | RUNNING | 10.0.5.46 (eth0) | | CONTAINER | 0 |
+------+---------+------------------+------+-----------+-----------+
| alp2 | RUNNING | 10.0.5.30 (eth0) | | CONTAINER | 0 |
+------+---------+------------------+------+-----------+-----------+U jednom od kontejnera stvorit ćemo datoteku veličine 1GB:
lxc exec alp1 -- dd if=\/dev\/urandom of=file.img bs=1M count=1000Provjerimo je li datoteka stvorena:
lxc exec alp1 -- ls -lh
total 1000M
-rw-r--r-- 1 root root 1000.0M Mar 27 10:16 file.imgAko pogledamo u drugom kontejneru, provjerit ćemo postoji li datoteka na istom mjestu, neće je biti, što je očekivano, jer se kontejneri stvaraju unutar svojih vlastitih Storage Volume u ovom istom Storage Pool:
lxc exec alp2 -- ls -lh
total 0Ali hajde da uporedimo vrijednosti koje daju df u jednom i drugom kontejneru:
lxc exec alp1 -- df -hT
Filesystem Type Size Used Available Use% Mounted on
\/dev\/loop1 btrfs 9.3G 1016.4M 7.8G 11% \/
...lxc exec alp2 -- df -hT
Filesystem Type Size Used Available Use% Mounted on
\/dev\/loop1 btrfs 9.3G 1016.4M 7.8G 11% \/
...Uređaj /dev/loop1 montiran kao korijenski razdjel je Storage Pool koji ovi kontejneri koriste, stoga dijele njegov volumen na obojici.
Statistika potrošnje resursa
Statistiku potrošnje resursa za kontejner možete pogledati pomoću naredbe:
lxc info alp
Name: alp
Location: none
Remote: unix:\/
Architecture: x86_64
Created: 2020\/04\/08 18:05 UTC
Status: Running
Type: container
Profiles: default, hddroot
Pid: 19219
Ips:
eth0: inet 10.0.5.5 veth2a1dc59d
eth0: inet6 fe80::216:3eff:fe0e:e271 veth2a1dc59d
lo: inet 127.0.0.1
lo: inet6 ::1
Resources:
Processes: 5
Disk usage:
root: 495.62kB
CPU usage:
CPU usage (in seconds): 1
Memory usage:
Memory (current): 4.79MB
Network usage:
eth0:
Bytes received: 730B
Bytes sent: 1.59kB
Packets received: 3
Packets sent: 14
lo:
Bytes received: 0B
Bytes sent: 0B
Packets received: 0
Packets sent: 0Rad sa snimkama
U LXD postoji mogućnost stvaranja snimaka i vraćanja iz njih stanja kontejnera.
Da biste stvorili snimak, izvršite sljedeću naredbu:
lxc snapshot alp snapshot1Naredba lxc snapshot nema ključ list, stoga, da biste pogledali popis snimaka, potrebno je koristiti naredbu koja prikazuje opće informacije o kontejneru:
lxc info alp
...
...
Snimke:
snapshot1 (snimljen 2020/04/08 u 18:18 UTC) (bez stanja)Obnovite kontejner iz snimke naredbom lxc restore navodeći kontejner za koji će se izvršiti obnova i nadimak snimke:
lxc restore alp snapshot1Sljedeća naredba služi za brisanje snimke. Imajte na umu da sintaksa ove naredbe nije slična ostalima; ovdje je potrebno navesti kosi crticu nakon imena kontejnera. Ako se kosi znak izostavi, naredba za brisanje snimke će se interpretirati kao naredba za brisanje kontejnera!
lxc delete alp/snapshot1U gornjem primjeru razmatrali smo tzv. snimke bez stanja. U LXD postoji i druga vrsta snimaka — snimke sa stanjem, u kojima se čuva trenutno stanje svih procesa unutar kontejnera. Sa snimcima sa stanjem povezane su brojne zanimljive i korisne funkcije.
Šta još?
- Za Python programere dostupan je modul koji pruža API za LXD
AŽURIRANJE 10.04.2020 15:00: Dodana navigacija
Izvor: habr.com
