基于docker的生信基础环境镜像构建
本文是《转录组RNA-Seq使用docker+bioconda实现分析环境搭建》一文的升级版,下面解决几个问题:
Q:为什么不使用本地部署运行docker容器模式?而使用带ssh服务的docker镜像?
A:单机毕竟容量资源、算力有限不可能做太多扩展,带ssh的docker部署连接基于网络,扩展性更好。
Q:为什么对上文docker用法升级?
A:毕竟docker又用了一段时间,有些提高,毕竟本地通过docker commit提交获取docker镜像的方式一来会造成docker镜像体积飙升,不便于移植;二来也不是官方推荐的使用方法,能用但是不推荐;近来有时间就想再完善下。
Q:如何安装docker和docker-compose?
A:安装docker和docker-compose:
shell
#docker极速安装,快速完成不浪费时间
curl -sSfL get.docker.io -o get_docker.sh
bash get_docker.sh --mirror Aliyun
#较新版本的Docker上述安装脚本直接安装了docker-compose-plugin,用来替换早期的docker-compose,也可以手动安装
sudo apt-get install docker-compose-plugin
#使用方法类似于docker-compose,替代命令为docker compose其余参数基本一致
docker compose up -d
#安装docker-compose 1.x版本
#从以下网址下载docker-compose,将docker-compose文件放在path变量目录下如:/usr/local/bin并增加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
https://github.com/docker/compose/releases
Dockerfile如下:
docker
#从Ubuntu20.04镜像开始构建,Ubuntu22.04据说会不定期杀掉占用资源过多的进程
FROM ubuntu:20.04
#1.设置账户字符编码为C.UTF-8,提高兼容性;设置时区,ssh登录密码为20201110(账户为root),连接端口为9022
ENV LANG=C.UTF-8 TZ=Asia/Shanghai PS=20201110 port=9022
#设置时区、更新镜像软件、安装aria2(下载工具替代wget,curl以获取更快的下载速度,容错/下载会自动重试)
#openssh服务并更新配置文件,使root账户可以登录、更新root账户密码为设置值
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
apt update && apt upgrade -y && apt install openssh-server aria2 -y && apt autoremove -y
RUN sed -i "s/#PermitEmptyPasswords no/PermitEmptyPasswords no/g" /etc/ssh/sshd_config && \
sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config && \
sed -i "s/#Port 22/Port ${port}/g" /etc/ssh/sshd_config && \
sed -i "s/#ListenAddress 0.0.0.0/ListenAddress 0.0.0.0/g" /etc/ssh/sshd_config && \
sed -i "s/#LoginGraceTime 2m/LoginGraceTime 2m/g" /etc/ssh/sshd_config && \
echo root:${PS} | chpasswd
#aria2下载miniconda、安装、添加channel、删除安装文件(减小镜像体积)、初始化miniconda
RUN aria2c https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -d ~ && \
bash ~/Miniconda3-latest-Linux-x86_64.sh -b && \
~/miniconda3/bin/conda config --add channels defaults && \
~/miniconda3/bin/conda config --add channels bioconda && \
~/miniconda3/bin/conda config --add channels conda-forge && \
rm -f ~/Miniconda3-latest-Linux-x86_64.sh && \
~/miniconda3/bin/conda init
#复制该文件到镜像root目录下,condarc为清华源配置文件,国内提速可以注销该行
#COPY --chown=root:root ./condarc /root/.condarc
#暴露ssh连接端口
EXPOSE $port
#初始化镜像运行:根据配置项变量PS修改root密码,该密码可以运行时重新设置初始化,最后启动ssh服务
ENTRYPOINT ["/bin/bash", "-c", "echo root:${PS} | chpasswd && service ssh start -D"]
构建镜像或者从docker hub拉取镜像
shell
#将condarc文件和dockerfile放在同一目录下,构建镜像
docker build -t doujiangbaozi/sliverworkspace:latest .
#或者使用已经构建好的镜像,直接拉取到本地
docker pull doujiangbaozi/sliverworkspace:latest
condarc文件(可选,这里使用的是清华的源):
yaml
channels:
- conda-forge
- bioconda
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
如何使用该镜像:
推荐使用docker-compose,配置文件docker-compose.yml如下
yaml
version: "3"
services:
TumorOnly:
image: doujiangbaozi/sliverworkspace:latest
container_name: TumorOnly
volumes:
- /media/sliver/Data/data:/opt/data:rw #挂载输入数据目录
- /media/sliver/Manufacture/tumor-only/envs:/root/miniconda3/envs:rw #挂载envs目录
- /media/sliver/Manufacture/tumor-only/config:/opt/config:rw #挂载config目录
- /media/sliver/Manufacture/sliver/ref:/opt/ref:rw #挂载reference目录
- /media/sliver/Manufacture/tumor-only/result:/opt/result:rw #挂载中间文件和结果目录
ports:
- "9022:9022" #ssh连接端口,此处可以映射为其他端口
environment:
- TZ=Asia/Shanghai #设置时区
- PS=20191124 #设置ssh密码
在docker-compose.yml文件目录下运行docker-compose up -d 即可运行;
查看docker运行状态
shell
#查看docker容器运行状态
docker ps
#或者docker-compose.yml目录下运行
docker-compose ps
如何使用该docker搭建pipeline?
ssh 登录该容器ssh账户,即可在环境下开始生信分析
这里参考snakemake的写法,每个分析步骤创建一个yaml文件,里面是用到的软件及版本。首次运行检测该步骤环境存在,不存在先安装软件初始化。
shell
#用到的环境变量,以最简单的fastqc,multiqc为例
export env=/root/miniconda3/envs #conda环境软件安装目录,最好挂载物理机volume
export conf=/opt/config #conda环境配置文件目录
export sn=RD1703007FFP #样本编号,sample number
export pn=TumorOnly #项目编号,project number
export result=/opt/result #中间文件输出目录
#conda检测环境是否存在,首次运行不存在创建该环境并安装软件
if [ ! -d "${envs}/${pn}.fastqc" ]; then
conda env create -f ${conf}/fastqc.yaml
fi
#切换到环境下运行fastqc、multiqc
conda activate "${pn}.fastqc"
mkdir -p ${result}/${sn}/qc
fastqc -o ${result}/${sn}/qc \
${result}/${sn}/trimmed/${sn}_trimmed_R1.fastq.gz \
${result}/${sn}/trimmed/${sn}_trimmed_R2.fastq.gz
multiqc ${result}/${sn}/ -f -o ${result}/${sn}/qc
#退出环境
conda deactivate
fastqc.yaml文件如下,文件位于/opt/config目录下
yaml
name: TumorOnly.fastqc
channels:
- conda-forge
- bioconda
- defaults
dependencies:
- fastqc=0.11.9
- multiqc=1.13a