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

时间:2019-01-29 05:56:50

标签: python django docker

我正在学习使用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" ]

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:

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

我希望您能对我的项目提出的任何建议都得到我的好评,正如我所评论的那样,我是Docker的新手,但我真的很喜欢它,我想了解更多有关它的信息。

1 个答案:

答案 0 :(得分:1)

人们通常采用的方法是为开发和生产环境使用单独的docker-compose配置,例如local.ymlproduction.yml。这样一来,您就可以在开发过程中使用runserver(可能会发现它更合适,因为会获得很多调试信息),并且可以在生产环境中使用gunicorn

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