Docker 容器中执行的计算是否完全可重复?

Docker 容器中执行的计算是否完全可重复?

我读过题为“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/

相关内容