> Как сконфигурировать Docker и Docker Compose для Django приложения (Python)
Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы
Компании: Стилсофт
Стек: Python, Docker
> Пример ответа
Для конфигурации Django-приложения с Docker и Docker Compose создайте два основных файла: Dockerfile и docker-compose.yml.
Dockerfile (в корне проекта):
FROM python:3.11-slim WORKDIR /app # Установка системных зависимостей (если нужны, например, для psycopg2) RUN apt-get update && apt-get install -y --no-install-recommends gcc libpq-dev && rm -rf /var/lib/apt/lists/* # Копирование и установка Python-зависимостей COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Копирование кода приложения COPY . . # Команда для запуска (можно переопределить в docker-compose) CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]
docker-compose.yml:
YAMLversion: '3.8'services:db:image: postgres:15environment:POSTGRES_DB: mydbPOSTGRES_USER: myuserPOSTGRES_PASSWORD: mypasswordvolumes:- postgres_data:/var/lib/postgresql/dataports:- "5432:5432"web:build: .command: python manage.py runserver 0.0.0.0:8000volumes:- .:/appports:- "8000:8000"depends_on:- dbenvironment:- DATABASE_URL=postgres://myuser:mypassword@db:5432/mydbvolumes:postgres_data:
Ключевые моменты:
- В
docker-compose.ymlсервисdbиспользует PostgreSQL с именованным томом для сохранения данных. - Сервис
webсобирает образ изDockerfile, монтирует текущую директорию для hot-reload при разработке, и указывает зависимость отdb. - Переменная окружения
DATABASE_URL(или отдельные параметры вsettings.py) настраивает подключение к БД через имя сервиса (db). - Для продакшена замените
runserverнаgunicornи уберите монтирование тома с кодом.
Пример настройки settings.py:
PYTHONimport osfrom pathlib import PathDATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql','NAME': os.environ.get('POSTGRES_DB', 'mydb'),'USER': os.environ.get('POSTGRES_USER', 'myuser'),'PASSWORD': os.environ.get('POSTGRES_PASSWORD', 'mypassword'),'HOST': os.environ.get('DB_HOST', 'db'),'PORT': '5432',}}
Запуск: docker-compose up --build. Для миграций: docker-compose exec web python manage.py migrate.
> Похожие задачи по Python
Какие варианты реализации взаимодействия фронтенда и бэкенда для долгих задач с отображением прогресса
Как конкретизировать промежуточную таблицу many-to-many в Django для добавления дополнительных полей
Какие инструменты DRF и Django использовать для реализации бизнес-логики сохранения заказа?
Был ли опыт работы с MongoDB или аналогичными документно-ориентированными базами данных
> Похожие задачи по backend
Какие варианты реализации взаимодействия фронтенда и бэкенда для долгих задач с отображением прогресса
Как конкретизировать промежуточную таблицу many-to-many в Django для добавления дополнительных полей
Какие инструменты DRF и Django использовать для реализации бизнес-логики сохранения заказа?
Был ли опыт работы с MongoDB или аналогичными документно-ориентированными базами данных
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью