奇点:镜像、容器和实例之间有什么区别?

Singularity: What is the difference between an image, a container, and an instance?

我开始学习 Singularity 以对科学管道进行可重现的分析。一位同事解释说,使用图像来实例化容器。但是,在阅读文档和教程时,还使用了术语 instance,并且 imagecontainer 的用法似乎可以互换。所以,我不确定我是否准确理解图像、容器和实例之间的区别。我确实知道食谱是用于构建其中之一的文本文件(我认为是图像?)。

例如,在 this page 上说明:

Now we can build the definition file into an image! Simply run build and the image will be ready to go:

$ sudo singularity build url-to-pdf-api.img Singularity

好的,所以这使用配方 Singularity 构建图像,直观扩展 .img。但是,build 命令的帮助说明指出:

$ singularity help build

USAGE: singularity [...] build [build options...]

The build command compiles a container per a recipe (definition file) or based on a URI, location, or archive.

所以这似乎表明我们正在构建一个容器?

然后,还有imageinstance子命令。

所有这些术语都可以互换使用吗?似乎有时它们是,有时它们之间存在差异。

A container 是创建沙盒 运行 环境的一般概念,可用作指代 Docker 或 Singularity 图像的通用术语。然而,它有时也用于指代正在生成的特定文件。这可能并不理想,因为它显然会使新用户感到困惑。

image一般用来指代singularity build ...

实际创建的文件

instance指的是运行宁奇点图像的一种具体方式。通常,如果您 singularity run some_image.sifsingularity some_image.sif some_command 在 运行ning 时您无法轻松访问其环境。但是,如果您改为 运行 singularity instance start some_image.sif some_instance1,它会创建一个持久服务,您可以像 docker 容器一样访问它。 singularity service/instance documentation 有一些很好的例子,说明实例的使用方式与基本的 execrun 命令有何不同。