Linux Containers (LXC) zijn een lichtgewicht virtualisatietechnologie en ze kunnen op verschillende manieren worden gebruikt. Het maakt deel uit van de Linux-kernel en kan je een of meerdere Linux-distributies laten emuleren op een enkele Linux-host. Zie het als een middenweg tussen een chroot en volledige virtualisatietechnologieën zoals VirtualBox, KVM of Xen. Een vergelijkbare technologie die aanwezig is in de BSD-wereld zijn FreeBSD Jails.
De machine waarop ik schrijf, is bijvoorbeeld een laptop met Linux Mint 18, aangedreven door een Intel Atom-processor en een magere 2 GB RAM. Toch draai ik drie Linux-containers, elk met een instantie van de Apache-webserver, zonder een grote prestatiehit. Dit zou ondenkbaar zijn met een traditionele virtuele machine zoals VirtualBox. Dus als je meerdere distributies op je Linux-systeem wilt draaien, zou Linux Containers het werk prima voor je moeten doen.
Linux-containers installeren en configureren
We zijn LXC aan het opzetten op Linux Mint 18 64-bit. De installatie-instructies die hier worden gegeven, werken ook ongewijzigd op Ubuntu 16.04 en hoger. Als je een andere distro gebruikt, raadpleeg dan de officiële documentatie van je distro als iets niet werkt zoals verwacht. Bekendheid met de opdrachtregel en algemene probleemoplossing wordt ook verondersteld.
Vereisten
Hier zijn een paar dingen die u moet instellen om meerdere distributies te gaan gebruiken:
1. Installeer LXC en andere vereiste software met behulp van:
[sourcecode] sudo apt install lxc lxc-templates uidmap [/ sourcecode]
2. Nu moet je configureer uw profiel. Voer de volgende opdrachten in om het in te stellen:
[broncode] mkdir -p ~ / .config / lxc
echo "lxc.id_map = u 0 100000 65536" & amp; amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.id_map = g 0 100000 65536" & amp; amp; amp; gt;& amp; amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.network.type = veth" & amp; amp; amp; gt;& amp; amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.network.link = lxcbr0" & amp; amp; amp; gt;& amp; amp; amp; gt; ~ / .config / lxc / default.conf
echo "$ USER veth lxcbr0 2" | sudo tee -a / etc / lxc / lxc-usernet [/ sourcecode]
3. Dan moet u stel de gebruikersrechten in als volgt:
[broncode] sudo usermod -add-subuids 100000-165536 $ USER
sudo usermod -add-subgids 100000-165536 $ USER
sudo cgm maak alle gebruikers aan
sudo cgm chown alle gebruiker $ (id -u) $ (id -g)
cgm movepid alle gebruiker $$ [/ sourcecode]
Uw container opzetten
Nu LXC Container samen met andere vereiste software is geïnstalleerd, volgen hier de stappen om de container in te stellen:
1. In dit voorbeeld, we zullen een Ubuntu-container opzetten, genaamd ubu1
. Om dit te doen, voert u de volgende opdracht uit:
[broncode] lxc-create -template download -naam ubu1 [/ broncode]
2. Hier, de -sjabloon
parameter vertelt lxc naar downloaden een voorgeconfigureerde afbeelding van internet, Terwijl de -naam
parameter specificeert de naam van de container - ubu1
in dit geval. U kunt elke gewenste naam gebruiken.
3. U ziet nu een lijst met ondersteunde distro-afbeeldingen
4. Voer de details van de distributie in die u wilt installeren. Ik zal de 64-bits versie van Ubuntu 16.04 (codenaam xenial) hier installeren:
5. Als u dat wilt installeer de afbeelding niet-interactief, het volgende commando geeft hetzelfde resultaat als het bovenstaande:
[broncode] lxc-create -t download -n ubu1 - -dist ubuntu -release xenial -arch amd64 [/ broncode]
6. LXC zal nu een minimale Ubuntu xenial-image downloaden en installeren op uw hostsysteem. Het downloaden en installeren kan enige tijd duren, afhankelijk van uw internetverbinding en de snelheid van uw pc. Na de installatie, je ziet een scherm als dit:
U bent nu klaar om uw nieuw ingestelde Ubuntu-container te gebruiken.
Meerdere distro's gebruiken met Linux-containers
De container opstarten
Start uw container met behulp van de lxc-start
opdracht:
[broncode] lxc-start -n ubu1 -d [/ broncode]
Hier de -n
parameter specificeert de naam van de container dat je wilt starten (ubu1
in dit geval), en de -d
parameter laat het op de achtergrond draaien.
U kunt controleren of de container is gestart door het lxc-ls
opdracht:
[broncode] lxc-ls -f [/ broncode]
De -f
parameter maakt het mogelijk luxe rapportage. Hier kun je zien dat ik het heb twee containers - een Debian (gestopt) en een Ubuntu (actief).
Toegang tot en gebruik van uw container
Jij kan toegang tot de console van de container de ... gebruiken lxc-attach
opdracht:
[broncode] lxc-attach -n ubu1 [/ broncode]
Je hebt nu een root shell op uw container. Het wordt aanbevolen dat u een wachtwoord instelt voor de rootgebruiker, en maak een gewoon gebruikersaccount aan
[broncode] wachtwoord
adduser beebom [/ broncode]
Vervang natuurlijk beebom met de gewenste gebruikersnaam. U kunt dan software installeren en uw container configureren zoals u dat op een normaal systeem zou doen. Bijvoorbeeld in een Debian- of Ubuntu-container:
[sourcecode] apt install wget openssh-server htop tmux nano iptables [/ sourcecode]
Uw container stoppen
Nadat je klaar bent met spelen met de container, gebruik je de Uitgang
opdracht om terug te keren naar het hostsysteem. Gebruik nu de lxc-stop
opdracht om uw container te stoppen
[broncode] lxc-stop -n ubu1 [/ broncode]
Hierdoor wordt de container netjes afgesloten en verbruikt hij geen bronnen meer op uw systeem, behalve schijfruimte.
Klonen en momentopnamen
Klonen
Als je eenmaal programma's in een container hebt geïnstalleerd en deze naar wens hebt geconfigureerd, wil je dat misschien maak er een of meerdere kopieën van voor gemakkelijke bevoorrading. U kunt dit doen door een kloon, dat is een exacte replica van een container.
Om bijvoorbeeld een kloon van de ubu1
container (laten we het noemen ubu2
, stop eerst de container gebruik makend van lxc-stop
, gebruik dan de lxc-kopie
opdracht:
[broncode] lxc-stop -n ubu1
lxc-copy -n ubu1 -N ubu2 [/ broncode]
Hier de -n optie specificeert de broncontainer, en de -De N-optie specificeert de naam van de kloon. Naar verifiëren dat de container is gekloond, gebruikt u de lxc-ls
opdracht:
Momentopnamen
Stel dat u op het punt staat een aantal potentieel gevaarlijke of moeilijk te herstellen wijzigingen aan een container aan te brengen, zoals het opnieuw configureren van een webserver. Om de schade te minimaliseren, kunt u een momentopname van de container maken voordat u een dergelijke wijziging aanbrengt. Als er iets misgaat tijdens de configuratie, kunt u de container gewoon stoppen en terugzetten naar de vorige werkende staat door een snapshot te herstellen.
Om de momentopname te maken, eerst stop de container
[broncode] lxc-stop -n ubu1 [/ broncode]
Dan, maak een momentopname de ... gebruiken lxc-snapshot
opdracht:
[broncode] lxc-snapshot -n ubu1 [/ broncode]
Dit creëert een snapshot genaamd snap0
. Alle volgende snapshots die u met deze opdracht maakt, worden aangeroepen snap1, snap2, enz.
Hierna kunt u begin de container en breng de gewenste wijzigingen aan. Als u op enig moment wilt terugkeren naar een momentopname die u hebt gemaakt, hou op de container en gebruik de lxc-snapshot
commando met de -r
parameter naar herstel een momentopname
[broncode] lxc-snapshot -r snap0 -n ubu1 [/ broncode]
Dit zal de momentopname herstellen snap0
naar de ubu1
container.
Start containers automatisch bij het opstarten
U kunt een container, bijvoorbeeld een webservercontainer, automatisch laten opstarten wanneer u uw systeem opstart. Ga hiervoor naar het container configuratiebestand, gevestigd in $ HOME / .local / share / lxc /
, en voeg de volgende regels toe
[broncode] lxc.start.auto = 1
lxc.start.delay = 5 [/ broncode]
De eerste regel geeft aan dat de container bij het opstarten moet worden gestart. De tweede vertelt het systeem om wacht 5 seconden voordat u de volgende container start, indien aanwezig.
Probleemoplossen
Als u problemen ondervindt bij het starten van containers, moet u eerst het lxc-start
commando in Voorgrond modus. Bijvoorbeeld:
[broncode] lxc-start -n ubu1 -F [/ broncode]
Dit zal laat je de fouten zien op de huidige consolee, wat erg handig is om de aard van het probleem te identificeren.
Problemen met het gelijktijdig uitvoeren van meerdere containers
Als u meerdere containers tegelijk probeert uit te voeren, je zou fouten kunnen zien zoals "Quota bereikt", of "Kan het geconfigureerde netwerk niet maken". Dit komt doordat u meer netwerkinterfaces gebruikt dan u is toegewezen. Jij kan verhoog het aantal netwerkbruggen dat een gebruiker kan gebruiken door de / etc / lxc / lxc-usernet
bestand als wortel. Het kan er ongeveer zo uitzien:
[broncode] # GEBRUIKERSNAAM TYPE BRUGAANTAL
beebom veth lxcbr0 5 [/ broncode]
Jij kan verander het nummer aan het einde (5 in dit voorbeeld), naar een groter aantal zoals 10. Hiermee kunt u maximaal 10 containers tegelijk laten lopen.
Andere toepassingen van Linux-containers
Linux-containers hebben verschillende toepassingen. U kunt ze bijvoorbeeld gebruiken als lichtgewicht testboxen om verschillende configuraties van een web- of databaseserver uit te testen voordat u ze naar een productieserver vastlegt. Een andere use case is om te testen hoe een applicatie draait op verschillende versies van verschillende distributies.
U kunt ze ook gebruiken om applicaties te isoleren die u niet vertrouwt - eventuele schade die een dergelijke applicatie aanricht, blijft beperkt tot zijn eigen container en heeft geen invloed op het hostsysteem. Houd er rekening mee dat hoewel het mogelijk is om GUI-applicaties in een container uit te voeren, dit veel tijd en moeite kost en daarom niet wordt aanbevolen. Als je GUI-apps in een sandbox wilt draaien, raadpleeg dan ons artikel over sandbox-apps in Linux.
ZIE OOK: 7 beste VirtualBox-alternatieven die u kunt gebruiken
Voer meerdere distro's tegelijkertijd uit met Linux-containers
Zo eindigt onze How-To over het draaien van meerdere Linux-distributies op één computer, zonder de overhead van een virtuele machine op ware grootte. Het nut van deze technologie wordt alleen beperkt door uw creativiteit, dus voel je vrij om te experimenteren en nieuwe use-cases te ontdekken. Als u problemen heeft met het opzetten van containers, stel ons dan gerust een vraag in het opmerkingengedeelte.