我试图想象一个可以应用于科学工作环境的工作流程。我的工作涉及做一些科学编码,主要是Python,熊猫,numpy和朋友。有时我必须使用一些不是科学界通用标准的模块,有时我必须在我的模拟链中集成一些已编译的代码。我运行的代码大部分时间与IPython笔记本并行。
我对docker有什么兴趣?
我可以创建一个包含我的代码及其工作环境的docker。然后我可以将docker发送到我的学院,而不要求他们改变他们的工作环境,例如,安装一个过时的模块版本,以便他们可以运行我的代码。
我想到的工作流草案如下:
有人可以给我一些指示,我应该考虑进一步开发这个工作流程吗?引起我兴趣的一点是:在docker上运行的代码可以在机器的几个核心上进行并行处理吗?例如,连接到群集的IPython笔记本。
答案 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>"