Wirtualizacja jest zdecydowanie najprostsza.
Masz tu jednak 2 osobne przypadki użycia, które będą miały różne rozwiązania
1. Wypróbuj nowe dystrybucje
Dystrybucje są w zasadzie określone przez spakowane aplikacje i środowisko przestrzeni użytkownika (np. SystemD
Vs init
dla bootowania)
Jeśli chcesz „ocenić” UIX innej dystrybucji, jakościowo, zaleciłbym pełną wirtualizację, w której instalujesz system operacyjny w całości i oceniasz jego użyteczność. Zostało to odpowiednio uwzględnione w innych odpowiedziach.
Jeśli potrzebujesz tylko środowiska użytkownika do testowania, czytaj dalej.
2. Testowanie i „przypadki wyrzucenia” w różnych środowiskach
Korzystanie z kontenerów jest łatwiejsze, tańsze i szybsze. Jest to forma lekkiej wirtualizacji, która wykorzystuje jądro do tworzenia środowisk piaskownicowych.
Kontener współdzieli zasoby jądra z hostem, ale poza tym ma swój własny główny system plików, przestrzeń użytkownika, stos sieciowy itp. Można to traktować koncepcyjnie jako chroot
sterydy. Ponieważ jednak jądro jest współdzielone, wirtualizacja jest „cienka”, co oznacza, że dla większości praktycznych celów działa z tą samą prędkością co system operacyjny hosta.
Istnieje powszechnie stosowany system kontenerowy o nazwie docker
. Docker ma znormalizowane obrazy dla praktycznie każdej dystrybucji Linuksa, którą chcesz, i działa w systemie Windows (jednak obrazy systemu Windows działają tylko w systemie Windows, obrazy systemu Linux działają w obu systemach). Posiada dodatkowe przydatne funkcje pozwalające zaoszczędzić miejsce i wydajność.
Istnieją również natywne alternatywy typu open source dla Linuksa LXC
(który jest wbudowany w jądro!), Których można użyć do tego samego (ale wymaga to większej konfiguracji).
Uproszczony przykład środowiska testowego lub kompilacji w docker
# Dockerfile
FROM ubuntu:17.10
RUN apt-get update && apt-get install -y build-essential
WORKDIR /workdir
docker build --tag my-builder .
Następnie z poziomu wiersza poleceń skompiluj projekt lub testy w tym środowisku na różne sposoby
„zaloguj się” i skompiluj w środowisku, uruchom testy itp. Zakładając, że jesteś w katalogu źródłowym swojego projektu
$ 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 :) "
Użyj jako jednorazowy
$ docker run -v "$PWD:/workdir" --rm my-builder make
Możesz nawet przekazywać zmienne środowiskowe
$ docker run -e "CROSS_COMPILE=arm-linux-gnueabi" -v "$PWD:/workdir" --rm my-builder make
Lub uruchom trwałą instancję i skopiuj do niej pliki jawnie
$ 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
Istnieją dosłownie setki innych wzorców użytkowania, jednak definicja obrazów w formie skryptu, obrazy rozszerzalne i użycie wiersza poleceń sprawiają, że jest wyjątkowo atrakcyjny dla środowisk programistycznych, testowych, a nawet wdrożeniowych