Snakemake + docker 示例,如何使用卷
Snakemake + docker example, how to use volumes
让我们有一个简单的蛇文件,比如
rule targets:
input:
"plots/dataset1.pdf",
"plots/dataset2.pdf"
rule plot:
input:
"raw/{dataset}.csv"
output:
"plots/{dataset}.pdf"
shell:
"somecommand {input} {output}"
我想概括绘图规则,以便它可以 运行 在 docker 容器内,类似于
rule targets:
input:
"plots/dataset1.pdf",
"plots/dataset2.pdf"
rule plot:
input:
"raw/{dataset}.csv"
output:
"plots/{dataset}.pdf"
singularity:
"docker://joseespinosa/docker-r-ggplot2"
shell:
"somecommand {input} {output}"
如果我理解得很好,当我 运行 snakemake --use-singularity
我在 docker 容器中获得 somecommand
运行,输入 csv 文件不能发现没有容器的一些卷配置。
能否提供一个小的工作示例来描述如何在 Snakefile 或其他 Snakemake 文件中配置卷?
当您 运行 snakemake 并告诉它使用奇点图像时,您可以这样做:
snakemake --use-singularity
您还可以将其他参数传递给奇点,包括绑定点,如下所示:
snakemake --use-singularity --singularity-args "-B /path/outside/container/:/path/inside/container/"
现在,如果您的 csv 文件在 /path/outside/container/
中,则可以通过一些命令毫无问题地查看它。
请记住,如果您的内部路径和外部路径不相同,您需要在 snakemake 规则的不同部分中使用这两个路径。我是这样做的:
rule targets:
input:
"plots/dataset1.pdf",
"plots/dataset2.pdf"
rule plot:
input:
"raw/{dataset}.csv"
output:
"plots/{dataset}.pdf"
params:
i = "inside/container/input/{dataset}.csv",
o = "inside/container/output/{dataset}.pdf"
singularity:
"docker://joseespinosa/docker-r-ggplot2"
shell:
"somecommand {params.i} {params.o}"
当你运行这个snakefile时,绑定raw/
到inside/container/input/
,绑定plots/
到inside/container/output/
。 Snakemake 将在您的本地计算机上查找 input/output 文件,但会使用容器内部路径向容器提供 运行 的命令,一切都会很棒。
TL;DR:输入和输出中的本地路径,params 中的容器路径和 shell。在命令行调用中绑定本地和容器路径。
让我们有一个简单的蛇文件,比如
rule targets:
input:
"plots/dataset1.pdf",
"plots/dataset2.pdf"
rule plot:
input:
"raw/{dataset}.csv"
output:
"plots/{dataset}.pdf"
shell:
"somecommand {input} {output}"
我想概括绘图规则,以便它可以 运行 在 docker 容器内,类似于
rule targets:
input:
"plots/dataset1.pdf",
"plots/dataset2.pdf"
rule plot:
input:
"raw/{dataset}.csv"
output:
"plots/{dataset}.pdf"
singularity:
"docker://joseespinosa/docker-r-ggplot2"
shell:
"somecommand {input} {output}"
如果我理解得很好,当我 运行 snakemake --use-singularity
我在 docker 容器中获得 somecommand
运行,输入 csv 文件不能发现没有容器的一些卷配置。
能否提供一个小的工作示例来描述如何在 Snakefile 或其他 Snakemake 文件中配置卷?
当您 运行 snakemake 并告诉它使用奇点图像时,您可以这样做:
snakemake --use-singularity
您还可以将其他参数传递给奇点,包括绑定点,如下所示:
snakemake --use-singularity --singularity-args "-B /path/outside/container/:/path/inside/container/"
现在,如果您的 csv 文件在 /path/outside/container/
中,则可以通过一些命令毫无问题地查看它。
请记住,如果您的内部路径和外部路径不相同,您需要在 snakemake 规则的不同部分中使用这两个路径。我是这样做的:
rule targets:
input:
"plots/dataset1.pdf",
"plots/dataset2.pdf"
rule plot:
input:
"raw/{dataset}.csv"
output:
"plots/{dataset}.pdf"
params:
i = "inside/container/input/{dataset}.csv",
o = "inside/container/output/{dataset}.pdf"
singularity:
"docker://joseespinosa/docker-r-ggplot2"
shell:
"somecommand {params.i} {params.o}"
当你运行这个snakefile时,绑定raw/
到inside/container/input/
,绑定plots/
到inside/container/output/
。 Snakemake 将在您的本地计算机上查找 input/output 文件,但会使用容器内部路径向容器提供 运行 的命令,一切都会很棒。
TL;DR:输入和输出中的本地路径,params 中的容器路径和 shell。在命令行调用中绑定本地和容器路径。