Запуск Django-приложения в Docker контейнере

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

  • Виртуализация
  • Контейнеризация (с помощью Docker)
  • Docker
  • Создание Dockerfile
  • Docker Compose
  • Настройка Django приложения в среде Docker с помощью Dockerfile и docker-compose

Условия

Чтобы справиться с этим руководством вам нужно иметь следующее:

  • Git/GitHub
  • PyCharm (или любой другой редактор кода)
  • Опыт работы с Django

Готовый репозиторий с Django-приложением, как всегда на GitLab: https://gitlab.com/PythonRu/django-docker.

Что такое виртуализация

Обычно при развертывании веб-приложения в хостинге (например, DigitalOcean или Linode) вы настраиваете виртуальную машину или виртуальный компьютер, куда будет перенесен весь код с помощью git, FTP или другими средствами. Это называется виртуализацией.

Со временем разработчики начали видеть недостатки такого процесса — как минимум затраты на приспосабливание к изменениям в операционной системе. Им хотелось объединить среды разработки и производственную, вследствие чего и появилась идея контейнеризации.

Что такое контейнеры, и что в них такого особенного?

Контейнер, если говорить простыми словами, — это место для среды разработки, то есть, вашего приложения и тех зависимостей, которые требуются для его работы.

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

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

Введение в Docker

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

Установка Docker

Для установки Docker на компьютере, воспользуйтесь инструкцией с официального сайта. У каждой операционной системы есть своя версия приложения.

Настройка приложения

Для этого руководства используем репозиторий приложения для опросов, написанного на Django. По мере продвижения в этом руководстве настроим Dockerfile, в котором будут обозначены инструкции для контейнера, внутри которого приложение и будет работать. После этого же настроим и файл docker-compose.yml для упрощения всего процесса.

На ПК с установленным git перейдите в выбранную папку и клонируйте следующий репозиторий из GitLab:

git clone https://gitlab.com/PythonRu/django-docker.git

После этого перейдите в корень этой папки и откройте ее в редакторе с помощью такой команды:

cd django-docker && code .
Запуск Django-приложения в Docker контейнере

В этой папке создайте файл Dockerfile (регистр играет роль) без формата. Внутри него будут находиться настройки контейнера. Инструкции из него компьютер будет выполнять каждый раз при запуске команды docker build.

Следующий этап — создание файла requirements.txt, в котором перечислены все зависимости. Позже он будет использован для Dockerfile, в котором также требуется указывать все требуемые зависимости.

В файле requirements.txt добавьте Django версии 3.1.2 в таком формате:

Django==3.1.2

Что такое Dockerfile

Идея написания Dockerfile может показаться сложной, но не забывайте, что это всего лишь инструкция (набор шагов) для создания собственных образов (images). Dockerfile будет содержать следующее:

  1. Базовый образ, на основе которого требуется построить свой. Он выступает своего рода фундаментом для вашего приложения. Это может быть операционная система, язык программирования (Python в нашем случае) или фреймворк.
  2. Пакеты и дополнительные инструменты для образа.
  3. Скрипты и файлы, которые требуется скопировать в образ. Обычно это и есть исходный код приложения.

При чтении или написании такого файла удобно держать в голове следующее:

  • Строки с инструкциями обычно начинаются с ключевого слова, например: RUN, FROM, COPY, WORKDIR и так далее.
  • Комментарии начинаются с символа #. При выполнении инструкций из файла такие комментарии обычно игнорируются.

Создание Dockerfile

Приложение будет работать на основе официального образа Python. Напишем следующие инструкции:

# Указывает Docker использовать официальный образ python 3 с dockerhub в качестве базового образа
FROM python:3
# Устанавливает переменную окружения, которая гарантирует, что вывод из python будет отправлен прямо в терминал без предварительной буферизации
ENV PYTHONUNBUFFERED 1
# Устанавливает рабочий каталог контейнера — "app"
WORKDIR /app
# Копирует все файлы из нашего локального проекта в контейнер
ADD ./app
# Запускает команду pip install для всех библиотек, перечисленных в requirements.txt
RUN pip install -r requirements.txt

Файл Docker Compose

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

Обычно Docker Compose использует файл docker-compose.yml для настройки сервисов, которые приложение будет использовать. Запускаются эти сервисы с помощью команды docker-compose up. Это создает и запускает все сервисы из файла. В большинстве веб-приложений нужны, веб-сервер (такой как nginx) и база данных (например, PostgreSQL). В этом приложении будем использовать SQLite, поэтому внешняя база данных не потребуется.

Для использования особенностей Docker Compose нужно создать файл docker-compose.yml в той же папке, где находится Dockerfile и добавить туда следующий код:

version: '3.8'
services:
   web:
       build: .
       command: python manage.py runserver localhost:8000
       ports:
           - 8000:8000

Дальше разберем содержимое файла построчно:

version: '3.8'

Эта строка сообщает Docker, какая версия docker-compose должна быть использована для запуска файла. На момент написания руководства последняя версия — 3.8, но обычно синтаксис не сильно меняется по мере выхода последующих.

После настройки docker-compose откройте терминал и запустите команду docker-compose up -d для запуска приложения. Дальше открывайте ссылку localhost:8000 в браузере, чтобы увидеть приложение в действии:

Запуск Django-приложения в Docker контейнере

Для закрытия контейнера используется команда docker-compose down.

Выводы

Репозиторий проекта: https://gitlab.com/PythonRu/django-docker.

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

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

Максим
Я создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ.
Мои контакты: Почта
admin@pythonru.comAlex Zabrodin2018-10-26OnlinePython, Programming, HTML, CSS, JavaScript