• Информация на сайте предоставляется «как есть», может содержать неточности и не является консультацией или офертой.
  • Перед использованием проконсультируйтесь со специалистом.

Используя сайт, вы подтверждаете, что вы изучили и согласны с документами Политика конфиденциальности и обработки персональных данныхи Пользовательское соглашение.

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

Настройки cookies
Необходимые для работы веб-сайта

Используются для входа, навигации и защиты (например: sessionid, csrftoken). Без них сайт может работать с перебоями.

Помогают улучшить сайт, собирая статистику посещений (например, через Яндекс Метрику).

Используются для показа персонализированной рекламы и ретаргетинга в рекламных сетях.

Настройки интерфейса

Декоративный эффект свечения при клике по странице.

DEV -
PROGRAM.RU
Контакты

Django приложение в Docker: запускаем по шагам

Узнайте, как запустить Django-приложение в Docker-контейнере. Настройка Dockerfile, docker-compose, зависимостей и запуск проекта.

Django в docker

Docker позволяет запускать Django-приложение в изолированном контейнере вместе со всеми необходимыми зависимостями. Это упрощает разработку, тестирование и CI/CD развёртывание проекта на сервере, а так же ручной перенос проекта на другую машину.

В этой статье разберём, простой пример начального уровня, как запустить Django-приложение в Docker-контейнере, создать Dockerfile, настроить docker-compose.yml на базе данных SQLite и выполнить базовые команды Django внутри контейнера.

Подготовка к работе

Убедитесь, что у вас установлен докер при помощи следующих команд:

docker --version 
docker compose version

команды проверки установленного Docker

Сохраняем зависимости

Запускаем команду, которая сохранит необходимые библиотеки в файл requirements.txt.

pip freeze > requirements.txt

команда сохранения зависимостей

Проверяем версию Python

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

python --version

команда, чтобы узнать версию питона

Создаём dockerfile

В корне проекта создайте файл Dockerfile.

FROM python:3.12-slim замените на версию вашего питона из шага выше

dockerfile
FROM python:3.12-slim

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

пример Dockerfile для Django

Создаём .dockerignore

Чтобы не копировать ненужные файлы в Docker, создайте .dockerignore.

Особенно важно запретить копировать виртуальное окружение и файлы с конфиденциальными данными (пароли, API ключи и прочее)

plaintext
.git
.gitignore
__pycache__
*.pyc
*.pyo
*.pyd
.pytest_cache
.venv
venv
env
.env
.idea
.vscode

пример .dockerignore файла

Настраиваем docker compose

Если Django-приложению нужно несколько контейнеров, например Redis, Celery или база данных (не SQLite, а PostgreSQL), то удобно использовать Docker Compose, а не просто Dockerfile.

Создайте docker-compose.yml файл.

services:
  web:
    restart: always
    build: .
    ports:
      - "8000:8000"
    env_file:
      - .env

пример docker-compose.yml файла

Здесь мы говорим что у нас будет 1 контейнер с названием web, при падении его нужно всегда включать снова (restart), при создании контейнер должен брать файлы рядом с собой (указываем точку), и наш сервис должен быть проброшен с 8000 порта в контейнере на 8000 порт на нашем компьютере, а так же должен брать переменные из файла .env, который лежит в проекте.

Использование .env файл для хранения ключей в django

В профессиональной разработке неприемлемо хранить ключи и пароли в коде, для этого используется специальный файл .env , такой файл не отправляется в системы хранилища кода по типу git.

Найдите в файле settings.py переменные типа DEBUG, ALLOWED_HOSTS и SECRET_KEY и перенесите их в .env файл.

Для удобства работы с .env файлом, рекомендуется использовать библиотеку environs из этой статьи.

Как запустить django в Docker

Выполнив шаги выше, мы готовы к запуску нам нужно ввести одну команду:

docker compose up

команда запуска файла docker compose

После запуска такой команды, docker автоматически делает следующие шаги, указанные нами прежде в Dockerfile:

  1. установка линукс образа с питоном из первой строки Dockerfile

  2. назначение рабочей папки /app

  3. копирование requirements.txt файла с зависимостями (с названиями библиотек)

  4. установка зависимостей

  5. копирование файлов внутрь контейнера

  6. запуск команды для включения Django на порту 8000

Если все сделано верно Django сайт будет доступен по ссылке http://127.0.0.1:8000/, в зависимости от запущенного проекта вам потребуется открыть свой путь, если вы использовали проект из статьи, то путь будет такой http://127.0.0.1:8000/news/articles/.

Базовые команды для понимания django в docker

Вход в django docker контейнер

Для входа в контейнер из папки где лежит docker-compose.yml мы можем ввести следующую команду:

docker compose exec web bash

команда для входа в контейнер в Docker

Если мы хотим узнать ID или имя нашего контейнера с другой папки компьтера, требуется команда:

docker ps -a

команда для просмотра контейнеров в Docker

CONTAINER ID  IMAGE       COMMAND           CREATED         STATUS        PORTS                  NAMES
84e7164e9f09  folder-web  "python manag..." 10 minutes ago  Up 10 minutes 0.0.0.0:8000->8000/tcp folder-web-1

отображение результата команды docker ps -a

Обнаружив имя нашего контейнера и ID, мы можем вбить команду

docker exec -it folder-web-1 bash

команда для входа в контейнер в Docker

в команде docker exec -it можно использовать как ID, так и имя из столбца NAMES

Что делать внутри контейнера

Внутри контейнера можно смотреть файлы или выполнять иные команды, однако наши действия перезапишутся при пересоздании образа.

Для примера введем командуls для просмотра файлов в папке где мы находимся:

root@84e7164e9f09:/app# ls
Dockerfile  db.sqlite3  docker-compose.yml  main_app  manage.py  news  requirements.txt

команда для просмотра папок внутри Docker контейнера

Так же можем перейти в папку main_app введя cd main_app.

В конце можем выйти из контейнера командой exit.

Удаление django docker контейнера

Будьте внимательны, после удаления контейнера и/или образа, в зависимости от настроек данные могут быть утеряны навсегда.

Удалить контейнер мы можем командой:

docker compose down

команда удаления Docker контейнера

При желании удалить и контейнер и образ, требуется команда:

docker compose down --rmi all

команда удаления контейнера и образа в Docker

Шаги для боевого режима

Выше мы рассмотрели пример начального уровня для настройки django в Docker.

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

По необходимости вы можете обратиться к программисту.

Вам может быть интересно

Поделиться
Ничего не найдено
Найдите нужную страницу

Статьи, инструменты и помощь