python - Dockerize 现有的 Django 项目

标签 python django docker docker-compose dockerfile

我不知道如何对现有的 Django 应用进行 docker 化。 我读过 this official manual通过 Docker 解释如何在创建 Docker 镜像期间创建 Django 项目,但我需要的是使用相同的方法对现有项目进行 dockerize。

这种方法的主要目的是我不需要一直在本地构建 docker 镜像,相反我想要实现的是将我的代码推送到一个远程存储库,该存储库附加了 docker-hub watcher 并且作为一旦代码库更新,它就会在服务器上自动构建。

现在我的 Dockerfile 看起来像:

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install Django
RUN pip install djangorestframework
RUN pip install PyQRCode
ADD . /code/

谁能解释一下我应该如何编写 Dockerfile 以及我是否需要使用 docker-compose.yml(如果是:如何?)来实现我描述的功能?

Solution for this question:

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
RUN pip install *name of package*
RUN pip install *name of another package*
ADD . /code/
EXPOSE 8000
CMD python3 manage.py runserver 0.0.0.0:8000

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
EXPOSE 8000
CMD python3 manage.py runserver 0.0.0.0:8000

requirements.txt 应该是一个简单的包列表,例如:

Django==1.11
djangorestframework
pyqrcode
pypng

最佳答案

这个问题太宽泛了。您创建的 Dockerfile 会怎样?

除非您有多个需要交互的容器,否则您不需要 docker compose。

当前 Dockerfile 的一些一般观察结果:

  • 最好将 pip install 命令合并为一条语句。在 docker 中,每个语句都会创建一个文件系统层,而 pip install 命令之间的层可能没有任何用处。
  • 最好在 setup.py 或 requirements.txt 文件 (pip install -r requirements.txt) 中声明依赖项,并使用固定版本号 (foopackage==0.0.1) 以确保可重复构建。
  • 我建议将您的 Django 应用程序打包到 python 包中并使用 pip 安装它(cd/code/; pip install .),而不是直接添加代码目录。
  • 您缺少执行应用程序的语句(CMD 或 ENTRYPOINT)。参见 https://docs.docker.com/engine/reference/builder/#cmd

关于python - Dockerize 现有的 Django 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47270587/

相关文章:

python - 在 Web 应用程序中使用 Python 语言环境或同等语言环境?

python - 删除对象时从媒体中删除图像

docker desktop swarm 服务端口未暴露(入口模式)

python - 根据描述,numpy.linalg.lstsq rcond 参数是否不起作用?

python - 如何使用 Python 注册 Azure 资源提供程序

python - 如何知道脚本是从 django 还是从 cli 运行的

bash - 使 $ docker 为 docker-compose 编写命令

docker - 默认启用 scl 工具集

python - 将列表切片为最大字符串大小

python - Scipy.signal.spectrogram输出长度