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

Docker: контейнеризация Django-приложения

7 min read DevOps Обновлено 09 Jan 2026
Docker и контейнеризация Django-приложения
Docker и контейнеризация Django-приложения

Контейнерный контейнер, поднимаемый краном

Что такое Docker и зачем его использовать

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

  • Docker client — командная утилита для управления Docker.
  • Docker host (демон) — процесс, который создаёт и запускает контейнеры.
  • Docker registry — хранилище образов (например, Docker Hub).

Контейнеризация упрощает развертывание, тестирование и доставку приложений. Ниже — практическая инструкция по контейнеризации простого Django‑приложения и шаги установки Docker на популярные ОС.

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

Перед началом убедитесь, что ваша система обновлена. На Ubuntu рекомендуется установить Docker из официального репозитория Docker. Краткие шаги:

  1. Обновите список пакетов: sudo apt update && sudo apt upgrade
  2. Установите зависимости: sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
  3. Добавьте GPG‑ключ Docker и репозиторий официального Docker.
  4. Установите docker-ce, docker-ce-cli и containerd.io.
  5. Запустите и включите сервис: sudo systemctl enable –now docker

Важно: для работы Docker часто требуется добавить пользователя в группу docker: sudo usermod -aG docker $USER и затем перелогиниться.

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

Для macOS требуется версия 11 (Big Sur) или выше. Шаги:

  1. Скачайте Docker с сайта Docker Hub.
  2. Дважды щёлкните Docker.dmg, чтобы открыть инсталлятор.
  3. Перетащите значок Docker в папку Applications.
  4. Чтобы запустить Docker, дважды щёлкните Docker.app.
  5. Если в строке состояния появится логотип китовой иконки — Docker запущен.

Вы также можете установить Docker через командную строку, следуя официальным инструкциям по установке для macOS.

Примечание: Для Apple Silicon (M1/M2) используйте образ, помеченный как совместимый с ARM, или включите эмуляцию, если это требуется.

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

Шаги установки Docker Desktop на Windows:

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

Альтернативно можно установить Docker через WSL2 (Windows Subsystem for Linux) — это часто предпочтительнее для разработчиков, использующих Linux‑инструменты внутри Windows.

Создаём простое Django‑приложение

Для демонстрации предположим, что у вас уже есть минимальное Django‑приложение. Приложение будет доступно по адресу http://127.0.0.1:8000 после запуска.

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

Структура проекта (пример):

  • manage.py
  • requirements.txt
  • mysite/ (пакет Django)
  • app/ (ваше приложение)

requirements.txt должен содержать необходимые зависимости, в том числе django.

Создание Dockerfile

Чтобы упаковать приложение в контейнер, нужно создать образ. Для этого создайте файл с именем Dockerfile в корне проекта и добавьте следующие инструкции:

FROM python:3  
  
WORKDIR /app  
  
ADD . /app/  
  
EXPOSE 8000  
  
COPY requirements.txt /app  
  
RUN pip3 install -r requirements.txt --no-cache-dir  
  
COPY . /app  
  
ENTRYPOINT ["python3"]  
  
CMD ["manage.py", "runserver", "0.0.0.0:8000"]

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

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

Важно: порядок инструкция влияет на кэширование слоёв. Чаще всего сначала копируют requirements.txt и устанавливают зависимости, а потом копируют код — это экономит время при повторных сборках.

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

Соберите образ командой (запустите в корне проекта, где находится Dockerfile):

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

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

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

Проверка списка образов:

Список локально собранных образов Docker

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

Запустите контейнер командой:

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

После запуска команда вернёт идентификатор контейнера (контейнерный SHA):

Новый контейнер запущен и отображается его идентификатор

Объяснение параметров команды:

  • –name docker-djangoapp — задаёт имя контейнера.
  • -p 8000:80 — проксирует порт 80 внутри контейнера на порт 8000 хоста (формат HOST:CONTAINER).
  • -d — запуск в фоновом режиме (detached).
  • docker-django-app:latest — имя и тег образа для создания контейнера.

Синтаксис запуска контейнера общий:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Проверка запущенных контейнеров:

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

Откройте в браузере http://127.0.0.1:8000 и вы увидите ваше Django‑приложение.

Отправка образа в реестр

Чтобы поделиться образом или хранить его централизованно, загрузите образ в Docker Registry (например, Docker Hub):

  1. Войдите: docker login
  2. Пометьте образ с учётом вашего репозитория: docker tag docker-django-app:latest yourusername/docker-django-app:latest
  3. Запушьте: docker push yourusername/docker-django-app:latest

Реестр позволяет хранить приватные и публичные образы и управлять доступом.

Почему стоит Docker‑изировать приложение

Преимущества:

  • Повторяемость окружений: контейнер работает одинаково в dev, CI и prod.
  • Лёгкая доставка и масштабирование.
  • Быстрая интеграция с CI/CD.
  • Возможность хранить образы в реестре и контролировать версии.

Мини‑методология: как подойти к контейнеризации шаг за шагом

  1. Подготовьте проект: минимизируйте зависимости, вынесите конфигурацию в переменные окружения.
  2. Напишите Dockerfile с учётом кэширования (сначала requirements, затем код).
  3. Соберите образ локально и проверьте его поведение.
  4. Напишите простые тесты, которые выполняются внутри контейнера (smoke tests).
  5. Создайте CI‑pipeline, который собирает и пушит образ в реестр при успешных тестах.
  6. Разверните контейнер в staging и прогоните интеграционные тесты.
  7. Перекатка в production через CD‑процесс.

Чек‑лист для разработчика и DevOps

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

  • Проект запускается локально без Docker.
  • requirements.txt или Pipfile.lock актуальны.
  • Конфигурация (ключи, DB) вынесена в переменные окружения.

DevOps:

  • Dockerfile оптимизирован (минимальные слои).
  • В образе нет чувствительных данных.
  • Образ автоматически собирается в CI.
  • Настроен реестр и права доступа.
  • Написан мониторинг и логирование контейнера.

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

  • Образ успешно собирается и проходит smoke‑тесты.
  • Контейнер запускается и отвечает на запросы по заданному порту.
  • Все конфиденциальные данные передаются через безопасные переменные окружения или секреты.
  • CI билд и push в реестр настроены и работают.

Когда контейнеризация не подходит

Контейнеризация — не панацея. Примеры, когда это может быть лишним:

  • Очень простые скрипты, запускаемые раз в сутки — достаточно cron на хосте.
  • Системы с тяжёлыми требованиями к аппаратному обеспечению и узкими аппаратными интеграциями.
  • Если команда не готова поддерживать инфраструктуру контейнеров и платежи за реестр/орchestration не оправданы.

Альтернативы Docker

  • Podman — совместим с командами Docker и не требует демона.
  • LXC / systemd‑nspawn — для более «тонкой» изоляции на уровне ОС.
  • Виртуальные машины — когда требуется полноценная виртуализация аппаратуры.

Отладка и быстрый runbook при инциденте

  1. Проверить состояние контейнера: docker ps -a
  2. Просмотреть логи: docker logs
  3. Войти внутрь контейнера: docker exec -it /bin/bash (или /bin/sh)
  4. Проверить сетевые порты и правила брандмауэра на хосте.
  5. Если образ некорректен — пересобрать локально с включёнными шагами debug (RUN echo …).
  6. При проблемах с зависимостями — проверить версию Python и contents requirements.txt.

Базовая безопасность и hardening

  • Не запускайте контейнеры от root, если это возможно: используйте USER в Dockerfile.
  • Удаляйте лишние пакеты в образе, чтобы уменьшить поверхность атаки.
  • Храните секреты вне образа — через Docker Secrets, Vault или переменные окружения в оркестраторе.
  • Регулярно обновляйте базовые образы и пересобирайте образы с патчами безопасности.

Примеры и тесты приёмки

Тесты для проверки образа:

  • Smoke тест: выполнить HTTP‑запрос корня приложения и убедиться в ответе 200.
  • Тест зависимостей: запустить python -m pip check внутри контейнера.
  • Тест конфигурации: проверить, что переменные окружения доступны внутри контейнера.

Краткая галерея крайних случаев

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

Короткое объявление для команды (пример)

Нужно опубликовать образ Docker для нашего Django‑сервиса. Соберу образ на CI, запушу в приватный реестр. Пожалуйста, проверьте, что все секреты вынесены в переменные окружения и requirements.txt актуален.

1‑строчный глоссарий

  • Образ — слой файловой системы и метаданных для запуска контейнера.
  • Контейнер — запущенный экземпляр образа.
  • Реестр — хранилище образов (Docker Hub, GitHub Container Registry).

Резюме

Docker даёт простой путь упаковать Django‑приложение в воспроизводимый и переносимый формат. Основные шаги: установить Docker, написать корректный Dockerfile, собрать образ, запустить контейнер и обеспечить безопасность образа и конфигурации. Для надёжной эксплуатации добавьте CI, тесты и мониторинг.

Важно: всегда следите за тем, чтобы в образах не оставались секреты и чтобы база образа поддерживалась в актуальном состоянии.

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

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство