正如标题所述,我需要在我的生产服务器中运行不受信任的 C++ 程序。我正在尝试使用 docker,但有些事情对我来说确实不清楚:
- 我从 Docker Hub 的 ubuntu:14.04 镜像开始创建了自己的镜像。
- 我已经运行了容器,安装了 build-essential、autoconf 和依赖项
- 然后我退出容器,并提交更改,从 ubuntu:14.04 开始构建新映像
- 然后我跑了:
docker run -d <MY IMAGE ID> /root/myprogram &
它似乎工作正常
但我有一个疑问:由于我必须运行的不受信任的 C++ 程序使用数据库,并且它每 10 分钟更新一次数据库值……我是否必须每 10 分钟对图像提交一次更改,以避免潜在的数据丢失?
如果是这样的话,我必须切换到另一个虚拟化环境.....
另外,我正在尝试管理非 root 用户内幕容器,有人尝试过这个并且对此有意见/建议吗?
谢谢。
答案1
您不必在 Docker 容器内以“root”身份运行任何程序,尽管如果您愿意的话,您可以(理论上)安全地这样做。
通常,当您想要保存持久数据时,您需要一个 Docker 卷,它允许您将主机文件系统中的文件夹“挂载”到 Docker 容器“内部”。就像数据库写入文件的文件夹一样。只要您在主机上选择一个安全的文件夹并将其视为“危险”文件夹(显然不要在主机上运行其中出现的文件,它们是不受信任的),这在不受信任的代码方面是相当安全的。
方法如下使用音量:
docker run -d myimagename -v /var/lib/myimages/untrusted/data/storage/on/host/:/path/in/container/for/db/ container-command
从技术上讲,在 Linux 中,Docker 并不是您所想象的虚拟化 —— 它不是 VM。它更像是 FreeBSD jail(chroot 和进程隔离)。