科学计算的Docker工作流程

3
我试图想象一种可以应用于科学工作环境的工作流程。我的工作涉及到一些科学编码,基本上使用Python、pandas、numpy等库。有时我需要使用一些在科学界不常见的模块,有时我也需要将一些已经编译好的代码集成到我的模拟链中。我运行的代码大部分时间都是通过IPython笔记本并行化的。
关于Docker,我觉得它很有意思的地方在于:我可以创建一个包含我的代码和工作环境的Docker。然后,我可以将Docker发送给我的同事,而不需要他们更改他们的工作环境,例如安装一个过时版本的模块以使其能够运行我的代码。
我心目中的工作流程草稿如下:
1. 在本地开发,直到我有一个版本想要与别人分享。 2. 构建一个Docker,可能带有从git仓库中获取的hook。 3. 分享Docker。
有没有人能给我一些指导,以便进一步发展这个工作流程呢?一个让我感到好奇的点是:在Docker上运行的代码能否在机器的几个核心上启动并行进程?例如连接到集群的IPython笔记本。
2个回答

1

Docker可以在多个核心上启动多个进程/线程。多个进程可能需要使用监督器(请参见:https://docs.docker.com/articles/using_supervisord/)。

您应该构建一个包含您经常使用的东西的镜像,并将其用作所有项目的基础。(这样可以避免每次编写完整的Dockerfile时的痛苦)

为什么不直接在容器中进行开发,并使用提交命令将您的进度保存到本地Docker注册表中?然后将最终的镜像共享给您的同事。

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


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

* 来自 漂亮的例子展示Docker + Miniconda + Flask

关于在Dockerfile中执行source activate <env>,你需要:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接