背景
生物信息中的分析流程往往需要消耗很大的內(nèi)存,讀寫以TB計算的數(shù)據(jù),屬于典型的高性能計算(HPC)應(yīng)用。生信分析流程中要調(diào)用大量的分析程序以及內(nèi)部開發(fā)腳本,環(huán)境的配置與管理極為復(fù)雜,可重復(fù)性低,導(dǎo)致流程的升級、管理、遷移成為大難題。
現(xiàn)有的IT技術(shù)中其實有解決以上問題的方法,如Docker。然而生信分析集群和普通的IT服務(wù)器又有很大區(qū)別,如開發(fā)人員無root權(quán)限,分析任務(wù)需要進行資源管理(內(nèi)存,CPU)。這些問題都讓Docker技術(shù)在HPC環(huán)境的應(yīng)用受限,Singularity因此應(yīng)運而生。
容器技術(shù)是一種以應(yīng)用軟件為中心的虛擬化技術(shù)。以應(yīng)用軟件為單元,將軟件及所有的依賴打包成容器鏡像,打包后的容器鏡像可直接拷貝到不同的Linux主機上運行。通過容器技術(shù),可以很好的解決安裝軟件時,依賴庫的安裝問題、軟件環(huán)境的隔離以及軟件環(huán)境的移植問題。
singularity的安裝和使用
安裝
安裝依賴
sudo apt-get update && sudo apt-get install -y \
build-essential \
uuid-dev \
libgpgme-dev \
squashfs-tools \
libseccomp-dev \
wget \
pkg-config \
git \
cryptsetup-bin
安裝GO語言
wget https://golang.org/dl/go1.14.12.linux-amd64.tar.gz #下載
tar -C /pub/software -xzvf go1.14.12.linux-amd64.tar.gz #解壓
rm go1.14.12.linux-amd64.tar.gz #刪除安裝包
添加到環(huán)境變量
echo 'export PATH=/pub/software/go/bin(你的路徑):$PATH' >> ~/.bashrc
下載singularity
下載地址:https://github.com/hpcng/singularity/releases
wget https://github.com/hpcng/singularity/releases/download/v3.7.2/singularity-3.7.2.tar.gz
tar -xzf singularity-3.7.2.tar.gz #解壓
cd singularity
安裝singularity
./mconfig
cd builddir
make
sudo make install
記得添加到環(huán)境變量
沒有出現(xiàn)報錯信息就不用管提示
快速上手
下載鏡像
可以從 Container Library(https://cloud.sylabs.io/library)
例如:singularity pull library://cenat/default/blast.sif:latest
or Docker Hub(https://hub.docker.com/)下載images。
例如:singularity pull docker://ncbi/blast
singularity pull --arch amd64 library://library/default/ubuntu:20.04
創(chuàng)建沙箱
剛下載下來的ubuntu_20.04.sif 只是一個純凈的系統(tǒng),我們需要創(chuàng)建一個沙箱,給里面裝軟件。
singularity build --sandbox blast ubuntu_20.04.sif
進入容器
默認會自動掛載PWD , /tmp , /proc , /sys , /dev 目錄。
singularity shell --writable --fakeroot blast
在容器中安裝軟件,建議不要使用anaconda 安裝,而是手動安裝,我們要盡量保持容器輕量。
添加環(huán)境變量
退出容器后, 在blast/environment 中添加PATH
vi blast/environment
#!/bin/sh
# Custom environment shell code should follow
export PATH=/opt/ncbi-blast-2.10.1+/bin:$PATH
打包
軟件全部安裝完成之后將容器打包
singularity build blast.sif blast
運行程序
singularity exec blast.sif blasp XXX 后面接軟件的用法
運行容器
交互式運行
singularity shell blast.sif bash
直接運行
singularity exec blast.sif blastp
用戶和權(quán)限
使用容器不得不考慮安全性,安全性來自兩個方面,一個是使用了不被信任的容器,這個就像你在電腦上安裝了不被信任的軟件一樣,Singularity提供了簽名機制來驗證;另一方面是容器會不會越權(quán)對Host 做一些不該做的事情,這個是需要考慮的。
singularity 的解決辦法是會在容器內(nèi)動態(tài)創(chuàng)建一個用戶,該用戶與Host里的用戶名、組名、權(quán)限等都保持一致。這樣你在Host 中做不了的事情,在容器里也干不了。