python - Docker for django 开发自动更新

标签 python django docker

使用的软件:

  • Django 2.2.7
  • Docker 19.03.4 社区
  • 操作系统 = Ubuntu 18.04

  • 我来自 vagrant 的背景,之前我已经建立了一个环境,我基本上有一个类似于 virtualenv 但在虚拟机内部的环境。也就是说;我启动了 vagrant 机器并使用配置安装了所有必需的包和要求。然后在我的主机上安装了 Eclipse 并找到了 django 项目。对我来说,最后一步是使用共享资源将它们绑定(bind)在一起。通过这种方式,我确保始终拥有最新的代码。

    对于那些不熟悉 Django 的人; runserver 命令默认设置为监听代码更改并在每次更改时“重新启动”(不是真的)立即反射(reflect)浏览器中的更改。

    然后我会在虚拟机内部运行“runserver”命令,从而能够以这种方式进行开发。

    现在使用 docker(我必须将一些软件捆绑在一起并最终使用 docker 部署)我尝试在某种程度上复制这种情况。我使用基于 python-3.7.5-stretch 的简单 Dockerfile 启动并运行了我的 django docker。容器和 django 本身一样运行良好,但是代码现在是内置的(因为没有更好的词)。这当然是由于我在文件中的复制命令:
    FROM python:3.7.5-stretch
    
    ADD requirements.txt requirements.txt
    RUN pip install -r requirements.txt
    
    RUN mkdir /app
    WORKDIR /app
    
    ADD . /app/
    
    ENV PYTHONUNBUFFERED 1
    ENV LANG C.UTF-8
    ENV DEBIAN_FRONTEND=noninteractive
    
    # install environment dependencies
    RUN pip3 install --upgrade pip
    
    EXPOSE 8000
    EXPOSE 8280
    
    CMD ["python", "manage.py", "makemigrations"]
    CMD ["python", "manage.py", "migrate"]
    CMD ["python", "/app/manage.py", "runserver", "0.0.0.0:8000"]
    
    

    这意味着为了在每次更改时更新代码,我需要构建镜像并重新运行服务器。鉴于我每分钟多次这样做,这似乎是一个巨大的矫枉过正。

    我知道卷,但似乎它们安装在容器级别,而不是图像级别。实际上,这意味着所有命令都将在手动初始化后运行。不过,容器将在此之前停止。

    长话短说:如果可能的话,我能做些什么来模拟类似 vagrant 的情况,即容器会自动读取(或推送)代码?

    TLDR:我想要一种情况,我可以在 docker 中实时更新 django 代码,而无需不断重建图像。有什么选择吗?

    最佳答案

    我在评论中的链接是错误的。我的意思是链接这个answer .给定的解决方案可能比您使用卷的解决方案要容易一些。

    如果你有一个镜像并通过以下命令大致启动它:

    $ docker run --rm -it <image_name>
    

    使用 --mount选项您可以将当前目录挂载到您的/app容器中的文件夹如下:
    $ docker run --rm -it --mount src="$(pwd)",target=/app,type=bind <image_name>
    

    文件更改现在应该重新启动容器中的 Django 服务器。

    关于python - Docker for django 开发自动更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58750581/

    相关文章:

    python - 用于处理多元多项式的库

    python - Django Haystack - 面数限制为 10 个吗?

    python - 在我的本地盒子上运行我的 django webapp 时,为什么我使用 firefox 7.0.1 时出现黑屏

    django - 仅在 django admin 中显示年份,YearField 而不是 DateField?

    node.js - 使用 Gitlab Runner 部署到 Digital Ocean 时出现 "docker pull"需要恰好 1 个参数错误

    java - 为什么我的 docker 容器应用程序无法与容器 couchbase 数据库通信?

    python - 带有 DirectRunner (SUBPROCESS_SDK) 的 Apache Beam 只使用一个工作人员,我如何强制它使用所有可用的工作人员?

    python - 功能等同于 Python 语句逻辑

    nginx - 反向代理背后的 Gitlab Docker 容器

    python - 在字典理解语句中迭代