🐳 Заворачиваем в Docker среду разработки Django, PostgreSQL

by itisgood

В этом руководстве я покажу вам, как настроить среду 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 needs.txt и добавьте требования к своим проектам.
Обратите внимание, что у меня есть некоторые требования, которые вам могут не понадобиться, но наиболее важными из них являются Django и psycopg2.
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.

Мы определили переменные окружения, которые будут использоваться PostgreSQL, и определили объем.
Том pgdata будет создан docker, и все данные, хранящиеся в нашем проекте, будут сохранены здесь.

Это рекомендуется, потому что, если мы удаляем наши контейнеры, он также удаляет данные в нем.

Определение объема гарантирует, что даже если мы удалим контейнеры, данные все равно будут доступны.

Затем мы создаем сам проект Django, создав файл docker-compose и используя команду Django для создания проекта.

Запишите имя zuri после запуска; это имя службы в файле docker-compose, а имя zuri после startproject – это имя проекта, который собирается создать администратор 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
Затем посетите http://localhost:8000/
Чтобы проверить, работает ли база данных, сделаем миграцию. Откройте новый терминал и выполните:
 $ docker-compose run zuri python manage.py migrate

или если контейнер уже запущен:

 $ docker-compose exec zuri python manage.py migrate
Отныне вы будете запускать команды django после запуска docker-compose zuri [cmd] или docker-compose exec zuri [cmd]

You may also like

Leave a Comment