我读过题为“Docker.io 与普通虚拟机有何不同?“,但我还是不太清楚docker容器到底有多“虚拟”。比如在科学计算中,可重复性非常重要,如果一个镜像在一台机器上产生了某个结果,那么在另一台机器上使用同一个镜像,计算结果会不会完全相同呢?
(我不太清楚不同的操作系统、内核、硬件或架构在实践中可以在什么层面上改变计算,或者 Docker 在哪一层上进行抽象,如果有的话。)
谢谢! :)
答案1
Docker 只是 LXC 容器周围的管理层,本质上是一个 Linux 风格的监狱。
LXC 容器使用与主机相同的处理器和内核,但使用它自己的库(即容器文件系统内的库)。
因此,为了实现可重复性,您需要确保所有这些属性都是相同的。如果您已经对 LXC 容器有了答案,那么它 100% 适用于 Docker 容器。
答案2
这实际上取决于你考虑的计算:
- 像“将日期乘以 23”这样的操作永远不会是幂等的,因为时间会发生变化。
- 如果你的操作结果取决于特定的内核设置,Docker 无法保证它在不同系统上是相同的
- 如果您的操作依赖于外部物理因素(例如网络延迟),那么即使是虚拟机也无济于事。
尽管如此,Docker 的主要目标之一是简化可重复的操作。因此在大多数情况下,尤其在科学环境中,我怀疑操作/计算的结果是否取决于内核设置,Docker 似乎是一个不错的选择。而且你不是第一个在这种环境中使用它的人:http://bcbio.wordpress.com/2014/03/06/improving-reproducibility-and-installation-of-genomic-analysis-pipelines-with-docker/