[MySQL, Django] Настройка docker для django на mysql
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В интернете много неактуальных статей, поэтому я подготовил эту публикацию. В основном при написании статьи опирался на пример настройки докера для джанго в документации докера.
Здесь будет описываться настройка докера для фреймворка django и базы данных mysql, которая будет храниться вне контейнера, благодаря чему можно будет не беспокоиться, что с нашим контейнером что-то случится.
При написании данного руководства использовалось:
- ubuntu 20.04
- docker 19.03.12
- docker-compose 1.26.2
- python 3.8
- mysql 5.7
- django 3.1.1
- mysqlclient 2.0.1
- django-mysql 3.8.1
Настройка рабочего пространства
Перед началом настройки необходимо подготовить рабочее пространство:
- Установить docker и docker-compose. Процесс установки подробно описан в документации докера.
- Создать директорию, в котором будет размещаться наш проект (в данном примере project). В этой директории создать еще одну, в которой будет храниться конфигурация для запуска образа python (в данном примере web).
./project
/web
На этом подготовка закончена и можно приступать к настройке нашего небольшого проекта.
requirements.txt
В директории web создаем файл под названием requirements.txt.
В данном файле объявляем пакеты для работы нашего django приложения.
/project/web/requirements.txt
Django==3.1.1
mysqlclient==2.0.1
django-mysql==3.8.1
Как видите, тут прописан сам джанго, а также пакеты для связи с базой данных mysql.
Далее мы его будем использовать данный файл для настройки содержимого образа.
Dockerfile
В директории web создаем файл под названием Dockerfile.
Файл Dockerfile настраивает содержимое образа приложения с помощью одной или нескольких команд. После сборки запустим контейнер из настроенного образа.
Добавьте следующее содержимое в этот файл:
/project/web/Dockerfile
FROM python:3.8
ENV PYTHONUNBUFFERED 1
RUN mkdir /web_django
WORKDIR /web_django
COPY requirements.txt /web_django/
RUN pip install --upgrade pip && pip install -r requirements.txt
ADD . /web_django/
Данная настройка создает в образе python директорию с нашим проектом, копирует туда список пакетов, которые нужно установить и устанавливает их. Также папка с кодом из образа привязывается к директории web_django в корне проекта.
Перед установкой пакетов обновляется менеджер пакетов pip во избежании проблем с версией(--upgrade pip), т.к. изначально в моем случае он был устаревшим, и вылезала ошибка.
docker-compose.yml
В корне проекта создаем файл docker-compose.yml.
Данный файл содержит настройки сервисов используемые приложением. В данном примере этими сервисами являются веб-сервер и база данных. Файл compose также описывает, какие образы Docker используют эти сервисы, как они связываются друг с другом, какие тома им нужны внутри контейнеров. Также устанавливаются порты, используемые этими сервисами.
Добавьте следующее содержимое в этот файл.
/project/docker-compose.yml
version: '3'
services:
web:
build: ./web
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/web_django
ports:
- '8000:8000'
depends_on:
- db
db:
image: mysql:5.7
ports:
- '3306:3306'
environment:
MYSQL_DATABASE: 'db_django'
MYSQL_USER: 'root'
MYSQL_PASSWORD: 'password'
MYSQL_ROOT_PASSWORD: 'password'
restart: always
volumes:
- ./db_django:/var/lib/mysql
В первой части собирается образ согласно нашей инструкции в файле web/Dockerfile и запускается контейнер. Далее запускается сервер django на 8000 порту. Настраивается том нашего джанго проекта и присваивается в зависимость сервис с образом mysql.
Во второй части описывается сервис mysql. Тут предельно просто: указывается используемый образ, порты, которые слушаются этим сервисом, окружение бд (название бд, пользователь, пароль) и том, в котором будет храниться наша база данных. Благодаря тому, что мы указали том, можно не беспокоиться, что данные потеряются, если наш контейнер с mysql прекратит свою работу.
Настройку докера закончили. Теперь приступим к запуску контейнера и создания django проекта.
Создание проект django
Перейдите в корень проекта (project/) и выполните команду. Данная команда создает django проект с названием web_django.
sudo docker-compose run web django-admin startproject web_django .
После этой команды получится следующая структура:
drwxr-xr-x 6 root root 4,0K сен 16 21:49 db_django
-rw-rw-r-- 1 kafka kafka 466 сен 16 21:31 docker-compose.yml
-rwxr-xr-x 1 root root 666 сен 16 21:34 manage.py
drwxrwxr-x 2 kafka kafka 4,0K сен 16 21:31 web
drwxr-xr-x 3 root root 4,0K сен 16 21:34 web_django
Далее необходимо изменить владельца папки, т.к. контейнер запускается как root пользователь.
sudo chown -R $USER:$USER web_django
Настройка базы данных проекта
Откройте файл настроек django проекта по пути web_django/settings.py
В этом файле заменим настройки подключения к бд, которые мы указывали в docker-compose.yml.
/project/web_django/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_django',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'db',
'PORT': '3306',
}
}
Теперь все готово и можно запускать docker-compose.
Запуск проекта
Для запуска контейнеров достаточно выполнить данную команду
docker-compose up
Чтобы запустить контейнеры в фоновом режиме необходимо указать дополнительный аргумент
docker-compose up -d
Для того чтоб пересобрать образы можно выполнить команду
docker-compose build
Миграция базы данных
Для того, чтобы выполнить миграцию бд, выполните команды:
docker-compose run web python manage.py makemigrations
docker-compose run web python manage.py migrate
===========
Источник:
habr.com
===========
Похожие новости:
- [DevOps, PHP, MySQL, PostgreSQL, Разработка веб-сайтов] Среда разработки PHP на базе Docker
- [MySQL, Oracle, PostgreSQL, SQL, Microsoft SQL Server] Сравнение схем двух баз данных
- [Разработка веб-сайтов, PHP] Использование HAProxy и Docker на машине разработчика при разработке сайтов
- [IT-инфраструктура, Open source, PostgreSQL, Системное администрирование] Миграция с MySQL на PostgreSQL
- [1С-Битрикс, MySQL, Информационная безопасность, Разработка веб-сайтов, Управление проектами] Интернет-магазин как черная дыра в бюджете
- [Java, ERP-системы, DIY или Сделай сам] Складская программа C2 WMS 1.1
- [PHP, Проектирование и рефакторинг, Серверная оптимизация, Параллельное программирование] Пишем простую ORM с возможностью смены БД на лету
- [*nix, Информационная безопасность, Облачные сервисы, Серверное администрирование, Сетевые технологии] Как мы выбирали VPN-протокол и сервер настраивали
- [Node.JS] NestJS. Загрузка файлов в S3 хранилище (minio)
- [SQL, DevOps] RED-метод для анализа производительности MySQL (перевод)
Теги для поиска: #_mysql, #_django, #_django, #_docker (dоcker), #_mysql, #_dockercompose, #_mysql, #_django
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:17
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В интернете много неактуальных статей, поэтому я подготовил эту публикацию. В основном при написании статьи опирался на пример настройки докера для джанго в документации докера. Здесь будет описываться настройка докера для фреймворка django и базы данных mysql, которая будет храниться вне контейнера, благодаря чему можно будет не беспокоиться, что с нашим контейнером что-то случится. При написании данного руководства использовалось:
Настройка рабочего пространства Перед началом настройки необходимо подготовить рабочее пространство:
./project
/web На этом подготовка закончена и можно приступать к настройке нашего небольшого проекта. requirements.txt В директории web создаем файл под названием requirements.txt. В данном файле объявляем пакеты для работы нашего django приложения. /project/web/requirements.txt Django==3.1.1
mysqlclient==2.0.1 django-mysql==3.8.1 Как видите, тут прописан сам джанго, а также пакеты для связи с базой данных mysql. Далее мы его будем использовать данный файл для настройки содержимого образа. Dockerfile В директории web создаем файл под названием Dockerfile. Файл Dockerfile настраивает содержимое образа приложения с помощью одной или нескольких команд. После сборки запустим контейнер из настроенного образа. Добавьте следующее содержимое в этот файл: /project/web/Dockerfile FROM python:3.8
ENV PYTHONUNBUFFERED 1 RUN mkdir /web_django WORKDIR /web_django COPY requirements.txt /web_django/ RUN pip install --upgrade pip && pip install -r requirements.txt ADD . /web_django/ Данная настройка создает в образе python директорию с нашим проектом, копирует туда список пакетов, которые нужно установить и устанавливает их. Также папка с кодом из образа привязывается к директории web_django в корне проекта. Перед установкой пакетов обновляется менеджер пакетов pip во избежании проблем с версией(--upgrade pip), т.к. изначально в моем случае он был устаревшим, и вылезала ошибка. docker-compose.yml В корне проекта создаем файл docker-compose.yml. Данный файл содержит настройки сервисов используемые приложением. В данном примере этими сервисами являются веб-сервер и база данных. Файл compose также описывает, какие образы Docker используют эти сервисы, как они связываются друг с другом, какие тома им нужны внутри контейнеров. Также устанавливаются порты, используемые этими сервисами. Добавьте следующее содержимое в этот файл. /project/docker-compose.yml version: '3'
services: web: build: ./web command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/web_django ports: - '8000:8000' depends_on: - db db: image: mysql:5.7 ports: - '3306:3306' environment: MYSQL_DATABASE: 'db_django' MYSQL_USER: 'root' MYSQL_PASSWORD: 'password' MYSQL_ROOT_PASSWORD: 'password' restart: always volumes: - ./db_django:/var/lib/mysql В первой части собирается образ согласно нашей инструкции в файле web/Dockerfile и запускается контейнер. Далее запускается сервер django на 8000 порту. Настраивается том нашего джанго проекта и присваивается в зависимость сервис с образом mysql. Во второй части описывается сервис mysql. Тут предельно просто: указывается используемый образ, порты, которые слушаются этим сервисом, окружение бд (название бд, пользователь, пароль) и том, в котором будет храниться наша база данных. Благодаря тому, что мы указали том, можно не беспокоиться, что данные потеряются, если наш контейнер с mysql прекратит свою работу. Настройку докера закончили. Теперь приступим к запуску контейнера и создания django проекта. Создание проект django Перейдите в корень проекта (project/) и выполните команду. Данная команда создает django проект с названием web_django. sudo docker-compose run web django-admin startproject web_django .
После этой команды получится следующая структура: drwxr-xr-x 6 root root 4,0K сен 16 21:49 db_django
-rw-rw-r-- 1 kafka kafka 466 сен 16 21:31 docker-compose.yml -rwxr-xr-x 1 root root 666 сен 16 21:34 manage.py drwxrwxr-x 2 kafka kafka 4,0K сен 16 21:31 web drwxr-xr-x 3 root root 4,0K сен 16 21:34 web_django Далее необходимо изменить владельца папки, т.к. контейнер запускается как root пользователь. sudo chown -R $USER:$USER web_django
Настройка базы данных проекта Откройте файл настроек django проекта по пути web_django/settings.py В этом файле заменим настройки подключения к бд, которые мы указывали в docker-compose.yml. /project/web_django/settings.py DATABASES = {
'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'db_django', 'USER': 'root', 'PASSWORD': 'password', 'HOST': 'db', 'PORT': '3306', } } Теперь все готово и можно запускать docker-compose. Запуск проекта Для запуска контейнеров достаточно выполнить данную команду docker-compose up
Чтобы запустить контейнеры в фоновом режиме необходимо указать дополнительный аргумент docker-compose up -d
Для того чтоб пересобрать образы можно выполнить команду docker-compose build
Миграция базы данных Для того, чтобы выполнить миграцию бд, выполните команды: docker-compose run web python manage.py makemigrations
docker-compose run web python manage.py migrate
=========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:17
Часовой пояс: UTC + 5