如何使用 Docker 迭代开发他们的应用程序?我才刚刚开始使用它,我的工作流程很慢,所以我很确定我用错了。
我正在关注 Youtube 上的 python 机器学习类(class),所以我正在使用 Docker 来处理 python 3。我知道我可以使用 virtualenv 或 VM,但我也想学习 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())
我的工作流程是:
- 从教程中学到新东西
- 更新python文件
- 构建 docker 镜像:
docker build -t myapp .
- 运行应用程序:
docker run my app python/src/main.py
问题:
我怎样才能加快这一切?对于我想尝试的每一个改变,我最终都会重建。这会导致 pip 每次都获取依赖项,这需要很长时间。
与其编辑 python 文件并运行它,不如如何从容器中运行的 python 版本获取交互式 shell?
如果我想让我的程序写出一个文件,我怎样才能在程序完成后将这个文件从容器返回到我的本地系统?
感谢您的帮助!
编辑: 我应该补充一点,这是我通常遵循的在 Docker 中运行一些 python 代码的教程:https://www.civisanalytics.com/blog/using-docker-to-run-python/
最佳答案
加快重建进程
您可以做的最简单的事情就是重新排序您的 Dockerfile。
FROM python
RUN pip install quandl
RUN pip install pandas
COPY . /src
CMD ["python", "/src/main.py"]
这有帮助的原因是 Docker 会为它已经运行的命令重新使用缓存的构建。现在,当您在修改源代码后重建时,它将重新使用 pip
命令的构建结果,因为它们不需要再次运行。它只会运行 COPY
步骤。
获取python shell
您可以在running 容器中执行一个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
处。
关于python - 你是如何用docker迭代开发的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42709032/