Virtuella maskiner och containrar

Virtuella maskiner

Virtuella maskiner är simulerade datorer. Du kan konfigurera en gästmaskin med ett operativsystem och valfri konfiguration, och använda den utan att påverka värdmiljön.

I den här kursen kan du använda VM:ar för att experimentera med operativsystem, programvara och konfigurationer utan risk. Du påverkar inte din primära utvecklingsmiljö.

Generellt har VM:ar många användningsområden. De används ofta för att köra program som bara fungerar på ett visst operativsystem (t.ex. en Windows-VM på Linux för Windows-specifik programvara). De används också ofta för att experimentera med potentiellt skadlig programvara.

Användbara egenskaper

Nackdelar

Virtuella maskiner är generellt långsammare än att köra direkt på hårdvaran, så de kan vara olämpliga för vissa tillämpningar.

Konfiguration

Resurser

Om du redan är bekant med populära hypervisorer/VM:ar kan du vilja lära dig ett mer kommandoradsvänligt arbetssätt. Ett alternativ är verktygssviten libvirt, som låter dig hantera flera olika virtualiseringsleverantörer/hypervisorer.

Övningar

  1. Ladda ner och installera en hypervisor.

  2. Skapa en ny virtuell maskin och installera en Linux-distribution (t.ex. Debian).

  3. Experimentera med snapshots. Prova saker du alltid velat testa, som att köra sudo rm -rf --no-preserve-root /, och se om du enkelt kan återställa.

  4. Läs om vad en fork-bomb (:(){ :|:& };:) är och kör den i VM:n för att se att resursisoleringen (CPU, minne, osv.) fungerar.

  5. Installera gästtillägg och experimentera med olika fönsterlägen, fildelning och andra funktioner.

Containrar

Virtuella maskiner är relativt tungviktiga. Men vad händer om du vill starta upp miljöer automatiserat? Då kommer containrar in i bilden.

Containrar är mest en sammansättning av olika Linux-säkerhetsfunktioner, som virtuella filsystem, virtuella nätverksgränssnitt, chroots, virtuellt minne, med mera, som tillsammans ger ett virtualiseringsliknande beteende.

Inte riktigt lika säkert eller isolerat som en VM, men ganska nära och blir bättre. Vanligtvis högre prestanda och mycket snabbare uppstart, men inte alltid.

Prestandavinsten kommer av att containrar, till skillnad från VM:ar som kör en hel kopia av operativsystemet, delar Linux-kärna med värden. Observera dock att om du kör Linux-containrar på Windows/macOS behöver en Linux-VM vara aktiv som mellanlager.

Docker vs VM Jämförelse mellan Docker-containrar och virtuella maskiner. Källa: blog.docker.com

Containrar är praktiska när du vill köra en automatiserad uppgift i en standardiserad miljö:

Dessutom har containerprogramvara som Docker använts mycket som lösning på beroendehelvete. Om en maskin måste köra många tjänster med konfliktande beroenden kan de isoleras med containrar.

Vanligtvis skriver du en fil som definierar hur containern byggs. Du börjar med en minimal basavbild (som Alpine Linux), och lägger sedan till en lista med kommandon för att sätta upp önskad miljö (installera paket, kopiera filer, bygga saker, skriva konfigurationsfiler osv). Normalt finns också ett sätt att ange externa portar som ska vara tillgängliga, samt en entrypoint som bestämmer vilket kommando som körs när containern startar (t.ex. ett rättningsskript).

På samma sätt som kodförrådssajter (som GitHub) finns containerförråd (som DockerHub) där många programtjänster har färdigbyggda avbilder som är enkla att driftsätta.

Övningar

  1. Välj en containerprogramvara (Docker, LXC, …) och installera en enkel Linux-avbild. Försök SSH:a in i den.

  2. Sök upp och ladda ner en färdigbyggd containeravbild för en populär webbserver (nginx, apache, …).


Edit this page.

Licensed under CC BY-NC-SA.