Использование Docker упрощает развёртывание веб-приложений, позволяя создать изолированную среду для каждого сервиса. В этой статье мы создадим простое Django-приложение с базой данных PostgreSQL, используя docker-compose
.
У вас должен быть установлен python3. Чтобы проверить, какая версия python у вас установлена, просто запустите:
python --version
Настройте свою среду разработки
Всякий раз, когда вы начинаете новый проект по веб-разработке, рекомендуется сначала настроить среду разработки. Итак, давайте создадим новый каталог для вашего проекта и переместимся в него:
$ mkdir tutotial
$ cd tutorial
Как только вы окажетесь в главном каталоге, рекомендуется создать виртуальную среду для управления зависимостями. Существует множество различных способов настройки виртуальных сред, но здесь вы будете использовать venv
:
$ python3 -m venv <name>
Эта команда создаст папку venv в вашем рабочем каталоге. Внутри этой папки вы найдёте несколько файлов, включая копию стандартной библиотеки Python. Позже, когда вы установите новые зависимости, они также будут храниться в этой папке. Затем вам нужно активировать виртуальную среду, выполнив следующую команду:
$ source <name>/bin/activate
Вы поймёте, что ваша виртуальная среда активирована, когда в терминале изменится приглашение консоли. Оно должно выглядеть примерно так:
(<name>) $

Создайте проект Django
Как только вы настроите виртуальную среду Python, вам нужно будет добавить стандартный файл зависимостей проекта Python, который обычно называется requirements.txt
, и зависимость Django. Хорошо, после того как вы создадите и добавите зависимости, файл должен выглядеть так:
$ cat requirements.txt
Django==2.2.5
После добавления зависимости Django вы можете установить Django с помощью следующей команды:
$ pip install -r requirements.txt
После установки вы обнаружите, что у вас появился доступ к инструменту командной строки django-admin, с помощью которого можно создать файлы проекта и структуру каталогов, необходимые для простого приложения «Привет, мир!».
$ django-admin startproject mysite
Давайте посмотрим на структуру проекта, которую только что создал для вас инструмент:
.
├── mysite
│ ├── mysite
│ │ ├── __init__.py
│ │ ├── settings.py
│ │ ├── urls.py
│ │ └── wsgi.py
│ └── manage.py
└── requirements.txt
Вы можете управлять приложением в целях разработки с помощью файла manage.py
, который позволяет, например, запустить тестовый веб-сервер для разработки:
$ cd mysite
$ python manage.py runserver

Затем в вашем браузере перейдите по адресу http://127.0.0.1:8000/, и вы увидите следующее:

Поздравляем, вы создали сайт на Django! Следующий шаг — создание приложений, чтобы вы могли добавлять представления и функции на свой сайт.
Шаг 3 — Создайте приложение Django
Чтобы создать приложение, выполните следующую команду:
$ python manage.py startapp hello_world
Это создаст еще один каталог с именем hello_world с несколькими файлами:
__init__.py
указывает Python обрабатывать каталог как пакет Python.admin.py
содержит настройки для страниц администратора Django.apps.py
содержит настройки для настройки приложения.models.py
содержит набор классов, которые ORM Django преобразует в таблицы базы данных.tests.py
содержит тестовые классы.views.py
содержит функции и классы, которые обрабатывают данные, отображаемые в HTML-шаблонах.
После создания приложения вам нужно установить его в свой проект. В mysite/settings.py
добавьте следующую строку кода в INSTALLED_APPS
:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hello_world', # <-- ADD THIS LINE
]
Эта строка кода означает, что ваш проект теперь знает, что только что созданное вами приложение существует. Следующий шаг — создать представление, чтобы вы могли что-то отобразить для пользователя.
Создание представления
Перейдите к файлу views.py
в каталоге hello_world
. Там уже есть строка кода, которая импортирует функцию render(). Добавьте следующий код:
from django.shortcuts import render
def hello_world(request):
return render(request, 'hello_world.html', {})
Вы определили функцию просмотра под названием helloworld(). При вызове этой функции будет отображаться HTML-файл под названием hello_world.html
. Этого файла ещё не существует, поэтому давайте создадим его. Создайте этот каталог, а затем файл с именем helloworld.html внутри него:
$ mkdir hello_world/templates/
$ touch hello_world/templates/hello_world.html
Добавьте в свой файл следующие строки HTML:
# hello_world.html
<h1>Hello, World!</h1>
Теперь вы создали функцию для обработки представлений и шаблонов, которые будут отображаться для пользователя. Последний шаг — подключить ваши URL-адреса, чтобы вы могли перейти на только что созданную страницу. В вашем проекте есть модуль под названием urls.py
, в который вам нужно добавить конфигурацию URL-адреса для приложения hello_world. Внутри mysite/urls.py
добавьте следующее:
from django.contrib import admin
from django.urls import path, include # <-- ADD THIS LINE
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('hello_world.urls')), # <-- ADD THIS LINE
]
Это ищет модуль под названием urls.py
внутри приложения hello_world
и регистрирует все заданные там URL-адреса. Всякий раз, когда вы посещаете корневой путь вашего URL-адреса (localhost:8000), URL-адреса приложения hello_world
будут зарегистрированы. Модуль hello_world.urls
ещё не существует, поэтому вам нужно его создать:
$ touch hello_world/urls.py
from django.urls import path
from hello_world import views
urlpatterns = [
path('', views.hello_world, name='hello_world'),
]
Теперь, когда вы перезапустите сервер и откроете localhost:8000, вы должны увидеть созданный вами шаблон HTML :

Отличная работа!!! Вы создали своё первое приложение на Django и подключили его к своему проекту. Теперь давайте запустим его в контейнере Docker.
Шаг 4: Настройте приложение
Окно настройки
Прежде чем создавать контейнер для приложения Django и отправлять его, вам нужно установить Docker на локальный компьютер. Для обучения установите Docker Community Edition.
Создайте docker image
Следующий этап — добавить Dockerfile
в ваш проект. Структуру Dockerfile
можно рассматривать как набор инструкций по созданию контейнера/образа.
Чтобы запустить Dockerfile, создайте пустой файл с именем Dockerfile
в корневом каталоге вашего проекта. Затем выполните каждую инструкцию в соответствии со следующим примером:
# Dockerfile
# The first instruction is what image we want to base our container on
# We Use an official Python runtime as a parent image
FROM python:3.7
# Allows docker to cache installed dependencies between builds
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# Mounts the application code to the image
COPY . code
WORKDIR /code
EXPOSE 8000
# runs the production server
ENTRYPOINT ["python", "mysite/manage.py"]
CMD ["runserver", "0.0.0.0:8000"]
Первая директива в Dockerfile FROM python:3.7
сообщает Docker, на каком образе будет основан наш контейнер. Мы используем официальный образ Python с Dockerhub, который поставляется с Python и Linux, готовыми к использованию в проекте на Python.
Теперь вы готовы создать образ контейнера, а затем запустить его, чтобы увидеть, как всё это работает вместе.
Сборка и эксплуатация контейнера
Создать контейнер очень просто, если в вашей системе установлены Docker и Docker Machine. Следующая команда выполнит поиск Dockerfile
и загрузит все необходимые слои, необходимые для запуска образа контейнера. Затем она выполнит инструкции в Dockerfile
и создаст контейнер, готовый к запуску.
Чтобы создать контейнер, вы используете команду docker build
и указываете тег или имя контейнера, чтобы позже можно было сослаться на него при запуске. Последняя часть команды указывает Docker, из какого каталога создавать контейнер.
$ cd
$ docker build -t python-django-app .
Последний шаг — запустить контейнер, который вы только что создали, с помощью Docker:
$ docker run -it -p 8000:8000 python-django-app
Эта команда сообщает Docker, что нужно запустить контейнер и перенаправить открытый порт 8000 на порт 8000 на вашем локальном компьютере. После выполнения этой команды вы сможете перейти по адресу http://localhost:8000 в браузере и увидеть ответ «Привет, мир!».
Вы можете просмотреть контейнеры Docker, которые в данный момент запущены в вашей системе (вместе с их идентификаторами), с помощью:
$ docker ps -a
Чтобы отключить контейнер Docker, запустите:
$ docker stop container_id