Files
mutation/sifbuild.md
lingyu zeng d1f25e7110 update
2024-09-17 13:20:08 +08:00

4.1 KiB
Raw Permalink Blame History

构建Singularity现在称为Apptainer的SIFSingularity Image Format文件有几种不同的方法。以下是一些常见的构建方法

  1. 使用定义文件:使用定义文件(例如您之前提供的内容)是最常见的构建方法。您可以通过定义文件详细描述镜像的内容和构建过程。

    sudo singularity build output.sif definition.def
    
  2. 从现有的Docker容器构建您可以直接从Docker镜像构建SIF文件。

    sudo singularity build output.sif docker-daemon://ubuntu:22.04
    
  3. 从现有的Singularity容器构建如果您有现有的Singularity容器您可以从那个容器构建新的SIF文件。

    sudo singularity build new_output.sif old_output.sif
    
  4. 使用沙盒sandbox模式:沙盒模式允许您在一个可写的目录结构中构建和修改容器。这在迭代开发和测试中很有用。

    sudo singularity build --sandbox sandbox/ definition.def
    

    您可以随后将沙盒目录转换为SIF文件

    sudo singularity build final_output.sif sandbox/
    
  5. 使用远程构建服务如果您不希望在本地机器上构建容器您可以使用Singularity的远程构建服务。

以上方法可以根据您的需求和限制进行混合和匹配。例如您可以先使用定义文件在沙盒模式下构建容器然后手动修改容器最后将其转换为SIF文件。

使用使用沙盒sandbox模式构建sif文件

使用沙盒sandbox模式构建SIF文件允许您以更灵活的方式工作。沙盒是一个可写的目录结构您可以在其中修改和测试容器的内容。以下是使用沙盒模式构建SIF文件的步骤

  1. 创建沙盒目录首先您可以使用定义文件或从现有的Docker或Singularity镜像创建沙盒目录。

    使用定义文件创建沙盒:

    sudo singularity build --sandbox sandbox/ definition.def
    

    或从Docker镜像创建沙盒

    sudo singularity build --sandbox sandbox/ docker://ubuntu:22.04
    

    这里“sandbox/”是沙盒目录的名称,您可以更改为所需的任何路径。

  2. 修改沙盒内容:一旦沙盒被创建,您可以直接在该目录结构中进行更改。您可以使用singularity shell命令进入沙盒,并进行所需的修改:

    sudo singularity shell --writable sandbox/
    

    您也可以直接在文件系统中编辑沙盒目录的内容。

  3. 构建SIF文件一旦您对沙盒的内容满意可以将其转换为SIF文件

    sudo singularity build final_output.sif sandbox/
    

    这里“final_output.sif”是最终SIF文件的名称。

  4. 清理:如果您不再需要沙盒,可以删除沙盒目录:

    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系统的物理机中才能正常进入沙盒模式。