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/超算上运行。

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

相关推荐
70asunflower1 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
聆风吟º1 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
ShiLiu_mtx2 小时前
k8s - 7
云原生·容器·kubernetes
NPE~2 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化
神梦流2 小时前
GE 引擎的内存优化终局:静态生命周期分析指导下的内存分配与复用策略
linux·运维·服务器
春日见2 小时前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设
xuhe22 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
Lsir10110_2 小时前
【Linux】进程信号(下半)
linux·运维·服务器
skywalk81633 小时前
unbound dns解析出现问题,寻求解决之道
运维·服务器·dns·unbound
酉鬼女又兒3 小时前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器