Linux Containers (LXC) er en letvægts virtualiseringsteknologi, og de har forskellige anvendelser. Det er en del af Linux-kernen, og kan lade dig efterligne en eller flere Linux-distroer på en enkelt Linux-vært. Tænk på det som en mellemplads mellem en chroot og fuld virtualiseringsteknologier som VirtualBox, KVM eller Xen. En lignende teknologi til stede i BSD verden er FreeBSD Jails.
For eksempel er den maskine, jeg skriver på, en bærbar computer, der kører Linux Mint 18, der drives af en Intel Atom-processor, og har en beskeden 2 GB RAM. Jeg kører dog tre Linux-containere, hver med en forekomst af Apache webserveren kører uden et stort præstations hit. Dette ville være utænkeligt med en traditionel virtuel maskine som VirtualBox. Så hvis du har lyst til at køre flere distroer på dit Linux-system, skal Linux Containers gøre jobbet for dig helt fint.
Installation og konfiguration af Linux Containere
Vi opretter LXC på Linux Mint 18 64-bit. Installationsinstruktionerne, der leveres her, fungerer også uændret på Ubuntu 16.04 og derover. Hvis du bruger en anden distro, skal du henvende dig til din distros officielle dokumentation, hvis noget ikke virker som forventet. En fortrolighed med kommandolinjen og generel fejlfinding antages også.
Forudsætninger
Her er et par ting, du bør oprette for at begynde at bruge flere distroer:
1. Installer LXC og anden forudsætnings software ved hjælp af:
[sourcecode] sudo apt install lxc lxc-skabeloner uidmap [/ sourcecode]
2. Nu skal du konfigurere din profil . Indtast følgende kommandoer for at konfigurere det:
[kildekode] mkdir -p ~ / .config / lxc
ekko "lxc.id_map = u 0 100000 65536" & amp; gt; gt; ~ / .Config / LXC / default.conf
ekko "lxc.id_map = g 0 100000 65536" & amp; gt; amp; amp; gt; ~ / .Config / LXC / default.conf
ekko "lxc.network.type = veth" & amp; gt; amp; amp; gt; ~ / .Config / LXC / default.conf
ekko "lxc.network.link = lxcbr0" & amp; gt; amp; amp; gt; ~ / .Config / LXC / default.conf
ekko "$ USER veth lxcbr0 2" | sudo tee -a / etc / lxc / lxc-usernet [/ sourcecode]
3. Derefter skal du oprette brugerrettigheder som følger:
[kildekode] sudo usermod -add-subuids 100000-165536 $ USER
sudo usermod -add-subgids 100000-165536 $ USER
sudo cgm oprette alle brugere
sudo cgm chown alle bruger $ (id -u) $ (id -g)
cgm movepid alle brugere $$ [/ sourcecode]
Opsætning af din container
Nu, hvor du har LXC Container installeret sammen med anden forudsætnings software, er det her skridtene til at konfigurere Containeren:
1. I dette eksempel opretter vi en Ubuntu-beholder med navnet ubu1
. For at gøre det, udfør følgende kommando:
[kildekode] lxc-create -template download -name ubu1 [/ sourcecode]
2. Her fortæller parameteren -template lxc at downloade et forkonfigureret billede fra internettet, mens parameternavnet angiver containerens navn - ubu1
i dette tilfælde. Du kan bruge hvilket navn du kan lide.
3. Du vil nu se en liste over understøttede distro-billeder :
4. Indtast specifikationerne for den distribution, du vil installere. Jeg installerer 64-bit versionen af Ubuntu 16.04 (codename xenial) her:
5. Hvis du ønsker at installere billedet ikke-interaktivt, opnår følgende kommando det samme resultat som ovenstående:
[kildekode] lxc-create -t download -n ubu1 - -dist ubuntu -release xenial -arch amd64 [/ sourcecode]
6. LXC vil nu downloade og installere et minimalt Ubuntu xenialbillede på dit værtssystem. Download og installation kan tage lidt tid afhængigt af din internetforbindelse og din pcs hastighed. Efter installationen vil du se en skærm som denne:
Du er nu klar til at bruge din nyoprettede Ubuntu-beholder.
Brug af flere distroer med Linux Containere
Start af beholderen
Start din container ved hjælp af kommandoen lxc-start
:
[kildekode] lxc-start -n ubu1 -d [/ sourcecode]
Her angiver -n
parameter navnet på den beholder, du ønsker at starte ( ubu1
i dette tilfælde), og parameteren -d
gør det kørende i baggrunden .
Du kan kontrollere, at containeren startede ved at bruge kommandoen lxc-ls
:
[kildekode] lxc-ls -f [/ kildekode]
-f
parameteren gør det muligt at rapportere. Her kan du se, at jeg har to containere - en Debian (stoppet) og en Ubuntu (kører).
Adgang til og brug af din container
Du kan få adgang til containerens konsol ved hjælp af kommandoen lxc-attach
:
[kildekode] lxc-attach -n ubu1 [/ sourcecode]
Du vil nu have en rodskal på din container. Det anbefales, at du opretter en adgangskode til rodbrugeren og opretter en almindelig brugerkonto :
[Kildekode] passwd
adduser beebom [/ sourcecode]
Selvfølgelig skal du erstatte beebom med det brugernavn, du ønsker. Du kan derefter installere software og konfigurere din container som du ville gøre på et almindeligt system. For eksempel i en Debian eller Ubuntu container:
[sourcecode] apt install wget openssh-server htop tmux nano iptables [/ sourcecode]
Stop din container
Når du er færdig med at spille med beholderen, skal du enten bruge exit
kommandoen til at vende tilbage til værtssystemet . Brug nu lxc-stop
kommandoen til at stoppe din container :
[kildekode] lxc-stop -n ubu1 [/ sourcecode]
Dette vil gøre beholderen lukket rent og det vil ikke forbruge flere ressourcer på dit system, undtagen diskplads.
Kloning og snapshots
Kloner
Når du har installeret programmer i en container og konfigureret det til din smag, vil du måske gerne oprette en eller flere kopier af den for nem provision. Du kan gøre dette ved at oprette en klon, som er en nøjagtig kopi af en beholder.
For eksempel at oprette en klon af ubu1
beholderen (lad os kalde det ubu2
), skal du først stoppe beholderen ved hjælp af lxc-stop
og derefter bruge kommandoen lxc-copy
:
[kildekode] lxc-stop -n ubu
lxc-copy-n ubu1 -N ubu2 [/ sourcecode]
Her angiver -n-indstillingen kildebeholderen, og -N-indstillingen angiver klonens navn . For at kontrollere, at containeren blev klonet, skal du bruge kommandoen lxc-ls
:
snapshots
Antag at du er ved at gøre nogle potentielt farlige eller svære at komme sig fra ændringer til en container, som f.eks. Genkonfiguration af en webserver. For at minimere skaden kan du oprette et øjebliksbillede af beholderen, inden du foretager en sådan ændring. Hvis noget går galt under konfigurationen, kan du bare stoppe beholderen og genoprette den til sin tidligere arbejdstilstand ved at genoprette et øjebliksbillede.
For at oprette øjebliksbillede skal du først stoppe beholderen :
[kildekode] lxc-stop -n ubu1 [/ sourcecode]
Derefter oprette et øjebliksbillede ved hjælp af kommandoen lxc-snapshot
:
[kildekode] lxc-snapshot -n ubu1 [/ sourcecode]
Dette skaber et øjebliksbillede kaldet snap0
. Eventuelle efterfølgende snapshots, du opretter ved hjælp af denne kommando, hedder snap1, snap2 osv.
Herefter kan du starte beholderen og foretage de ønskede ændringer. Hvis du til enhver tid vil vende tilbage til et øjebliksbillede, du oprettede, skal du stoppe beholderen og bruge lxc-snapshot
kommandoen med parameteren -r
til at genoprette et øjebliksbillede :
[kildekode] lxc-snapshot -r snap0 -n ubu1 [/ sourcecode]
Dette vil genoprette snapshot snap0
til ubu1
beholderen.
Automatisk startbeholdere ved opstart
Du kan lave en container, f.eks. En webserverbeholder, starte automatisk, når du starter op på dit system. For at gøre dette skal du gå til containerens konfigurationsfil, som er placeret i $HOME/.local/share/lxc//config
, og tilføj følgende linjer :
[kildekode] lxc.start.auto = 1
lxc.start.delay = 5 [/ sourcecode]
Den første linje angiver, at containeren skal startes ved opstart. Den anden fortæller, at systemet skal vente 5 sekunder, før der startes den næste beholder.
Fejlfinding
Hvis du har problemer med at starte containere, er det første at forsøge at køre lxc-start
kommandoen i Foreground- tilstand. For eksempel:
[kildekode] lxc-start -n ubu1 -F [/ sourcecode]
Dette vil vise dig fejlene på den nuværende konsol e, hvilket er meget nyttigt til at identificere problemets art.
Problemer med at køre flere containere samtidigt
Hvis du forsøger at køre flere containere på én gang, kan du muligvis se fejl som "Kvota nået" eller "ikke oprettede det konfigurerede netværk". Dette skyldes, at du kører flere netværksgrænseflader end tildelt til dig. Du kan øge antallet af netværksbroer, som en bruger kan køre ved at ændre filen /etc/lxc/lxc-usernet
som root . Det kan se sådan ud:
[kildekode] # BRUGGE COUNT ANVENDELSESTYP
beebom veth lxcbr0 5 [/ sourcecode]
Du kan ændre nummeret i slutningen (5 i dette eksempel), til et større antal som 10. Dette giver dig mulighed for at køre op til 10 containere på én gang.
Andre anvendelser af Linux Containere
Linux-containere har forskellige anvendelser. Du kan bruge dem som lette testkasser, for eksempel for at afprøve forskellige konfigurationer af en web- eller databaseserver, før du forpligter dem til en produktionsserver. En anden brugssag er at teste, hvordan en applikation kører på forskellige versioner af forskellige distroer.
Du kan også bruge dem til at isolere applikationer, som du ikke stoler på. Eventuelle skader, som en sådan applikation gør, vil være begrænset til sin egen container og vil ikke påvirke værtssystemet. Bemærk, at mens det er muligt at køre GUI-applikationer i en container, tager det en betydelig tid og kræfter, og det anbefales derfor ikke. Hvis du ønsker at køre GUI-apps i en sandkasse, henvises til vores artikel om, hvordan du sandbox-apps i Linux.
Kør flere distroer samtidig med Linux Containere
Således slutter vores How-To på at køre flere Linux distros på en enkelt computer uden overhead af en fuld størrelse virtuel maskine. Nyttigheden af denne teknologi er kun begrænset af din kreativitet, så prøv at eksperimentere og find ud af nye brugssager. Hvis du har problemer med at oprette containere, er du velkommen til at stille os et spørgsmål i kommentarfeltet.