Dockerizing现有的Django项目

我无法包装如何dockerize现有的Django应用程序。 我已经阅读了Docker 官方手册 ,解释了如何在创buildDocker镜像的过程中创buildDjango项目,但是我需要的是使用相同的方法dockerize现有的项目。

这种方法的主要目的是,我不需要在本地build立docker镜像,而是想将我的代码推送到一个远程仓库,docker-hub观察器连接到它,一旦代码库更新它正在服务器上自动构build。

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

这个问题太广泛了。 你创build的Dockerfile会发生什么?

除非你有多个需要交互的容器,否则你不需要docker组合。

来自您当前的Dockerfile的一些常规观察:

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

@AlexForbes提出了非常好的观点。 但是,如果你想为Django提供一个超级简单的Dockerfile ,你可以这样做:

 FROM python:3-onbuild RUN python manage.py collectstatic CMD ["python", "manage.py"] 

然后你运行你的容器:

 docker run myimagename runserver 

-onbuild修饰符可以完成你所需要的大部分工作。 它创build/usr/src/app ,将其设置为工作目录,将所有源代码复制到内部,然后运行pip install -r requirements.txt (忘记运行)。 最后,我们收集静态信息(如果静态托pipe在某处,可能不需要您的情况),并将缺省命令设置为manage.py这样一切都很容易运行。

如果您必须运行其他容器(如Celery,Redis或任何其他不是由您的环境提供的后台任务或服务器),则需要docker-compose