跟着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全部調用了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章