跟着jimmy学docker系列之第4讲:docker容器资源调度问题(MAC版本)
前面我们复习了docker的用法,而且我还带领大家亲自构建了一个自己的docker容器,也成功的在测试数据集里面运行了,但是前面我说的,我这次搞docker是因为真的有需求,那么就必然要处理我的真实数据。
这个时候的bam文件是10-20G大小了,不是我GitHub上面的几十个K的小测试文件,真正跑起来才发现,进程总是被kill掉,因为内存的问题,所以就有了本教程。
前面第三讲我创建了自己的docker容器,而且还成功的在小数据集上面测试成功啦,但是想真正分析大数据的时候发现进程总是被killed,仔细想了想应该是docker容器能调用的资源被限制,所以也搜索学习了一些。
在使用 docker 运行容器时,一台主机上可能会运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说会导致容器资源使用不公平;大的来说,可能会导致主机和集群资源耗尽,服务完全不可用。
docker 作为容器的管理者,自然提供了控制容器资源的功能。正如使用内核的 namespace 来做容器之间的隔离, docker 也是通过内核的 cgroups 来做容器的资源限制。 可以参考:
使用 docker 对容器资源进行限制
Docker 运行时资源限制
本来我也是按部就班的理解前辈们的教程,调整参数希望可以调度资源,最后始终无法解决问题,就求助了在华为生信云容器的北大胡博士,他指出来了我的docker是安装在我的iMac上面,所以这些教程都不能使用。
如果我要修改内存和CPU,直接跳转界面版本的docker的preference 即可。
如果资源配置好了👇
docker run -it -v /Users/jmzeng/data/project/:/work_dir jmzeng/lancet:v1.0 /bin/bash
root@ca3a9e72b32f:/# cd /work_dir/lancet/
# 脚本如下:
# 也可以设置;--num-threads
ref=/work_dir/ref/Homo_sapiens_assembly38.fasta
cat config |while read id;
do
arr=($id)
normal_bam=${arr[1]}
tumor_bam=${arr[2]}
sample=${arr[0]}
echo $id;
for chrom in {1..22} X Y M;do
echo $chrom
echo "lancet --tumor $tumor_bam --normal $normal_bam --ref $ref --num-threads 4 --reg chr$chrom > ${sample}_chr${chrom}.vcf"
lancet --tumor $tumor_bam --normal $normal_bam --ref $ref --num-threads 4 --reg chr$chrom > ${sample}_chr${chrom}.vcf
done
done
lancet --tumor t1.bam --normal n.bam --ref ref/Homo_sapiens_assembly38.fasta --reg chr3:179230000-179240000 > t1.vcf
现在就可以批量把所有的肿瘤配对WES数据走一波lancet软件,得到somatic的vcf格式的突变记录文件啦。非常方便。可以看到docke把mac的cpu全部调用了
◆ ◆ ◆ ◆ ◆
生信基础知识大全系列:生信基础知识100讲
史上最强的生信自学环境准备课来啦!! 7次改版,11节课程,14K的讲稿,30个夜晚打磨,100页PPT的课程。
如果需要组装自己的服务器;代办生物信息学服务器
如果需要帮忙下载海外数据(GEO/TCGA/GTEx等等),点我?
如果需要线下辅导及培训,看招学徒
如果需要个人电脑:个人计算机推荐
如果需要置办生物信息学书籍,看:生信人必备书单
如果需要实习岗位:实习职位发布
如果需要售后:点我