官网:https://sylabs.io/guides/3.6/user-guide/
singularity与docker功能相似,但是相比与docker需要root权限,或者专门添加用户组,singularity在非root时也可使用,且轻量级,修改方便。singularity镜像有两种格式:sif格式可用于部署;sanbox格式是可写的文件系统,用于开发过程,方便根据需要修改其中的内容。两种格式之间相互转换,即开发完成后转换为sif。
其实不管singularity还是docker都需要良好的网络状态,很重要。
准备一:
sudo apt-get update
sudo apt-get install -y build-essential libssl-dev uuid-dev libgpgme11-dev squashfs-tools libseccomp-dev wget pkg-config git cryptsetup
准备二:安装GO语言
若之前有安装,则需要完整删除rm -rf /usr/local/go
cd /home/zhaohuiyao/Biosoft/
wget https://dl.google.com/go/go1.16.12.linux-amd64.tar.gz
tar -C /home/zhaohuiyao/Biosoft/singularity -xzvf go1.16.12.linux-amd64.tar.gz #解压,指定解压目录
rm go1.16.12.linux-amd64.tar.gz #删除安装包
#添加到环境变量
echo 'export PATH=/home/zhaohuiyao/Biosoft/singularity/go/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
#再次强调~/.bashrc文件对用户的重要性,进行备份,防止多次source,破坏文件。
准备三:下载和安装singularity
下载地址:https://github.com/hpcng/singularity/releases
cd /home/zhaohuiyao/Biosoft/singularity
wget https://github.com/apptainer/singularity/releases/download/v3.8.7/singularity-3.8.7.tar.gz
tar -xzvf singularity-3.8.7.tar.gz #解压
rm singularity-3.8.7.tar.gz
cd singularity-3.8.7/
./mconfig
cd builddir
make
sudo make install
#一定要保证上述正确且完整执行,否则后续会无法使用
#添加到环境变量
echo 'export PATH= /home/zhaohuiyao/Biosoft/singularity/singularity-3.8.7/builddir/singularity:$PATH' >> ~/.bashrc
source ~/.bashrc
准备四:镜像来源
①官方镜像库:https://cloud.sylabs.io/library;②Docker库:https://hub.docker.com/;③软件安装手册中提到的该软件的singularity下载命令。
#三种不同镜像,在下载软件时的命令
singularity pull library://cenat/default/blast.sif:latest
singularity pull docker://ncbi/blast
singularity pull shub://repeatexplorer/repex_tarean:latest
#下载容器
cd /home/zhaohuiyao/Biosoft/singularity/
singularity pull docker://ncbi/blast
#会在当前目录下生成文件blast_latest.sif
#交互式运行(输入exit退出)
singularity shell blast_latest.sif bash
makeblastdb -in ~/Biosoft/singularity/O.inf_mito_ref.fasta -dbtype nucl -parse_seqids -out ~/Biosoft/singularity/O.inf_mito_refDB
exit
#直接运行
singularity exec blast_latest.sif makeblastdb -in ~/Biosoft/singularity/O.inf_mito_ref.fasta -dbtype nucl -parse_seqids -out ~/Biosoft/singularity/O.inf_mito_refDB
root权限安装。将普通用户添加到docker用户组,普通用户就可以使用。或者给普通用户赋予sudo权限,在使用docker命令之前,添加sudo。
官网:https://docs.docker.com/engine/install/ubuntu/
准备一:ubuntu安装docker
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.gpg
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world
sudo docker run hello-world
准备二:将普通用户添加到docker组(一种选择)
#安装docker后,会自动生成docker用户组,若是没有,手动生成:sudo groupadd docker
#添加用户到docker组中(安装人员的工作完成)
sudo gpasswd -a zhaohuiyao docker
#sudo gpasswd -d zhaohuiyao docker #从docker组删除用户
#zhaohuiyao用户使用,查看自己所在组信息
id #发现自己在两个组中,zhaohuiyao组和docker组。并且当前登陆状态所在组是zhaohuiyao组
newgrp docker #切换到docker组
id #再次查看
准备三:给普通用户赋予sudo权限(另一种选择)
#修改文件/etc/sudoers,chmod 775 /etc/sudoers & vim /etc/sudoers
#恢复文件属性chmod 444 /etc/sudoers
#直接检索软件的合适镜像
docker search Tophat
docker pull limesbonn/tophat2
docker image ls
docker rmi -f limesbonn/tophat2
#运行镜像(该镜像可以多次且同时被运行,每一次被赋予不同的容器名。镜像被运行形成容器)
docker run -it -d limesbonn/tophat2 /bin/bash
docker run -it -d --name tophat2.2 limesbonn/tophat2 /bin/bash
#两次运行,两个容器名。且第二次用参数–name,指定容器名。第一次随机生成
#查看两次的容器名
docker ps
#上面两次运行均没有挂在文件或目录。若需要,使用参数-v
#挂载文件
docker run -it -d -v /home/zhaohuiyao/Genome_mito/data6/1.fq:/home/1.fq --name tophat2.2 limesbonn/tophat2 /bin/bash
#挂载目录
docker run -it -d -v /home/zhaohuiyao/Genome_mito/data6:/home --name tophat2.2 limesbonn/tophat2 /bin/bash
#进入容器1,使用exit退出
docker exec -it goofy_williams /bin/bash
#进入容器2
docker exec -it tophat2.2 /bin/bash
#将容器内文件提取出(保证该容器已经退出)
docker cp tophat2.2:/home/1_clean.fq ./
#将容器内文件夹提取出(保证该容器已经退出)
docker cp tophat2.2:/home ./
#停止容器
docker stop goofy_williams
#重启容器
docker restart goofy_williams
#干掉容器
docker kill goofy_williams
使用docker的流程,①下载镜像;②运行镜像形成容器(使用参数-v,将输入文件或目录挂载到容器中);③进入容器;④对输入文件进行操作,得到输出文件;⑤退出容器;⑥将输出文件提取出该容器(若输出文件在输入目录下,则会直接出现,不需要提取);⑦干掉容器
docker需要root用户的一些操作,请注意。若是普通用户使用中出现报错,不一定是软件本身问题,可能就是你没有docker权限。