我正在学习使用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的新手,但我真的很喜欢它,我想了解更多有关它的信息。
答案 0 :(得分:1)
人们通常采用的方法是为开发和生产环境使用单独的docker-compose
配置,例如local.yml
和production.yml
。这样一来,您就可以在开发过程中使用runserver
(可能会发现它更合适,因为会获得很多调试信息),并且可以在生产环境中使用gunicorn
。
我建议您研究https://github.com/pydanny/cookiecutter-django项目,该项目集成了许多Django良好实践以及良好的Docker配置。您可以使用cookiecutter
创建一个测试项目,然后检查它们如何进行Docker设置,包括环境变量。