> Как сконфигурировать 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:

YAML
version: '3.8'
services:
db:
image: postgres:15
environment:
POSTGRES_DB: mydb
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- db
environment:
- DATABASE_URL=postgres://myuser:mypassword@db:5432/mydb
volumes:
postgres_data:

Ключевые моменты:

  • В docker-compose.yml сервис db использует PostgreSQL с именованным томом для сохранения данных.
  • Сервис web собирает образ из Dockerfile, монтирует текущую директорию для hot-reload при разработке, и указывает зависимость от db.
  • Переменная окружения DATABASE_URL (или отдельные параметры в settings.py) настраивает подключение к БД через имя сервиса (db).
  • Для продакшена замените runserver на gunicorn и уберите монтирование тома с кодом.

Пример настройки settings.py:

PYTHON
import os
from pathlib import Path
DATABASES = {
'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.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью