Dockerizing现有的Django项目

Sta*_*ute 5 python django docker dockerfile docker-compose

我无法确定如何对现有的Django应用进行docker化。我已经阅读了Docker的这本官方手册,解释了如何在创建Docker映像期间创建Django项目,但是我需要使用相同的方法对现有项目进行Docker化。

这种方法的主要目的是,我不需要一直在本地构建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/
Run Code Online (Sandbox Code Playgroud)

谁能解释我应该如何构成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
Run Code Online (Sandbox Code Playgroud)

要么

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
Run Code Online (Sandbox Code Playgroud)

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

Django==1.11
djangorestframework
pyqrcode
pypng
Run Code Online (Sandbox Code Playgroud)

Ale*_*bes 3

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