python - 你是如何用docker迭代开发的?

标签 python docker

如何使用 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())

我的工作流程是:

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

问题:

  1. 我怎样才能加快这一切?对于我想尝试的每一个改变,我最终都会重建。这会导致 pip 每次都获取依赖项,这需要很长时间。

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

  3. 如果我想让我的程序写出一个文件,我怎样才能在程序完成后将这个文件从容器返回到我的本地系统?

感谢您的帮助!

编辑: 我应该补充一点,这是我通常遵循的在 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/

相关文章:

image - docker run image 导致语法错误/bin/sh

python - Python如何解释字符串中的反斜杠?

python - 将用户构建的 json 编码器传递给 Flask 的 jsonify

python - 使用 str.format 输出到文件时出现 ValueError

docker - 此处不允许yml docker-compose错误映射值

mongodb - Mongodb官方镜像errno:111尝试创建副本集时连接被拒绝

docker - WSL : Can't install docker on WSL 2, Ubuntu 18.04

docker - 如何在Docker容器中挂载OpenStack容器

python - (Pyrebase) 错误 : orderBy must be a valid JSON encoded path

python - 如何阅读小部件的样式表?