如何迭代开发与docker?

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

我正在Youtube上跟随一个python机器学习课程,所以我使用Docker来处理python 3.我知道我可以使用virtualenv或虚拟机,但是我也想学习Docker,所以请耐心等待。

我的根目录如下所示:

Dockerfile main.py* 

我的docker文件:

 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()) 

我的工作stream程是:

  1. 从教程中学习一些新东西
  2. 更新python文件
  3. 构builddocker镜像: docker build -t myapp .
  4. 运行应用程序: docker run my app python /src/main.py

问题:

  1. 我怎样才能加速这一切? 对于每一个我想尝试的改变,我都会重build。 这导致每次都需要太长的时间来获得依赖关系。

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

  3. 如果我想让我的程序写出一个文件,那么在程序结束后如何从容器中将这个文件返回到本地系统?

谢谢您的帮助!

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

加快重build进程

你可以做的最简单的事情是重新sorting你的Dockerfile。

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

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

获得一个python shell

你可以在正在运行的容器中运行一个shell并运行你的python命令。

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

或者,你可以运行一个只有一个shell的容器,并跳过完全运行你的应用程序(然后,不pipe你想要运行它)。

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

写在容器外面

将外部目录挂载到容器中。 然后写入挂载的path。

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

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