使用的软件:
我来自 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/