Как развернуть Django в Docker Compose за 5 минут

Как развернуть Django в Docker Compose за 5 минут

Введение

Контейнеризация стала отраслевым стандартом для изоляции сред. Если вам необходимо быстро запустить джанго в докере, Docker Compose предоставляет оптимальный механизм для оркестрации мультиконтейнерных приложений. Данный подход полностью решает проблему несовместимости системных библиотек и версий интерпретатора, обеспечивая предсказуемость на всех этапах CI/CD.

Подготовка окружения

Создайте рабочую директорию и инициализируйте минимальный проект. Для локальной разработки часто достаточно встроенной SQLite, однако архитектура предполагает готовность к PostgreSQL. Ключевым элементом выступает python приложение, упакованное в легковесный образ на базе Slim. Структура проекта остается плоской для удобства навигации.

Dockerfile

Файл описывает инструкцию сборки. Мы используем многоступенчатую оптимизацию кэша pip и запускаем сервер через gunicorn для соответствия production-настройкам. Явный указатель портов упрощает отладку сетевых правил.

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "myproject.wsgi:application"]

Оркестрация через docker compose

Конфигурационный файл docker compose связывает веб-сервис с базой данных. В режиме разработки volumes позволяют использовать hot-reload: изменения в коде применяются мгновенно без пересборки образа. Именованный том гарантирует сохранность данных БД при перезапуске.

version: '3.8'
services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: devuser
      POSTGRES_PASSWORD: securepass
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

Процесс запуска

Выполните команду docker compose up --build в терминале. Система скачает базовые образы, соберёт контейнер и выполнит миграции. Успешное развертывание подтверждается выводом о старте Gunicorn и доступностью интерфейса по адресу http://localhost:8000. Логи сервисов агрегируются в консоли для быстрой отладки.

Элемент Роль в стеке Особенности настройки
Dockerfile Формирование образа Оптимизация слоёв для ускорения кэша
docker-compose.yml Управление жизненным циклом Маппинг портов и именованные тома
volumes Синхронизация данных Hot-reload кода и сохранение БД

Вопрос-ответ (FAQ)

Как корректно остановить сервисы без потери данных?

Используйте команду docker compose stop. Она отправит SIGTERM контейнерам, сохраняя именованные тома. Для полного удаления используйте docker compose down -v.

Почему миграции не применяются при старте?

Docker не выполняет manage.py автоматически. Добавьте команду в CMD или создайте entrypoint.sh, который сначала запустит makemigrations и migrate, а затем запустит сервер.

Как передать переменные окружения из хост-машины?

Создайте файл .env в корне проекта. Compose автоматически подгрузит его в сервисы. Это стандартная практика для хранения секретов и настройки DEBUG-флагов.

Comments are closed.