4.1 KiB
构建Singularity(现在称为Apptainer)的SIF(Singularity Image Format)文件有几种不同的方法。以下是一些常见的构建方法:
-
使用定义文件:使用定义文件(例如您之前提供的内容)是最常见的构建方法。您可以通过定义文件详细描述镜像的内容和构建过程。
sudo singularity build output.sif definition.def -
从现有的Docker容器构建:您可以直接从Docker镜像构建SIF文件。
sudo singularity build output.sif docker-daemon://ubuntu:22.04 -
从现有的Singularity容器构建:如果您有现有的Singularity容器,您可以从那个容器构建新的SIF文件。
sudo singularity build new_output.sif old_output.sif -
使用沙盒(sandbox)模式:沙盒模式允许您在一个可写的目录结构中构建和修改容器。这在迭代开发和测试中很有用。
sudo singularity build --sandbox sandbox/ definition.def您可以随后将沙盒目录转换为SIF文件:
sudo singularity build final_output.sif sandbox/ -
使用远程构建服务:如果您不希望在本地机器上构建容器,您可以使用Singularity的远程构建服务。
以上方法可以根据您的需求和限制进行混合和匹配。例如,您可以先使用定义文件在沙盒模式下构建容器,然后手动修改容器,最后将其转换为SIF文件。
使用使用沙盒(sandbox)模式构建sif文件
使用沙盒(sandbox)模式构建SIF文件允许您以更灵活的方式工作。沙盒是一个可写的目录结构,您可以在其中修改和测试容器的内容。以下是使用沙盒模式构建SIF文件的步骤:
-
创建沙盒目录:首先,您可以使用定义文件或从现有的Docker或Singularity镜像创建沙盒目录。
使用定义文件创建沙盒:
sudo singularity build --sandbox sandbox/ definition.def或从Docker镜像创建沙盒:
sudo singularity build --sandbox sandbox/ docker://ubuntu:22.04这里,“sandbox/”是沙盒目录的名称,您可以更改为所需的任何路径。
-
修改沙盒内容:一旦沙盒被创建,您可以直接在该目录结构中进行更改。您可以使用
singularity shell命令进入沙盒,并进行所需的修改:sudo singularity shell --writable sandbox/您也可以直接在文件系统中编辑沙盒目录的内容。
-
构建SIF文件:一旦您对沙盒的内容满意,可以将其转换为SIF文件:
sudo singularity build final_output.sif sandbox/这里,“final_output.sif”是最终SIF文件的名称。
-
清理:如果您不再需要沙盒,可以删除沙盒目录:
sudo rm -r sandbox/
沙盒模式特别适合需要迭代开发和测试的情况。通过直接在可写的目录结构中工作,您可以更容易地尝试不同的配置和设置。
wsl2 沙盒模式
如果你想在WSL2的子系统中进入沙盒模式,首先确保你的镜像文件(如 mutation.sif)已经存在。然后,你可以使用以下命令进入沙盒模式:
singularity shell --writable-tmpfs mutation.sif
这个命令将允许你在容器内部进行更改,但更改不会保存到原始SIF文件中。如果你想保存更改,你可能需要使用可写的沙盒目录。你可以通过以下命令创建沙盒目录并启动容器:
singularity shell --writable mutation/
在沙盒模式中,你可以对容器进行更改,并且更改将会保存。当你完成时,可以使用 exit 命令退出沙盒模式。
在wsl2使用apptainer会在当前目录解压目录mutation_sandbox一个目录,里面包括了一整个linux系统的文件。但是交互环境还是在windows的wsl2的子系统中,可能原因在于windows的wsl2的子系统本来就在沙盒中运行,所以无法在沙盒中在创建一个沙盒于是就解压出来。可能需要在真正是Linux系统的物理机中才能正常进入沙盒模式。