你如何用docker迭代开发?

时间:2017-03-10 02:21:40

标签: python docker

如何使用Docker迭代开发他们的应用程序?我刚刚开始使用它,而且我的工作流程非常慢,所以我很确定我错误地使用它。

我跟随Youtube上的python机器学习课程,所以我使用Docker来使用python 3.我知道我可以使用virtualenv或VM,但我也想学习Docker忍受我。

我的根目录如下所示:

Dockerfile  main.py*

我的码头文件:

FROM python
COPY . /src
RUN pip install quandl
RUN pip install pandas
CMD ["python", "/src/main.py"]

Python文件:

#!/usr/bin/env python

import pandas as pd
import quandl

print("Hello world from main.py")

df = quandl.get("WIKI/GOOGL")

print("getting data frame for WIKI/GOOGL")
print(df.head())

我的工作流程是:

  1. 从教程中了解新内容
  2. 更新python文件
  3. 构建泊坞窗图片:docker build -t myapp .
  4. 运行应用:docker run my app python /src/main.py
  5. 问题:

    1. 我怎样才能加速这一切?对于我想要尝试的每一个改变,我最终都会重建。这会导致pip每次都变得依赖,这会占用太长的时间。

    2. 如何从容器中运行的python版本获取交互式shell,而不是编辑python文件并运行它?

    3. 如果我希望我的程序写出一个文件,那么在程序完成后如何从容器中将该文件恢复到我的本地系统?

    4. 感谢您的帮助!

      编辑: 我应该补充一下,这是我一般在Docker中运行一些python代码的教程:https://www.civisanalytics.com/blog/using-docker-to-run-python/

1 个答案:

答案 0 :(得分:6)

加快重建过程

您可以做的最简单的事情是重新排序您的Dockerfile。

FROM python
RUN pip install quandl
RUN pip install pandas
COPY . /src
CMD ["python", "/src/main.py"]

这有助于Docker将重新使用缓存的构建它已经运行的命令。现在,在修改源代码后重建时,它将重新使用pip命令的构建结果,因为它们不需要再次运行。它只会运行COPY步骤。

获取python shell

您可以在运行容器中执行shell并运行python命令。

docker exec -it <container-id> bash
python <...>

或者,您可以使用只是一个shell 运行容器,并完全跳过运行您的应用程序(然后根据需要运行它)。

docker run -it <image> bash
python <...>

在容器外写字

将外部目录挂载到容器中。然后写入已安装的路径。

docker run -v /local/path:/path <.. rest of command ..>

然后当您在容器中写入/path/file时,该文件将显示在/local/path/file的容器外部。