在 Docker 中容器化 Snakemake 管道,同时还使用 Docker 进行独立的环境控制

问题描述 投票:0回答:1

我在使用 Docker 构建我的 Snakemake 工作流程时遇到了一些麻烦。

简单地说,我正在尝试对“Snakemake 位”(例如:snakefile、脚本等)进行 dockerize,并独立对每个环境进行 dockerize。我希望这样做是为了可移植性和测试——单一、庞大的 Docker 镜像很难使用 CI/CD 工具进行管理。我将经常构建和部署我的管道 - >10 GB 的 Docker 映像很难或不可能在许多 CI/CD 平台上使用。我的 env docker 镜像将相对稳定,很少需要重建(例如:仅包含 samtools)。

例如,假设我有一个看起来像这样的 dockerfile:

FROM conda
RUN conda install snakemake 
COPY my_repo 

然后在蛇文件中,您的规则如下所示:

rule example:
    input: "data" 
    output: "different_data" 
    container: "docker://repo/env"
    script: "script.py"

我相信最初的容器本身需要有 Docker,这似乎不正确并且过于复杂。将 Snakemake 部分“不”保存在容器中也并不理想 - 这些管道需要非常便携。即,一个容器将成为协调其他容器的“主”容器。 目前我正计划在 Docker 之外研究 Docker(DooD,安装本地 docker 套接字),但是是否有更干净的方法来实现我想要的?

编辑:据我所知(如果我错了请纠正我)Snakemake只使用Apptainer/Singularity,而不使用Docker。不过这篇文章中的其他内容仍然保持不变。

docker containers bioinformatics cicd snakemake
1个回答
0
投票

[ Host Machine ] | |----[ Master Container (Snakemake + Docker CLI) ] | |----[ Worker Container 1 (Environment 1) ] | |----[ Worker Container 2 (Environment 2) ] | |----[ ]

您的主容器将基于轻量级映像,但必须包含 
Snakemake

和 Docker CLI。 Docker CLI 对于从主容器内管理其他容器是必需的。 FROM debian:buster-slim # Install Docker CLI and other dependencies RUN apt-get update && \ apt-get install -y curl python3 python3-pip && \ curl -fsSL https://get.docker.com -o get-docker.sh && \ sh get-docker.sh && \ apt-get install -y docker-ce-cli # Install Snakemake using pip RUN pip3 install snakemake # Copy your Snakemake workflow files into the container COPY . /workflow WORKDIR /workflow

通过将主机的 Docker 套接字安装到主容器中,在 Docker (DooD) 之外使用 
Docker。这允许主容器与主机的 Docker 守护进程通信以管理工作容器。

docker run -v /var/run/docker.sock:/var/run/docker.sock -it my_master_container

您可以在 Snakemake 规则中指定工作容器:Snakemake 允许为每个规则指定容器,从而为工作流程的不同步骤启用不同的环境。
正如您所指出的,出于 HPC 环境中的安全性和可移植性考虑,Snakemake 原生支持 

Singularity (Apptainer)

等容器技术,而不是 Docker。然而,对于 Docker 兼容性,特别是在 CI/CD 管道和云环境中,上述策略(在主容器内使用 Docker CLI)可以解决此限制。

© www.soinside.com 2019 - 2024. All rights reserved.