Docker化现有的Django项目

时间:2017-11-13 17:54:07

标签: python django docker docker-compose dockerfile

我无法解决如何将现有Django应用程序停靠的问题。 我已经通过Docker阅读this official manual来解释如何在创建Docker镜像期间创建Django项目,但我需要的是使用相同的方法将现有项目停靠。

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

现在我的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(如果是:如何?)来实现我所描述的功能?

  

此问题的解决方案:

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

OR

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

3 个答案:

答案 0 :(得分:1)

这个问题太宽泛了。您创建的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

答案 1 :(得分:1)

答案 2 :(得分:1)

我实际上在https://rehalcon.blogspot.mx/2018/03/dockerize-your-django-app-for-local.html

中写了一篇关于此的文章

我的情况非常相似,但是它为代码机密添加了MySQL数据库服务和环境变量,以及使用docker-compose(在macOS中需要)。我也使用python:2.7-slim docker parten image来使图像更加错误(150MB以下)。