计算机生信专题

Singularity 容器

2023-11-07  本文已影响0人  可能性之兽

Singularity 是一种流行的容器技术,专为高性能计算(HPC)和科学计算应用设计。与 Docker 等其他容器技术不同,Singularity 可以直接在用户空间中运行,而不需要特权或守护进程。这使得 Singularity 在 HPC 环境中非常受欢迎,因为这些环境通常对安全性和多用户支持有严格的要求。

singularity 容器的优点包括:

系统安装

$ sudo apt-get update && sudo apt-get install -y \
    build-essential \
    libssl-dev \
    uuid-dev \
    libgpgme11-dev \
    squashfs-tools \
    libseccomp-dev \
    pkg-config
$ sudo yum update -y && \
    sudo yum groupinstall -y 'Development Tools' && \
    sudo yum install -y \
    openssl-devel \
    libuuid-devel \
    libseccomp-devel \
    wget \
    squashfs-tools

Singularity的使用主要分为三步:拉取(或构建)镜像,使用镜像,以及删除镜像。以下是这些步骤的详细说明:

1. 拉取(或构建)镜像

可以从Singularity Hub或Docker Hub拉取预构建的镜像,也可以使用定义文件从头开始构建自己的镜像。

以下是从Docker Hub拉取一个Ubuntu镜像的例子:

singularity pull docker://ubuntu
singularity pull sub://ubuntu:latest
# 从docker hub中pull
singularity pull docker://ubuntu:latest
# pull并保存镜像文件
singularity pull ubuntu.latest.sif sub://ubuntu:latest

这会将Docker的ubuntu镜像保存为一个Singularity镜像文件,名为ubuntu_latest.sif

如果想从头开始构建自己的镜像,需要创建一个定义文件,然后使用singularity build命令。定义文件可能如下所示:

Bootstrap: docker
From: ubuntu:18.04

%post
    apt-get update && apt-get install -y python

然后,可以使用以下命令构建镜像:

sudo singularity build my_image.sif my_def.def

在这个例子中,my_image.sif是输出的镜像文件,my_def.def是定义文件。

2. 使用镜像

一旦有了一个Singularity镜像,可以使用singularity shellsingularity exec,或singularity run命令来使用它。

例如,以下命令会在一个Ubuntu镜像中启动一个shell:

singularity shell ubuntu_latest.sif

也可以直接执行镜像中的命令,如下所示:

singularity exec ubuntu_latest.sif echo "Hello, world!"

singularity run 命令用于运行 Singularity 容器的默认运行脚本。这个脚本是在容器的构建过程中定义的,通常用于启动应用程序或服务。

例如,如果Singularity 容器包含一个 web 服务器,可以使用 singularity run 命令来启动它:

singularity run my_web_server.sif
### 这个命令会运行 my_web_server.sif 容器的默认运行脚本,该脚本应该启动 web 服务器。

其他

# shell方法
singularity shell ubuntu.latest.sif
# -B 参数与docker run的-v参数类似
singularity shell -B /data:/data ubuntu.latest.sif
# run方法
singularity run ubuntu.latest.sif
# exec方法
singularity exec --containall --bind ${cwd}:${docker_cwd} ubuntu.latest.sif /bin/bash script.sh

3. 删除镜像

删除一个Singularity镜像就像删除一个普通的文件那样简单。只需要使用rm命令:

rm ubuntu_latest.sif

这将会删除ubuntu_latest.sif镜像。

这些步骤涵盖了Singularity的基础使用。

在Singularity中使用环境变量和挂载主机目录的方法如下:

使用环境变量

在Singularity容器中使用环境变量,可以在定义文件中使用%environment部分来设置环境变量。例如:

Bootstrap: docker
From: ubuntu:18.04

%environment
    export MYVAR="Hello, world!"

这将在容器环境中创建一个名为MYVAR的环境变量,其值为"Hello, world!"。

也可以在启动容器时使用-e--cleanenv选项清除所有环境变量,然后使用-E--env选项设置新的环境变量。例如:

singularity exec --cleanenv --env MYVAR="Hello, world!" my_image.sif echo $MYVAR

这会在一个清洁的环境中运行容器,其中只有一个名为MYVAR的环境变量。

挂载主机目录

Singularity允许容器中挂载主机文件系统的目录。可以使用-B--bind选项来实现这一点。例如:

-B 参数与docker run的-v参数类似

singularity exec -B /path/to/host/dir:/path/to/container/dir my_image.sif ls /path/to/container/dir

这会将主机上的/path/to/host/dir目录挂载到容器的/path/to/container/dir目录,然后在容器中列出该目录的内容。

也可以在定义文件中使用%files部分来复制文件或目录到容器。例如:

Bootstrap: docker
From: ubuntu:18.04

%files
    /path/to/host/file /path/to/container/file

这将在构建容器时将主机上的/path/to/host/file复制到容器的/path/to/container/file

Singularity的官方文档

上一篇下一篇

猜你喜欢

热点阅读