在Docker上自动重新加载Django服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Docker上自动重新加载Django服务器相关的知识,希望对你有一定的参考价值。

我正在学习使用Docker,我从昨天开始遇到问题(在我求助之前,我开始调查但是我无法解决问题),我的问题是我在本地机器上有一个Django项目,我与Docker也有相同的项目,但是当我更改本地项目时,它不会反映在项目正在运行的容器中。如果你能帮助我,我将非常感激。谢谢。

Dockerfile

FROM python:3.7-alpine

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN mkdir /code
WORKDIR /code

RUN apk update 
    && apk add --virtual build-deps gcc python3-dev musl-dev 
    && apk add postgresql-dev 
    && pip install psycopg2 
    && apk del build-deps

RUN pip install --upgrade pip
RUN pip install pipenv

COPY ./Pipfile /code
RUN pipenv install --skip-lock --system --dev

COPY ./entrypoint.sh /code

COPY . /code

ENTRYPOINT [ "/code/entrypoint.sh" ]

泊坞窗,compose.yml

# version de docker-compose con la que trabajaremos
version: '3'

# definiendo los servicios que correran en nuestro contenedor
services:
  web:
    restart: always
    build: .
    command: gunicorn app.wsgi:application --bind 0.0.0.0:8000 #python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
      - static_volume:/code/staticfiles
      - media_volume:/code/mediafiles
    expose:
      - 8000
    environment:
      - SQL_ENGINE=django.db.backends.postgresql
      - SQL_DATABASE=postgres
      - SQL_USER=postgres
      - SQL_PASSWORD=postgres
      - SQL_HOST=db
      - SQL_PORT=5432
      - DATABASE=postgres
    depends_on:
      - db
    env_file: .env
  db:
    restart: always
    image: postgres:10.5-alpine
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
  nginx:
    restart: always
    build: ./nginx
    volumes:
      - static_volume:/code/staticfiles
      - media_volume:/code/mediafiles
    ports:
      - 1337:80
    depends_on:
      - web

volumes:
  static_volume:
  media_volume:

这里有点疑问,将环境变量存储在Dockerfile或docker-compose中是一个好习惯吗?我使用.env但我在许多地方已经看到它们将变量存储在docker-compose中,如代码所示以上

我希望你能帮助我,关于我的项目的任何建议都很受欢迎,因为我评论说,我是Docker的新手,但我非常喜欢它,我想了解更多。

答案

人们通常如何处理这个问题的方法是为开发和生产环境提供单独的docker-compose配置,例如: local.ymlproduction.yml。这样你可以在开发时使用runserver(你可能会发现它更适合,因为你将获得大量的调试信息)和生产中的gunicorn

我建议调查https://github.com/pydanny/cookiecutter-django项目,该项目集成了许多Django良好实践以及开箱即用的Docker配置。您可以使用cookiecutter创建测试项目,然后检查它们如何进行Docker设置,包括环境变量。

以上是关于在Docker上自动重新加载Django服务器的主要内容,如果未能解决你的问题,请参考以下文章

文件更改时如何自动重新加载Django?

如何自动重新加载我的 gunicorn 服务器?

如何使用spring dev工具在docker中自动重新加载spring boot应用程序

git webhook自动部署服务端代码django python docker等

为啥使用 Docker 容器的 NextJS 在更改开发环境的代码后没有重新加载?

重新启动 Nginx 或在证书更改时重新加载证书缓存