到目前为止,虚拟化是最简单的。
但是,这里有2个单独的用例,将有不同的解决方案
1.试用新发行版
分发基本上由打包的应用程序和用户空间环境(例如,SystemD
vs init
用于引导)确定
如果您想定性地“评估”不同发行版的UIX,那么我建议您使用全面的虚拟化,在其中完整安装操作系统并评估其可用性。其他答案已充分涵盖了这一点。
如果您仅需要用户空间环境进行测试,请继续阅读。
2.在不同的环境中测试和“丢弃实例”
容器化是一种轻量级虚拟化形式,它使用内核来创建沙盒环境,使用起来更加轻松,便宜和快速。
容器与主机共享内核资源,但是容器具有其自己的根文件系统,用户空间,网络堆栈等。从概念上讲,可以将其视为chroot
类固醇。但是,由于内核是共享的,因此虚拟化是“瘦”的,这意味着在大多数实际情况下,它以与主机OS相同的速度运行。
有一种常用的容器系统称为docker
。Docker几乎为您想要的每个Linux发行版都提供了标准化的映像,并且它可以在Windows上运行(但是,Windows映像只能在Windows上运行,而linux映像在两者上都可以运行)。它具有其他有用的功能,可以节省空间和性能。
还有一些类似linux的本机开源替代品LXC
(内置在内核中!),它们可以用于几乎相同的事情(但需要更多的配置)。
中的测试或构建环境的简化示例 docker
# Dockerfile
FROM ubuntu:17.10
RUN apt-get update && apt-get install -y build-essential
WORKDIR /workdir
docker build --tag my-builder .
然后从命令行以各种方式在该环境中编译项目或测试
“登录”并在环境中进行编译,运行测试等。假设您位于项目的源目录中
$ 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 :) "
一次性使用
$ docker run -v "$PWD:/workdir" --rm my-builder make
您甚至可以传递环境变量
$ docker run -e "CROSS_COMPILE=arm-linux-gnueabi" -v "$PWD:/workdir" --rm my-builder make
或启动一个持久实例并将文件明确复制到该实例中
$ 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
实际上还有数百种其他使用模式,但是,类似脚本的图像定义,可扩展图像和命令行使用使其对于开发,测试甚至部署环境都极为有吸引力。