如何迭代开发与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程是:
- 从教程中学习一些新东西
- 更新python文件
- 构builddocker镜像:
docker build -t myapp .
- 运行应用程序:
docker run my app python /src/main.py
问题:
-
我怎样才能加速这一切? 对于每一个我想尝试的改变,我都会重build。 这导致每次都需要太长的时间来获得依赖关系。
-
而不是编辑一个python文件并运行它,如何从容器中运行的python版本获得交互式shell?
-
如果我想让我的程序写出一个文件,那么在程序结束后如何从容器中将这个文件返回到本地系统?
谢谢您的帮助!
编辑:我应该补充,这是我一般在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
。