Docker 与 Singularity 镜像实战指南

一、 镜像查找:上哪儿找"正版"生信工具?

生信领域有专门的"应用商店",不要只在 Docker Hub 瞎撞。

  1. Quay.io (Biocontainers):

    • 地位:生信镜像的"金标准"。几乎所有 Conda 能装的软件,在这里都有对应的镜像。

    • 网址quay.io/search

    • 技巧 :搜索后进入 Tags 标签页。Biocontainers 镜像没有 latest 标签,必须复制那一串带哈希值的长标签(如 2.1.0--hdfd78af_0)。

  2. Bioconda 官网:

    • 网址bioconda.github.io

    • 技巧:搜索软件名,页面下方会直接给出该软件对应的 Quay.io 镜像拉取命令。

  3. Docker Hub:

    • 网址hub.docker.com

    • 地位 :找官方大厂工具(如 broadinstitute/gatk, nvidia/cuda)。

  4. nf-core Modules:

    • 网址nf-core/pipelines

    • 地位:如果你想跑 sarek 等标准流程,直接在这里看它们官方推荐的镜像版本。


二、 镜像拉取:如何突破网络封锁?

1. Docker 拉取(带国内代理前缀)

由于国内直接拉取 docker.ioquay.io 经常超时,建议使用镜像加速前缀。

Bash

复制代码
# 格式:代理前缀/原始路径:版本号
docker pull m.daocloud.io/biocontainers/fgbio:2.1.0--hdfd78af_0

2. Singularity 拉取(直接生成文件)

Singularity 运行不需要 Root 权限,更适合超算集群。

Bash

复制代码
# 建议命名时带上版本号,方便复现
singularity pull fgbio_2.1.0.sif docker://quay.io/biocontainers/fgbio:2.1.0--hdfd78af_0

三、 常用操作对比表:Docker vs Singularity

这部分可以做成博客里的核心对比图。

操作 Docker 命令 Singularity 命令
查看镜像 docker images ls *.sif (就是个普通文件)
运行工具 docker run --rm -v $PWD:/data 镜像ID fgbio ... singularity exec fgbio.sif fgbio ...
进入交互界面 docker run -it 镜像ID /bin/bash singularity shell fgbio.sif
导出/保存 docker save -o fgbio.tar 镜像ID cp fgbio.sif /移动路径
删除 docker rmi 镜像ID rm fgbio.sif

导出到 Google 表格


四、 避坑与进阶 Tips (博客的点睛之笔)

1. 为什么 Biocontainers 没有 latest

  • 解释 :生信分析讲究"可重复性"。今天运行的 latest 和明年运行的 latest 如果软件版本变了,结果可能完全不同。因此,Biocontainers 强制要求使用具体版本号。

2. 权限与挂载问题

  • Docker :默认是 root 权限,且容器内外文件系统隔离。必须用 -v 将宿主机的目录挂载进去,否则找不到数据。

  • Singularity :默认使用当前登录用户权限,且自动挂载当前目录(PWD)和家目录(HOME)。这在处理 cfDNA 大文件时非常方便。

3. Docker 镜像转 SIF

如果你本地有一个改好的 Docker 镜像想传到服务器用:

Bash

复制代码
# 将本地 Docker 守护进程里的镜像转为 SIF 文件
singularity build my_tool.sif docker-daemon:my_tool:v1.0

五、 总结与结语

  • Docker:适合个人开发、本地调试、构建新工具。

  • Singularity:适合大规模生信数据分析、在 HPC/超算上运行。

  • 核心建议永远在镜像名和文件名中保留版本号

相关推荐
小p1 天前
docker学习7:docker 容器的通信方式
docker
小p1 天前
docker学习5:提升Dockerfile水平的5个技巧
docker
小p1 天前
docker学习3:docker是怎么实现的?
docker
小p2 天前
docker学习: 2. 构建镜像Dockerfile
docker
小p3 天前
docker学习: 1. docker基本使用
docker
蝎子莱莱爱打怪3 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
崔小汤呀3 天前
Docker部署Nacos
docker·容器
缓解AI焦虑3 天前
Docker + K8s 部署大模型推理服务:资源划分与多实例调度
docker·容器
1candobetter4 天前
Docker Compose Build 与 Up 的区别:什么时候必须重建镜像
docker·容器·eureka
DianSan_ERP4 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet