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

Mig*_*ano 4 python django docker

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

文件

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

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

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

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

bon*_*kic 8

人们通常如何解决这个问题是docker-compose为开发和生产环境提供单独的配置,例如local.ymlproduction.yml。这样你就可以runserver在开发(你可能会发现更合适,因为你会得到很多调试信息)和gunicorn生产时使用。

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