用于科学计算的Docker工作流程

时间:2014-07-24 13:34:42

标签: workflow docker scientific-computing

我试图想象一个可以应用于科学工作环境的工作流程。我的工作涉及做一些科学编码,主要是Python,熊猫,numpy和朋友。有时我必须使用一些不是科学界通用标准的模块,有时我必须在我的模拟链中集成一些已编译的代码。我运行的代码大部分时间与IPython笔记本并行。

我对docker有什么兴趣?

我可以创建一个包含我的代码及其工作环境的docker。然后我可以将docker发送到我的学院,而不要求他们改变他们的工作环境,例如,安装一个过时的模块版本,以便他们可以运行我的代码。

我想到的工作流草案如下:

  1. 在本地开发,直到我有一个我想与某人分享的版本。
  2. 构建一个docker,可能还有一个来自git repo的钩子。
  3. 分享码头。
  4. 有人可以给我一些指示,我应该考虑进一步开发这个工作流程吗?引起我兴趣的一点是:在docker上运行的代码可以在机器的几个核心上进行并行处理吗?例如,连接到群集的IPython笔记本。

2 个答案:

答案 0 :(得分:1)

Docker可以在多个核心上启动多个进程/线程。多个流程可能需要使用主管(请参阅:https://docs.docker.com/articles/using_supervisord/

您应该构建一个包含您经常使用的内容的图像,并将其用作所有项目的基础。 (可以省去每次编写完整Dockerfile的痛苦)

为什么不直接在容器中开发并使用commit命令在本地docker注册表中保存进度?然后将最终图像分享给您的同事。

如何制作本地注册表:https://blog.codecentric.de/en/2014/02/docker-registry-run-private-docker-image-repository/

答案 1 :(得分:1)

即使你有一个完整的容器,我认为像conda这样的包管理器仍然可以成为工作流基础图像的重要组成部分。

FROM ubuntu:14.04
RUN apt-get update && apt-get install curl -y

# Install miniconda
RUN curl -LO http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh
RUN bash Miniconda-latest-Linux-x86_64.sh -p /miniconda -b
RUN rm Miniconda-latest-Linux-x86_64.sh
ENV PATH=/miniconda/bin:${PATH}
RUN conda update -y conda

*来自nice example showing docker + miniconda + flask

你需要在Dockerfile中执行source activate <env>

RUN /bin/bash -c "source activate <env> && <do something in the env>"