В этом руководстве я покажу вам, как настроить среду Docker для вашего проекта Django, который использует PostgreSQL вместо базы данных SQLite по умолчанию на этапе разработки.
В нашей предыдущей статье мы обсуждали, как завернуть в Docker приложение Django.
🐳 Как завернуть в Docker приложение Django в Ubuntu / Debian / CentOS
Шаг 1: Установите Docker Engine
Вам нужен Docker, установленный на вашем сервере / рабочем столе.
Наши руководства по установке Docker должны быть очень полезны.
Шаг 2. Настройка среды
Есть настроенный репозиторий GitHub для этого проекта под названием django-postgresql-docker-dev.
Не стесняйтесь клонировать / скачать его.
Сначала создайте папку для хранения вашего проекта.
Моя рабочая папка называется django-postgresql-docker-dev.
Перейдите в папку, а затем откройте его в вашей IDE.
Шаг 3: Создайте Dockerfile
В контейнерной среде все приложения находятся в контейнере.
Сами контейнеры состоят из нескольких образов.
Вы можете создать свой собственный образ или использовать другие образов из Docker Hub.
Dockerfile – это текстовый документ Docker, который Docker читает для автоматического создания / построения образа.
Наш Dockerfile перечислит все зависимости, требуемые нашим проектом.
Создайте файл с именем Dockerfile.
В файле введите следующее:
# base image
FROM python:3
#maintainer
LABEL Author="CodeGenes"
# The enviroment variable ensures that the python output is set straight
# to the terminal with out buffering it first
ENV PYTHONBUFFERED 1
#directory to store app source code
RUN mkdir /zuri
#switch to /app directory so that everything runs from here
WORKDIR /zuri
#copy the app code to image working directory
COPY ./zuri /zuri
#let pip install required packages
RUN pip install -r requirements.txt
Django>=2.1.3,<2.2.0
psycopg2>=2.7,<3.0
django-crispy-forms==1.7.2
djangorestframework==3.8.2
djangorestframework-jwt==1.11.0
Pillow==5.2.0
Шаг 3: Работа с Docker Compose
Их документации Docker:
Compose – это инструмент для определения и запуска многоконтейнерных приложений Docker.
В Compose вы используете файл YAML для настройки служб вашего приложения.
Затем с помощью одной команды вы создаете и запускаете все службы из вашей конфигурации.
Наш проект использует PostgreSQL для соединений с базой данных.
Поэтому мы определим две службы в нашем файле docker-compose.
Первый сервис – это db, который является образом PostgreSQL, а второй – zuri, который является нашим проектом.
Создайте файл с именем docker-compose.yml и добавьте следующие строки:
version: "3"
services:
db:
image: postgres
environment:
POSTGRES_USER: zuri
POSTGRES_DB: zuri
POSTGRES_PASS: zuri1234
volumes:
- pgdata:/var/lib/posgresql/data
zuri:
build:
context: .
ports:
- "8000:8000"
volumes:
- ./zuri:/zuri
command: python manage.py runserver 0.0.0.0:8000
depends_on:
- db
volumes:
pgdata:
Depen_on гарантирует, что образ Postgres будет доступен для нашего сервиса zuri, поэтому он будет автоматически создан и запущен.
Также обратите внимание на свойства под изображением Postgres.
Это рекомендуется, потому что, если мы удаляем наши контейнеры, он также удаляет данные в нем.
Определение объема гарантирует, что даже если мы удалим контейнеры, данные все равно будут доступны.
Затем мы создаем сам проект Django, создав файл docker-compose и используя команду Django для создания проекта.
$ docker-compose run zuri django-admin startproject zuri .
Теперь, если вы проверите папку zuri, вы увидите созданный проект Django!
Однако у нас есть небольшая проблема.
Вы заметите, что созданные файлы и папки принадлежат пользователю root.
Мы можем легко изменить это, выполнив эту команду:
$ sudo chown -R $USER:$USER .
Шаг 4: Подключение к базе данных
Чтобы подключиться к базе данных, откройте файл настроек Django и отредактируйте настройки базы данных, добавив следующее:
# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'zuri',
'USER': 'zuri',
'HOST': 'db',
'PORT': 5432,
}
}
Параметры name, user и host должны быть такими же, как в файле docker-compose.
В частности, параметром host является имя имени службы Postgres.
В Windows вам может понадобиться отредактировать ALLOWED_HOSTS внутри settings.py и добавить ваше имя хоста Docker или IP-адрес в список.
Отредактируйте и добавьте:
ALLOWED_HOSTS = ['*']
$ docker-compose up
$ docker-compose run zuri python manage.py migrate
или если контейнер уже запущен:
$ docker-compose exec zuri python manage.py migrate