Aanbevolen, 2023

Editor'S Choice

Meerdere Distros gelijktijdig uitvoeren met Linux-containers

Linux Containers (LXC) zijn een lichtgewicht virtualisatietechnologie en kunnen op verschillende manieren worden gebruikt. Het maakt deel uit van de Linux-kernel en kan je een of meerdere Linux-distro's 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 in de BSD-wereld is FreeBSD Jails.

Bijvoorbeeld, de machine waar ik op schrijf is een laptop met Linux Mint 18, aangedreven door een Intel Atom-processor, en heeft een schamele 2 GB RAM. Maar toch, ik draai drie Linux-containers, elk met een exemplaar van de Apache-webserver die draait, zonder een grote prestatieshit. Dit zou ondenkbaar zijn met een traditionele virtuele machine zoals VirtualBox. Dus als je meerdere distro's op je Linux-systeem wilt uitvoeren, zou Linux Containers het werk voor je prima moeten doen.

Linux-containers installeren en configureren

We zetten LXC op Linux Mint 18 64-bit. De installatie-instructies die hier worden gegeven, werken ook ongewijzigd op Ubuntu 16.04 en hoger. Als u een andere distro gebruikt, raadpleegt u de officiële documentatie van uw distro als iets niet werkt zoals verwacht. Een bekendheid met de opdrachtregel en algemene probleemoplossing wordt ook verondersteld.

voorwaarden

Hier zijn een paar dingen die u moet instellen om meerdere distributies te gebruiken:

1. Installeer LXC en andere vereiste software met behulp van:

[sourcecode] sudo apt install lxc lxc-templates uidmap [/ sourcecode]

2. Nu moet je je profiel configureren . Voer de volgende opdrachten in om het in te stellen:

[sourcecode] mkdir -p ~ / .config / lxc
echo "lxc.id_map = u 0 100000 65536" & amp; amp; gt; ~ / .Config / LXC / default.conf
echo "lxc.id_map = g 0 100000 65536" & amp; gt; & amp; amp; gt; ~ / .Config / LXC / default.conf
echo "lxc.network.type = veth" & amp; gt; & amp; amp; gt; ~ / .Config / LXC / default.conf
echo "lxc.network.link = lxcbr0" & amp; gt; & amp; amp; gt; ~ / .Config / LXC / default.conf
echo "$ USER veth lxcbr0 2" | sudo tee -a / etc / lxc / lxc-usernet [/ sourcecode]

3. Vervolgens moet u de gebruikersrechten als volgt instellen:

[sourcecode] sudo usermod -add-subuids 100000-165536 $ USER
sudo usermod -add-subgids 100000-165536 $ USER

sudo cgm create all user
sudo cgm chown all user $ (id -u) $ (id -g)
cgm movepid alle gebruiker $$ [/ sourcecode]

Uw container instellen

Nu LXC Container samen met andere vereiste software is geïnstalleerd, volgen hier de stappen voor het instellen van de container:

1. In dit voorbeeld zullen we een Ubuntu-container opzetten, genaamd ubu1 . Om dit te doen, voert u de volgende opdracht uit:

[sourcecode] lxc-create -template download -name ubu1 [/ sourcecode]

2. Hier vertelt de –template parameter lxc om een vooraf geconfigureerde afbeelding van internet te downloaden, terwijl de parameter –name de naam van de container ubu1 - ubu1 in dit geval. U kunt elke gewenste naam gebruiken.

3. U ziet nu een lijst met ondersteunde distro-afbeeldingen :

4. Voer de details in van de distributie die u wilt installeren. Ik zal hier de 64-bits versie van Ubuntu 16.04 (codenaam xenial) installeren:

5. Als u de afbeelding niet interactief wilt installeren, behaalt de volgende opdracht hetzelfde resultaat als het bovenstaande:

[sourcecode] lxc-create -t ​​download -n ubu1 - -dist ubuntu -release xenial -arch amd64 [/ sourcecode]

6. LXC zal nu een minimale Ubuntu xenial-afbeelding 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 ziet u een scherm zoals dit:

U bent nu klaar om uw nieuw opgezette Ubuntu-container te gebruiken.

Meerdere distros gebruiken met Linux-containers

De container opstarten

Start uw container met behulp van de opdracht lxc-start :

[sourcecode] lxc-start -n ubu1 -d [/ sourcecode]

Hier geeft de parameter -n de naam op van de container die u wilt starten (in dit geval ubu1 ) en de parameter -d om deze in de achtergrond uit te voeren .

U kunt controleren of de container is gestart met de opdracht lxc-ls :

[sourcecode] lxc-ls -f [/ sourcecode]

De parameter -f maakt een mooie rapportage mogelijk. Hier kun je zien dat ik twee containers heb - een Debian (gestopt) en een Ubuntu (actief).

Toegang tot en gebruik van uw container

U kunt de console van de container openen met de opdracht lxc-attach :

[sourcecode] lxc-attach -n ubu1 [/ sourcecode]

Je hebt nu een rootshell op je container. Het wordt aanbevolen dat u een wachtwoord instelt voor de rootgebruiker en een gewoon gebruikersaccount maakt :

[Broncode] passwd
adduser beebom [/ sourcecode]

Vervang beebom natuurlijk door de gewenste gebruikersnaam. U kunt vervolgens de software installeren en uw container configureren zoals u zou doen op een normaal systeem. Bijvoorbeeld in een Debian- of Ubuntu-container:

[sourcecode] apt install wget openssh-server htop tmux nano iptables [/ sourcecode]

Uw container stoppen

Nadat u klaar bent met spelen met de container, gebruikt u de opdracht exit om terug te keren naar het hostsysteem . Gebruik nu de opdracht lxc-stop om uw container te stoppen :

[sourcecode] lxc-stop-n ubu1 [/ sourcecode]

Hierdoor wordt de container netjes afgesloten en verbruikt deze niet meer bronnen op uw systeem, behalve schijfruimte.

Klonen en momentopnamen

klonen

Nadat u programma's in een container hebt geïnstalleerd en naar wens hebt geconfigureerd, wilt u mogelijk een of meerdere exemplaren ervan maken voor eenvoudige provisioning. U kunt dit doen door een kloon te maken, een exacte replica van een container.

Als u bijvoorbeeld een kloon van de ubu1 container wilt maken (laten we het ubu2 noemen), moet u eerst de container stoppen met lxc-stop en vervolgens de opdracht lxc-copy gebruiken:

[sourcecode] lxc-stop -n ubu

lxc-copy -n ubu1 -N ubu2 [/ sourcecode]

Hier geeft de -n-optie de broncontainer aan en geeft de -N-optie de naam van de kloon aan . Gebruik de opdracht lxc-ls om te controleren of de container is gekloond:

snapshots

Stel dat u op het punt staat om potentieel gevaarlijk of moeilijk te herstellen van wijzigingen aan een container, zoals het opnieuw configureren van een webserver. Om de schade te minimaliseren, kunt u een snapshot van de container maken voordat u een dergelijke wijziging aanbrengt. Als er iets misgaat tijdens de configuratie, kunt u de container eenvoudig stoppen en herstellen naar de vorige werkende staat door een momentopname te herstellen.

Om de snapshot te maken, moet u eerst de container stoppen :

[sourcecode] lxc-stop-n ubu1 [/ sourcecode]

Maak vervolgens een snapshot met de opdracht lxc-snapshot :

[sourcecode] lxc-snapshot -n ubu1 [/ sourcecode]

Hiermee wordt een snapshot gemaakt met de naam snap0 . Alle volgende snapshots die u met behulp van deze opdracht maakt, worden snap1, snap2, etc. genoemd.

Hierna kunt u de container starten en de gewenste wijzigingen aanbrengen. Als u op enig moment wilt terugkeren naar een momentopname die u hebt gemaakt, stopt u de container en gebruikt u de opdracht lxc-snapshot met de parameter -r om een ​​momentopname te herstellen :

[sourcecode] lxc-snapshot -r snap0 -n ubu1 [/ sourcecode]

Hiermee wordt de momentopname snap0 van de ubu1 container ubu1 .

Containers automatisch opstarten bij opstarten

U kunt een container maken, bijvoorbeeld een webservercontainer, en deze automatisch opstarten wanneer u uw systeem opstart. Ga hiervoor naar het configuratiebestand van de container in $HOME/.local/share/lxc//config en voeg de volgende regels toe :

[sourcecode] lxc.start.auto = 1
lxc.start.delay = 5 [/ sourcecode]

De eerste regel geeft aan dat de container moet worden gestart bij het opstarten. De tweede geeft aan dat het systeem 5 seconden moet wachten voordat de volgende container wordt gestart, indien aanwezig.

Probleemoplossen

Als u problemen ondervindt bij het starten van containers, moet u eerst lxc-start commando lxc-start uitvoeren in de voorgrondmodus . Bijvoorbeeld:

[sourcecode] lxc-start -n ubu1 -F [/ sourcecode]

Dit zal u de fouten op de huidige consol e tonen, wat zeer nuttig is bij het identificeren van de aard van het probleem.

Problemen bij gelijktijdig gebruik van meerdere containers

Als u meerdere containers tegelijkertijd probeert uit te voeren, ziet u mogelijk fouten zoals "Quota bereikt" of "kan het geconfigureerde netwerk niet worden aangemaakt". Dit komt omdat u meer netwerkinterfaces uitvoert dan aan u is toegewezen. U kunt het aantal netwerkbruggen dat een gebruiker kan uitvoeren vergroten door het bestand /etc/lxc/lxc-usernet als root te wijzigen . Het ziet er ongeveer zo uit:

[sourcecode] # USERNAME TYPE BRIDGE COUNT
beebom veth lxcbr0 5 [/ sourcecode]

U kunt het aantal aan het einde (5 in dit voorbeeld) wijzigen in een groter getal zoals 10. Hiermee kunt u maximaal 10 containers tegelijk openen.

Ander gebruik van Linux-containers

Linux-containers hebben verschillende toepassingen. U kunt ze gebruiken als lichtgewicht testvakken, bijvoorbeeld om verschillende configuraties van een web- of databaseserver uit te testen voordat u ze naar een productieserver gaat. Een ander gebruik is om te testen hoe een toepassing op verschillende versies van verschillende distributies werkt.

U kunt ze ook gebruiken om toepassingen te isoleren die u niet vertrouwt. Eventuele schade, zoals een toepassing, blijft beperkt tot de eigen container en heeft geen invloed op het hostsysteem. Hoewel het mogelijk is GUI-toepassingen in een container uit te voeren, kost dit veel tijd en moeite, en wordt daarom niet aanbevolen. Als u GUI-apps in een sandbox wilt uitvoeren, raadpleegt u ons artikel over hoe u sandbox-apps onder Linux kunt gebruiken.

Voer meerdere Distros gelijktijdig uit met Linux-containers

Daarmee is onze How-To beëindigd bij het uitvoeren van meerdere Linux-distro's op één computer, zonder de overhead van een virtuele machine van volledige grootte. Het nut van deze technologie wordt alleen beperkt door je creativiteit, dus voel je vrij om te experimenteren en ontdek nieuwe use-cases. Als u problemen ondervindt bij het instellen van containers, kunt u ons een vraag stellen in de sectie Opmerkingen.

Top