Введение
Контейнеризация стала отраслевым стандартом для изоляции сред. Если вам необходимо быстро запустить джанго в докере, 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.