我无法确定如何对现有的Django应用进行docker化.
我已经阅读了Docker的this official manual,其中介绍了如何在创建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/
谁能解释我应该如何构成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
除非您有多个需要交互的容器,否则不需要docker compose.
当前Dockerfile的一些一般性观察:
>最好将pip install命令折叠成一个语句.在docker中,每个语句都会创建一个文件系统层,而pip install命令之间的层可能没有用处.
>最好在具有固定版本号(foopackage == 0.0.1)的setup.py或requirements.txt文件(pip install -r requirements.txt)中声明依赖项,以确保可重复构建.
>我建议将您的Django应用打包到一个python包中,然后使用pip(cd / code /; pip install.)安装,而不是直接添加代码目录.
>您缺少执行该应用程序的语句(CMD或ENTRYPOINT).查看https://docs.docker.com/engine/reference/builder/#cmd