singularity使用

1. singularity简介

singularity与docker功能相似,但是相比与docker需要root权限,或者专门添加用户组,singularity在非root时也可使用,且轻量级,修改方便。singularity镜像有两种格式:sif格式可用于部署;sanbox格式是可写的文件系统,用于开发过程,方便根据需要修改其中的内容。两种格式之间相互转换,即开发完成后转换为sif。具体可参考官网。

2. singularity特性

  • 比如可在本地构建docker镜像,然后上传服务器使用singularity运行,从而避免使用root相关权限;
  • Singularity镜像 中的文件可以直接在当前系统操作;但是通过shell 启动容器后,容器内是只读的文件系统,如果要在容器内修改,需要root 权限,且指定 -writable;
  • 可直接在sandbox容器内创建环境,安装软件等;

3. 常用操作

(1) 搜索镜像,search

singularity search alp

(2)下载镜像,pull或build

singularity build ubuntu.sif library://ubuntu
singularity pull docker://sachet/polysolver:v4
  • 以library:// 开头的URI,表示是从Container Library构建
  • 以docker:// 开头的URI,表示是从Docker Hub构建
  • 以shub:// 开头的URI,表示是从Singularity Hub构建

(3)创建容器,build
build命令可以从一个现有容器创建一个新容器,意味着可以转换容器的格式,比如可以将修改过的sandbox(目录)转换为sif;也可以将sif转换为sandbox;

  singularity  build test.sif  test/

(4)运行,run或exec

singularity 可提供一个运行环境,在容器中配置好运行环境后,用于运行独立的软件。

singularity exec my_sing.img bash /pth/to/script.sh
singularity exec --writable ubuntu touch /foo,使用--writable 参数,可以在镜像目录中写入文件;

4. 常用问题

  • 默认下载的镜像存储在home下 .singularity,可以通过设置SINGULARITY_CACHEDIR 修改缓存目录;
  • build时的一些报错部分 FATAL: While performing build: while creating SIF: while creating container: writing data object for SIF file: copying data object file to SIF file: write /tmp/image-: no space left on device,可通过设置 SINGULARITY_TMPDIR 解决;
  • run运行时的一些报错也有可能是权限问题,需要仔细查看指示位置的权限;
  • 另有一些运行错误是由于singularity版本与系统不兼容,尝试更换镜像;
  • 挂载目录时,需要指定到最末端目录,否则会报错;或者设置
    enable underlay = yes
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐