我无法理解如何对现有 Django 应用程序进行 docker 化。 我已经阅读了 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
(如果是:如何?)来实现我描述的功能?
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 -r requirements.txt
)中声明依赖项,并使用固定版本号(foopackage==0.0.1
)以确保可重复构建。cd /code/; pip install .
) 安装它,而不是直接添加代码目录。警告:
-onbuild
图像已被弃用。
@AlexForbes 提出了非常好的观点。但如果你想要一个超级简单的 Django
Dockerfile
,你可能可以这样做:
FROM python:3-onbuild
RUN python manage.py collectstatic
CMD ["python", "manage.py"]
然后您可以使用以下命令运行容器:
docker run myimagename runserver
小小的
-onbuild
修饰符可以满足您的大部分需求。它创建 /usr/src/app
,将其设置为工作目录,将所有源代码复制到其中,然后运行 pip install -r requirements.txt
(您忘记运行)。最后,我们收集静态数据(如果静态数据托管在某处,则您的情况可能不需要),并将默认命令设置为 manage.py
,以便一切都很容易运行。
如果您必须运行其他容器,如 Celery、Redis 或您的环境未提供的任何其他后台任务或服务器,则需要
docker-compose
。
我实际上在https://rehalcon.blogspot.mx/2018/03/dockerize-your-django-app-for-local.html
中写了一篇关于此的文章我的情况非常相似,但它添加了 MySQL 数据库服务和用于代码机密的环境变量,以及使用
docker-compose
(macOS 中需要)。我还使用 python:2.7-slim dockerparten 图像来代替,以使图像更小(低于 150MB)。