Гид по технологиям

Как контейнеризовать Django-приложение с помощью Docker

7 min read DevOps Обновлено 25 Dec 2025
Контейнеризация Django с Docker — руководство
Контейнеризация Django с Docker — руководство

Контейнер грузится краном — символ контейнеризации приложений

Docker — одна из самых популярных платформ для контейнеризации, позволяющая управлять контейнеризированными приложениями. Docker предоставляет архитектуру и инструменты для автоматизации контейнеров, безопасности, настройки и корпоративной поддержки.

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

  • Клиент Docker (командная строка) — отправляет команды демону.
  • Docker Host (демон) — собирает образы и запускает контейнеры.
  • Docker Registry — хранилище образов (публичное Docker Hub или приватные регистры).

В этом руководстве вы поэтапно контейнеризуете простое Django‑приложение: сначала установите Docker на выбранную ОС, затем создадите Dockerfile, соберёте образ, запустите контейнер и узнаете, как безопасно и удобно работать с результатом.

Кому подходит это руководство

  • Разработчикам, которые хотят перенести Django‑приложение в контейнер.
  • Инженерам DevOps, которые готовят простой CI/CD‑путь.
  • Тем, кто впервые знакомится с Docker и хочет пошаговый практический пример.

Определения в одну строку:

  • Образ (image): неизменяемый шаблон, из которого создают контейнер.
  • Контейнер: запущенная инстанция образа с выделёнными ресурсами и изоляцией.

Требования и подготовка

  • Минимальные требования: 4 ГБ ОЗУ рекомендуется для локальной разработки с Docker Desktop.
  • Убедитесь, что у вас есть права администратора (sudo на Linux, учётная запись с правами администратора на macOS/Windows).
  • Установленный Python и Django не обязательны локально, но полезны для разработки вне контейнера.

В этом пошаговом руководстве мы используем простой пример Django‑приложения и локальный рабочий поток.

Установка Docker на Ubuntu

Важно: здесь приведён типичный, безопасный способ установки Docker Engine на Ubuntu через официальный репозиторий Docker.

  1. Обновите индексы пакетов и установите зависимости:
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
  1. Добавьте официальный GPG‑ключ Docker и репозиторий:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "\n"$(lsb_release -cs)" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Установите Docker Engine и Docker Compose (пакетная версия или плагины):
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. Проверьте установку:
sudo systemctl status docker
docker --version

Совет: при желании добавьте свою учётную запись в группу docker, чтобы запускать команды без sudo:

sudo usermod -aG docker $USER
# затем перелогиньтесь

Примечание: в корпоративных средах может потребоваться прокси/VPN — уточните у админов.

Установка Docker на macOS

Требование: macOS 11 (Big Sur) или новее.

  1. Скачайте Docker Desktop с сайта Docker Hub.
  2. Откройте загруженный образ и запустите установщик.
  3. Дважды щёлкните по файлу Docker.dmg, затем перетащите значок Docker в папку Applications.
  4. Запустите Docker через Docker.app (двойной щелчок) и дождитесь появления логотипа кита в строке меню — это индикатор, что Docker запущен.

Альтернатива: можно установить Docker через командную строку, следуя официальной инструкции для Mac на сайте Docker.

Установка Docker на Windows

Требование: Windows 10/11 (с поддержкой Hyper‑V/WSL2) или Windows Server с поддержкой Docker Desktop.

  1. Скачайте установщик Docker Desktop с сайта Docker Hub.
  2. Запустите Docker Desktop Installer.exe и следуйте мастеру установки.
  3. На странице конфигурации включите компонент Hyper‑V (или выберите WSL2, если предпочитаете).
  4. Разрешите все требуемые права и дождитесь завершения установки.
  5. Нажмите Close по окончании и запустите Docker Desktop через меню «Пуск».

Альтернатива: для серверных установок используйте Docker Engine или WSL2 на Windows 10/11 — официальная документация объясняет варианты.

Создание простого Django‑приложения (кратко)

Если у вас уже есть проект — переходите к разделу о Dockerfile. Если нет, создайте минимальный проект для примера:

python3 -m venv venv
source venv/bin/activate
pip install django
django-admin startproject mysite .
python manage.py migrate
python manage.py runserver 127.0.0.1:8000

Откройте http://127.0.0.1:8000 — вы должны увидеть стартовую страницу Django.

Браузер с заголовком Hello docker — пример приложения в браузере

Создание Dockerfile

Dockerfile — это набор инструкций для сборки образа. Ниже приведён корректный, минимальный Dockerfile для простого Django‑приложения.

FROM python:3.10-slim

# Устанавливаем рабочую директорию
WORKDIR /app

# Скопируем зависимости и установим их
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r /app/requirements.txt

# Скопируем код приложения
COPY . /app

# Откроем порт приложения
EXPOSE 8000

# Точка входа и команда запуска
ENTRYPOINT ["python"]
CMD ["manage.py", "runserver", "0.0.0.0:8000"]

Пояснения к ключевым инструкциям:

  • FROM: базовый образ (здесь официальный образ Python). От него наследуются необходимые системные пакеты и интерпретатор.
  • WORKDIR: устанавливает рабочую директорию внутри образа (/app).
  • COPY/ADD: переносит файлы из контекста сборки в образ. COPY предпочтительнее для простого копирования.
  • RUN: выполняет команду на этапе сборки (используется для установки зависимостей).
  • EXPOSE: документирует порт, который использует приложение (не открывает порт на хосте сам по себе).
  • ENTRYPOINT/CMD: указывают команду, которая выполнится при запуске контейнера. ENTRYPOINT задаёт исполняемую основу, CMD — аргументы по умолчанию.

Важно: избегайте копирования секретов в образ. Файлы с паролями/ключами лучше передавать через переменные окружения или секреты регистра.

Короткий чеклист перед сборкой:

  • В корне проекта должен быть корректный requirements.txt (или pyproject.toml/poetry.lock).
  • manage.py и настройки приложения присутствуют.
  • .dockerignore содержит минимум: venv, pycache, .git и т.п.

Пример .dockerignore

venv
__pycache__
*.pyc
.git
.env

Сборка Docker‑образа

В корне проекта выполните команду сборки:

docker build --tag docker-django-app:latest .

Во время сборки Docker создаёт слои по каждой инструкции Dockerfile. Это экономит место и ускоряет повторные сборки, когда часть слоёв не меняется.

Если сборка прошла успешно, вы увидите в списке образов ваш образ:

docker images | grep docker-django-app

Успешная сборка образа Docker

Новый образ в списке образов Docker

Запуск контейнера

Запустите контейнер и пробросьте порт хоста на порт контейнера:

docker run --name docker-djangoapp -p 8000:8000 -d docker-django-app:latest

Примечание: в примере Dockerfile приложение слушает порт 8000 внутри контейнера, поэтому корректное сопоставление портов — 8000:8000. Если в Dockerfile EXPOSE указан другой порт, указывайте соответствующий хост:контейнер.

Команда вернёт идентификатор контейнера, а docker ps покажет запущенную инстанцию:

docker ps

Запущенный контейнер в списке контейнеров Docker

Откройте http://127.0.0.1:8000 — приложение будет доступно локально.

Частые ошибки и как их исправить

  • Проблема: 404 или соединение не устанавливается.
    • Проверка: правильно ли проброшен порт (пара host:container), слушает ли приложение на 0.0.0.0.
  • Проблема: контейнер сразу завершает работу.
    • Проверка: посмотрите логи docker logs ; возможно, исполняемая команда завершилась с ошибкой.
  • Проблема: зависимости не установились.
    • Проверка: корректность requirements.txt; при необходимости пересоберите образ с флагом --no-cache.
  • Проблема: база данных в контейнере не доступна.
    • Совет: используйте отдельный контейнер для БД или управляемый сервис; передавайте параметры подключения через переменные окружения.

Отладка и команды полезные в работе

  • Посмотреть логи:
docker logs -f docker-djangoapp
  • Остановить и удалить контейнеры:
docker stop docker-djangoapp
docker rm docker-djangoapp
  • Зайти внутрь работающего контейнера для отладки:
docker exec -it docker-djangoapp /bin/bash
  • Пересобрать образ без использования кэша:
docker build --no-cache -t docker-django-app:latest .

Отправка образа в реестр (Docker Hub)

  1. Войдите в Docker Hub:
docker login
  1. Тегируйте образ в формате вашей учётной записи:
docker tag docker-django-app:latest yourusername/docker-django-app:latest
  1. Отправьте образ:
docker push yourusername/docker-django-app:latest

Регистр хранит образы и даёт возможность получать их на других машинах или в CI/CD.

Безопасность и лучшие практики

  • Не храните секреты в образах. Используйте переменные окружения, Vault или секреты регистра.
  • Минимизируйте базовый образ (например, slim или Alpine) для уменьшения поверхности атаки.
  • Обновляйте зависимости и регулярные сканирования образов (например, docker scan).
  • Отключайте привилегированные режимы и лимитируйте ресурсы контейнера с флагами --memory и --cpus.

Альтернативные подходы

  • docker-compose: удобен для локальной разработки с несколькими сервисами (БД, кэш). Пример docker-compose.yml упрощает запуск нескольких контейнеров.
  • Podman: альтернатива без daemon‑архитектуры для Linux environments.
  • Использование Kubernetes: для оркестрации и масштабирования в продакшене.

Пример docker-compose.yml (мини‑состав для Django + PostgreSQL)

version: '3.8'
services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    environment:
      - DEBUG=1
      - DATABASE_URL=postgres://postgres:postgres@db:5432/postgres
  db:
    image: postgres:14
    environment:
      POSTGRES_PASSWORD: postgres
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

Роль‑ориентированные чеклисты

Разработчик:

  • Убедиться, что приложение запускается локально без контейнера.
  • Подготовить requirements.txt и .dockerignore.
  • Добавить конфигурацию для логов и переменных окружения.

Инженер DevOps:

  • Написать Dockerfile с минимальным базовым образом.
  • Настроить CI/CD pipeline для сборки и пуша образов.
  • Организовать сканирование образов и управление секретами.

Техлид / Архитектор:

  • Определить стратегию оркестрации (docker-compose / Kubernetes).
  • Настроить политики безопасности и мониторинга.

Критерии приёмки

  • Образ собирается без ошибок и занимает разумный размер.
  • Контейнер запускается и приложение доступно по ожидаемому порту.
  • Нет встроенных секретов в образе.
  • Тесты приложения, если есть, проходят внутри контейнера или CI.

Ментальные модели и когда Docker не подходит

Ментальная модель: образ — это снимок файловой системы и инструкций; контейнер — запущенный экземпляр этого снимка с выделением ресурсов. Docker хорошо подходит для изоляции зависимостей и воспроизводимости среды.

Когда Docker может быть не лучшим выбором:

  • Микросервисы не нужны, и приложение монолитное с низким числом зависимостей — возможно, достаточно виртуальной машины.
  • Ограничения по лицензированию или политика безопасности в организации запрещают использование контейнеров.

Короткий план миграции на продакшен

  1. Оцените требования к масштабированию и хранению состояния.
  2. Выберите оркестратор (Kubernetes, ECS, Docker Swarm).
  3. Настройте CI/CD: сборка → тесты → сканирование → push в реестр → деплой.
  4. Настройте мониторинг, логирование и управление секретами.

Шаблоны и сниппеты

  • Команда для быстрой сборки и запуска (в одну строку для разработки):
docker build -t local-django . && docker run --rm -p 8000:8000 -v "$(pwd):/app" local-django
  • Команда для просмотра последних логов:
docker logs -f $(docker ps -ql)

Короткое объявление для команды (100–200 слов)

Мы добавили в репозиторий Dockerfile и docker-compose.yml для быстрого запуска локального окружения Django. Теперь любой разработчик может собрать образ и запустить приложение командой docker-compose up — это ускорит подготовку окружения и упростит интеграцию с CI. Пожалуйста, проверьте .dockerignore и не добавляйте секреты в образ. Для продакшен‑деплоя мы рекомендуем использовать внешний реестр и оркестратор (Kubernetes/ECS) для управления масштабируемостью и безопасностью.

Заключение

Контейнеризация Django‑приложения с помощью Docker — это шаг к воспроизводимой и переносимой среде. Основные этапы: установка Docker, создание корректного Dockerfile, сборка образа, запуск контейнера и настройка публикации в реестр. Добавьте безопасность, автоматизацию сборки и оркестрацию при переходе в продакшен.

Важно: начните с простого Dockerfile и постепенно улучшайте пайплайн и безопасность. Удачи с контейнеризацией!

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Рутины Google Home по восходу и заходу солнца
Умный дом

Рутины Google Home по восходу и заходу солнца

MyFitnessPal на Apple Watch: установка и синхронизация
Фитнес

MyFitnessPal на Apple Watch: установка и синхронизация

Звонки между устройствами Nest и Google Duo
Смарт-дом

Звонки между устройствами Nest и Google Duo

Нет доступа к Интернету по Ethernet — быстрое решение
Сеть

Нет доступа к Интернету по Ethernet — быстрое решение

Собрать кастомную механическую клавиатуру
Hardware

Собрать кастомную механическую клавиатуру

Поиск в Linux: find, locate и другие команды
Linux

Поиск в Linux: find, locate и другие команды