我想对我的 RHEL 环境进行原始“虚拟化”。这是因为我必须运行几个二进制文件,其硬核路径指向例如。/etc/conf
目录。有几个不同的二进制文件实际上需要放置在同一目录中的不同的、冲突的配置。
因此,我想运行从中读取conf的应用程序A /etc/conf
,并且想运行从中读取conf的应用程序B /mnt/etc/conf
,但实际上“相信”它正在/etc/conf
通过提供一个“更改”当前的脚本来读取/
通过提供将当前目录位置/mnt
来读取。
我认为对于这种类型的操作,你可以使用 fakechroot 来完成,但它不再可用了。那是对的吗?有没有更好的方法来提供这个功能?
答案1
您可以尝试使用 docker 容器。最简单的方法(这样你就不必学习Dockerfile
语法)是安装 docker 然后docker run -it centos:<version>
(这些实用程序是为 RHEL 版本编写的),然后从容器内部设置所有二进制文件和可执行文件需要的话,退出 shell/容器并使用docker ps
来查找容器 ID。
例如:
[root@website ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42f454cc1c71 centos:latest "/bin/bash" About an hour ago Up About an hour sick_davinci
然后使用docker commit
保存图像:
docker commit 42f454cc1c71 baseImage
然后运行firstUtil
(或任何名称):
docker run -it --rm -v /srv/configs/firstUtil:/etc/conf baseImage /path/to/firstUtil
然后运行secondUtil
:
docker run -it --rm -v /srv/configs/secondUtil:/etc/conf baseImage /path/to/secondUtil
等等,等等
在上述每个docker run
命令中,它将根据您设置的映像在容器中运行该命令,然后--rm
一旦给定的命令退出,就会导致该容器被拆除。它--rm
很有用,因此实用程序的一次运行不会影响下一次运行,除非实用程序修改了其中的某些内容/etc/conf
因为每次命令运行都是容器中第一次运行任何内容。
你可以把这些docker run
命令放入脚本或 shell 别名中(如果这样可以更轻松地键入)。
请注意,默认情况下,docker 也会尝试修改主机上的防火墙和路由表。