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

Workflow 用于科学计算的Docker工作流,workflow,docker,scientific-computing,Workflow,Docker,Scientific Computing,我试图想象一个可以应用于科学工作环境的工作流。我的工作包括做一些科学编码,基本上是用Python、pandas、numpy和friends。有时我不得不使用一些在科学界不是通用标准的模块,有时我不得不在我的模拟链中集成一些编译代码。我运行的代码大部分时间与IPython笔记本并行 我觉得docker有什么有趣的地方 事实上,我可以创建一个包含我的代码及其工作环境的docker。然后,我可以将docker发送到我的大学,而不要求他们更改工作环境,例如,安装过时的模块版本,以便他们可以运行我的代码

我试图想象一个可以应用于科学工作环境的工作流。我的工作包括做一些科学编码,基本上是用Python、pandas、numpy和friends。有时我不得不使用一些在科学界不是通用标准的模块,有时我不得不在我的模拟链中集成一些编译代码。我运行的代码大部分时间与IPython笔记本并行

我觉得docker有什么有趣的地方

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

我心目中的工作流程大致如下:

  • 在本地开发,直到我有了一个想要与他人共享的版本
  • 构建一个docker,可能有一个git回购的钩子
  • 分享码头工人

  • 有谁能给我一些建议,我应该考虑什么来进一步发展这个工作流程?我很感兴趣的一点是:在docker上运行的代码可以在机器的几个核心上运行并行进程?e、 例如,连接到集群的IPython笔记本。

    Docker可以在多个核心上启动多个进程/线程。多个流程可能需要使用主管(请参阅:)

    您可能应该构建一个包含您经常使用的内容的图像,并将其用作所有项目的基础。(这样你就不用每次都写一个完整的Dockerfile了)

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


    如何创建本地注册表:

    即使您有一个完整的容器,我认为像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
    
    *从

    在Dockerfile中执行
    源代码激活
    ,您需要:

    RUN /bin/bash -c "source activate <env> && <do something in the env>"
    
    RUN/bin/bash-c“源代码激活&”