前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Singularity — 生信流程搭建好帮手

Singularity — 生信流程搭建好帮手

作者头像
生信菜鸟团
发布2024-04-11 14:57:54
1320
发布2024-04-11 14:57:54
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团

工欲善其事必先利其器

1Singularity

Singularity 是一个容器平台,专为科学计算和数据密集型应用设计。最初是由 Gregory Kurtzer 在 2015 年创立的。Gregory Kurtzer 有着深厚的高性能计算背景,并且在开源社区中有着广泛的贡献。他意识到现有的容器解决方案不能很好地满足科学计算社区的需求,特别是在安全和易用性方面。因此,他创建了 Singularity,目标是提供一个既安全又高效的容器解决方案,特别是为了满足科研和企业中对高性能计算需求。其优势如下:

  1. 安全性:Singularity 的设计允许用户以非特权用户的身份运行容器,减少了系统受到恶意软件攻击的风险。
  2. 复制性:Singularity 通过容器来封装整个应用及其依赖,确保了在不同环境之间的一致性和复制性,对于科研工作尤其重要,因为这有助于确保实验结果的可重复性。
  3. 移植性:Singularity 容器可以轻松地在不同的操作系统和平台上运行,包括在大多数高性能计算集群上。这使得研究人员可以在个人电脑上开发和测试应用,然后无缝地迁移到大型计算集群上执行大规模计算任务。
  4. 易用性:Singularity 允许用户直接访问宿主机的文件系统和网络,这简化了数据和资源的管理,使得用户能够更容易地使用和部署容器。
  5. 与现有工具的兼容性:Singularity 支持与 Docker 容器格式的兼容,意味着用户可以轻松地将 Docker 容器转换为 Singularity 容器,利用 Singularity 在安全性和性能上的优势,同时保持对已有容器生态系统的兼容。

官网:https://sylabs.io/ 文档:https://sylabs.io/docs/ github:https://github.com/sylabs/singularity

2发表文章

题目:Singularity: Scientific containers for mobility of compute 日期:2017年5月11日 期刊:PLOS ONE 作者&单位:Gregory M. Kurtzer && Lawrence Berkeley National Lab DOI:10.1371/journal.pone.0177459

3如何安装

非root用户推荐使用conda 安装。(唯一不足是Conda安装的singularity不是最新版本)

代码语言:javascript
复制
conda create -n singularity singularity=3.8.6 -y

4生信分析中为什么使用Singularity

容器是一种在隔离环境中运行应用程序的技术。与传统虚拟机 (VM) 相比,它们具有多项优势,例如 更快的部署时间和可重复性。容器还允许开发人员构建和部署软件,无需担心底层基础设施或操作系统详细信息。在生物信息学分析中,使用Singularity 容器技术具有以下优势:

  1. 环境一致性和可重复性:生物信息学项目常常依赖于特定版本的软件和库。Singularity 容器可以将软件及其依赖项打包在一起,确保分析环境的一致性,无论是在本地机器、服务器还是云平台上。这对于实验的可重复性至关重要,因为它保证了其他研究者可以准确复制实验条件,验证和复现研究结果。
  2. 高性能计算(HPC)友好:Singularity 特别设计来支持高性能计算环境。它允许用户以非特权方式运行容器,与 HPC 系统的安全模型兼容。这意味着用户可以在不需要管理员权限的情况下部署和运行容器,这对于多用户的HPC环境是非常重要的。
  3. 移植性:Singularity 容器可以在任何支持 Singularity 的系统上运行,不受操作系统版本限制。这种高度的移植性确保了生物信息学分析可以轻松地从一个计算环境迁移到另一个,无论是从个人电脑到云平台,还是在不同的研究机构之间共享。
  4. 数据和资源访问:Singularity 容器可以直接访问宿主机上的文件系统和网络,这简化了数据的管理和传输过程。对于需要处理大量数据的生物信息学分析来说,能够无缝访问外部数据存储非常重要。
  5. 安全性:与其他容器技术相比,Singularity 提供了更强的安全保障。它防止了容器内的用户获取宿主机的 root 权限,减少了安全风险。这一点对于确保生物信息学数据的安全尤为重要,特别是在处理敏感或受保护的数据时。

5基本使用

运行测试

代码语言:javascript
复制
singularity run library://library/tutorial101/wttr:latest

与Singularity容器进行交互

  • shell 允许用户以交互的方式进入到一个特定的容器环境中
代码语言:javascript
复制
## 进入特定的容器环境
singularity shell library://josue-sylabs/demo/wttr:latest
INFO:    Using cached image
Singularity> _

## 查看容器信息
Singularity> cat /etc/os-release 

##退出交互
Singularity> exit

从容器库下载容器映像文件并查看容器信息

  • pull 下载容器文件
  • inspect 显示容器的元数据信息
    • --runscript 显示容器的runscript(查看特定元数据类型)。Runscript 是容器的默认执行脚本,当使用 singularity run 命令或直接运行容器文件时会执行

.sif 是 Singularity Image Format 的缩写,这是 Singularity 的默认容器映像格式,它是一个单一的、不可变的、和可移植的文件格式

代码语言:javascript
复制
##下载容器映像文件
singularity pull wttr.sif library://josue-sylabs/demo/wttr:latest

## `wttr.sif`:指定下载后的容器映像文件的本地文件名。

##查看容器的默认执行脚本
singularity inspect --runscript wttr.sif

从Docker Hub下载并保存为 Singularity 映像文件

代码语言:javascript
复制
##从Docker Hub下载
singularity pull ubuntu.sif docker://ubuntu

##进入交互——显示调用
singularity shell ubuntu.sif 
##非显示调用
./ubuntu.sif 

创建容器

主要分为4步

  1. 创建容器沙盒:沙盒是一个可写的容器目录。通过创建沙盒,可以轻松地更改容器内部的文件系统,就像在一个常规的目录中一样。
  2. 以可写模式进入容器:使用 --writable 选项运行 singularity shell 命令来修改沙盒容器。
  3. 执行配置软件所需的操作:在沙盒容器内部,执行必要的命令来配置软件,设置环境变量,并记录这些操作步骤,以便将它们包含在定义文件中。
  4. 根据定义文件构建容器并进行测试运行:一旦定义文件编写完成,就可以用它来构建一个不可变的容器映像文件。测试运行构建的容器映像,如果遇到问题,返回到步骤 1 重新开始。

定义文件分为两部分

  • Header:描述了要在容器内构建的核心操作系统。例如,它可以指定要从哪个基础映像开始构建。
    • Bootstrap:这个关键字定义了基础镜像的来源、协议或格式。你可以选择多个来源,包括 Singularity 容器库(library)、Docker Hub、OCI Registry as Storage(ORAS)、yum、本地镜像(localimage)、debootstrap、开放容器倡议(OCI)、BusyBox 等等。
    • From:这个关键字依赖于 Bootstrap 的值。
  • Sections:这些是一组命令,用于描述在最终映像中的特定动作。包括设置环境、复制文件、设置环境变量、下载文件、进行测试等等。
    • %files:这个部分允许你复制文件进入容器。这在程序编译完成后,你想将其移动到第二阶段容器中时非常有用。
    • %environment:这个部分允许你定义运行时会设置的环境变量。这些变量在构建时不可用。
    • %post:这里可以使用像 git 和 wget 这样的工具从互联网下载文件,安装新软件,编写配置文件,在容器内创建目录。
    • %runscript:这个部分包含了写入到容器内部文件的命令,这些命令会在使用 singularity run 命令运行容器映像时执行。
    • %startscript:这个部分类似于 %runscript,不同之处在于,%startscript 中的命令会在执行 singularity instance start 命令时运行。
    • %test:这个部分包含了在构建过程结束时执行的命令。它通常包含你选择的验证命令,也会在使用 singularity test 命令时执行。
    • %labels:这个部分用于向文件 /.singularity.d/labels.json 添加元数据,标签通过键值对定义,并可以在执行 singularity inspect 命令时显示。
    • %help:这部分的文本会被转移到容器内的一个元数据文件中。可以使用 singularity run-help 命令显示这些帮助信息。
代码语言:javascript
复制
## 需管理员权限
sudo singularity build --sandbox sandbox/ docker://ubuntu:22.04
sudo singularity shell --writable sandbox/

大部分情况下我们是没有管理员权限,那么我们可以使用以下命令

fakeroot 允许用户在容器及其请求的命名空间内拥有与 root 用户几乎相同的管理权限。这意味着用户可以执行通常需要 root 权限的操作,而不需要实际的 root 权限。通过 fakeroot 用户创建的所有文件或目录,在容器内部归 root 所有,在容器外部则归创建它们的用户和组所有。

--fakeroot 选项只能与以下几个命令一起使用:

  • shell:在容器内启动一个 shell。
  • exec:在容器内执行一个指定的命令。
  • run:运行容器的默认动作或指定的命令。
  • instance start:启动一个容器实例。
  • build:构建一个 SIF 容器映像。

非root用户创建一个容器映像

代码语言:javascript
复制
## 新建一个testfiel
echo "This is a test file." > testfile

##创建定义文件
vim test.def 

##定义文件写入以下内容
bootstrap: docker
from: almalinux:9

%files
    testfile

%post
    dnf install -y epel-release
    dnf install -y figlet

%runscript
    figlet < testfile

## 创建容器映像
singularity build --fakeroot test.sif test.def 

## 运行
singularity run test.sif

示例演示

运行输出

6来看一个实例

刚好前段时间生信技能树有发一个推文介绍了中国人群的肝癌多组学队列研究 (见:一起来挖掘中国人群的肝癌多组学队列),其中配套资料就有 Singularity containers

我们下载一个最小的来简单看一下

https://zenodo.org/records/8363845

查看容器相关信息

代码语言:javascript
复制
## 查看容器构建的元信息
$singularity inspect strelka.sif 
org.label-schema.build-arch: amd64
org.label-schema.build-date: Thursday_17_November_2022_17:11:39_+08
org.label-schema.license: GPLv2
org.label-schema.name: CentOS Base Image
org.label-schema.schema-version: 1.0
org.label-schema.usage.apptainer.version: 1.1.0-1.el8
org.label-schema.usage.singularity.deffile.bootstrap: docker
org.label-schema.usage.singularity.deffile.from: centos:centos7
org.label-schema.vendor: CentOS
org.opencontainers.image.created: 2020-11-13 00:00:00+00:00
org.opencontainers.image.licenses: GPL-2.0-only
org.opencontainers.image.title: CentOS Base Image
org.opencontainers.image.vendor: CentOS

## 查看容器映像文件的定义文件
singularity inspect --deffile strelka.sif 

从中我们可以找到strelka具体的安装位置,也可以进入容器交互查验

更多用法,详见:

  • https://sylabs.github.io/singularity101/intro.html
  • https://docs.sylabs.io/guides/3.8/user-guide/
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1Singularity
  • 2发表文章
  • 3如何安装
  • 4生信分析中为什么使用Singularity
  • 5基本使用
    • 运行测试
      • 与Singularity容器进行交互
        • 从容器库下载容器映像文件并查看容器信息
          • 从Docker Hub下载并保存为 Singularity 映像文件
            • 创建容器
            • 6来看一个实例
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档