Virtualisierung ist bei weitem die einfachste.
Sie haben hier jedoch 2 separate Anwendungsfälle, die unterschiedliche Lösungen haben
1. Probieren Sie neue Distributionen aus
Distributionen werden im Wesentlichen von den gepackten Anwendungen und der Userspace-Umgebung bestimmt (z. B. SystemD
vs init
for boot).
Wenn Sie das UIX einer anderen Distribution qualitativ "evaluieren" möchten, würde ich eine vollständige Virtualisierung empfehlen, bei der Sie das Betriebssystem in seiner Gesamtheit installieren und seine Benutzerfreundlichkeit evaluieren. Dies wird in anderen Antworten angemessen behandelt.
Wenn Sie zum Testen lediglich die Userspace-Umgebung benötigen, lesen Sie weiter.
2. Testen und "Wegwerfen von Instanzen" in verschiedenen Umgebungen
Es ist einfacher, billiger und schneller, Containerization zu verwenden, eine Form der leichten Virtualisierung, bei der der Kernel zum Erstellen von Sandkastenumgebungen verwendet wird.
Ein Container teilt sich die Kernelressourcen mit dem Host, hat aber ansonsten ein eigenes Root-Dateisystem, einen eigenen Benutzerbereich, einen eigenen Netzwerkstapel usw. Er kann konzeptionell als chroot
On-Steroide angesehen werden. Da der Kernel jedoch gemeinsam genutzt wird, ist die Virtualisierung "dünn", was bedeutet, dass sie für die meisten praktischen Zwecke mit der gleichen Geschwindigkeit wie das Host-Betriebssystem ausgeführt wird.
Es wird allgemein verwendetes Containersystem genannt docker
. Docker verfügt über standardisierte Images für praktisch jede gewünschte Linux-Distribution und läuft unter Windows (Windows-Images funktionieren jedoch nur unter Windows, Linux-Images funktionieren unter beiden). Es verfügt über zusätzliche nützliche Funktionen, um Platz und Leistung zu sparen.
Es gibt auch native Open-Source-Alternativen für Linux LXC
(das in den Kernel integriert ist!), Die auf die gleiche Weise verwendet werden können (jedoch mit mehr Konfiguration).
Vereinfachtes Beispiel für eine Test - oder Build - Umgebung in docker
# Dockerfile
FROM ubuntu:17.10
RUN apt-get update && apt-get install -y build-essential
WORKDIR /workdir
docker build --tag my-builder .
Kompilieren Sie anschließend über die Befehlszeile Ihr Projekt oder Ihre Tests in dieser Umgebung auf verschiedene Arten
"einloggen" und in der Umgebung kompilieren, Tests ausführen usw. Vorausgesetzt, Sie befinden sich im Quellverzeichnis Ihres Projekts
$ docker run -v "$PWD:/workdir" --rm -it my-builder /bin/bash
# echo "Now in docker container"
# make
...
# build/test/my-test
...
# exit
$ echo "Build artifacts are now on your host OS Directory :) "
Als Einzelstück verwenden
$ docker run -v "$PWD:/workdir" --rm my-builder make
Sie können sogar Umgebungsvariablen übergeben
$ docker run -e "CROSS_COMPILE=arm-linux-gnueabi" -v "$PWD:/workdir" --rm my-builder make
Oder starten Sie eine persistente Instanz und kopieren Sie die Dateien explizit hinein
$ Start our instance in background
$ docker run --name my-builder-inst -d my-builder
$ echo "Copy files to instance"
$ docker cp /my/source/dir my-builder-inst:/workdir
$ echo "run project build"
$ docker exec my-builder-inst make
$ echo "copy build artifacts"
$ docker cp my-builder-inst:/workdir/build /my/output/dir
$ echo "destroy and delete container"
$ docker rm -f my-builder-inst
Es gibt buchstäblich Hunderte anderer Verwendungsmuster. Die skriptähnliche Image-Definition, erweiterbare Images und die Verwendung über die Befehlszeile machen es jedoch für Entwicklungs-, Test- und sogar Bereitstellungsumgebungen äußerst attraktiv