查看原文
其他

跟着jimmy学docker系列之第4讲:docker容器资源调度问题(MAC版本)

生信技能树 生信技能树 2022-06-07

前面我们复习了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全部调用了

◆ ◆ ◆  ◆ ◆



jimmydocker系列教程到这里就结束了,后面虽然会更新,但是不需要在生信技能树公众号发布了,阅读原文直达我的GitHub,所有的更新都在上面,欢迎大家注册然后收藏我的project,Thanks♪(・ω・)ノ


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存