Добро пожаловать на завершающий уровень курса по Docker!
В этом уровне мы объединим все полученные знания и навыки.
В лекциях могут встречаться не знакомые для вас языки программирования или технологии. Вам предстоит прописывать порты или добавлять названия методов – и всё это на основе готового кода, где уже сделано 99% работы.
Не переживайте, если что-то покажется незнакомым – это сделано намеренно для улучшения навыка: "я этого не знаю, но могу быстро разобраться".
1.1 Постановка задачи
Давайте создадим небольшое многоконтейнерное приложение и по шагам разберем весь процесс разработки: от постановки задачи до демонстрации готового продукта.
Цель: создать многоконтейнерное приложение для управления задачами, позволяющее пользователям создавать, редактировать, удалять задачи и назначать их другим пользователям. Приложение будет состоять из трех основных компонентов: фронтенда на ReactJS, бекенда на Python (Flask) и базы данных PostgreSQL.
Основные задачи:
- Определить функциональные требования для каждого компонента приложения.
- Выбрать используемые технологии и инструменты.
- Подготовить окружение для разработки.
1.2 Определение функциональных требований
Функциональные требования для приложения управления задачами:
- Регистрация и авторизация пользователей:
- Пользователь может зарегистрироваться в системе.
- Пользователь может авторизоваться в системе.
- Управление задачами:
- Пользователь может создавать задачи.
- Пользователь может редактировать задачи.
- Пользователь может удалять задачи.
- Пользователь может просматривать список задач.
- Пользователь может назначать задачи другим пользователям.
- Просмотр и фильтрация задач:
- пользователь может фильтровать задачи по статусу (выполненные/невыполненные).
- пользователь может просматривать задачи, назначенные другим пользователям.
1.3 Определение используемых технологий и инструментов
Для реализации данного приложения будут использованы следующие технологии и инструменты:
- Frontend:
- ReactJS: библиотека для создания пользовательских интерфейсов.
- Axios: библиотека для выполнения HTTP-запросов.
- Backend:
- Python: язык программирования для создания серверной части.
- Flask: веб-фреймворк для создания REST API.
- SQLAlchemy: ORM для взаимодействия с базой данных.
- Database:
- PostgreSQL: реляционная база данных для хранения информации о пользователях и задачах.
- Контейнеризация и оркестрация:
- Docker: платформа для контейнеризации приложений.
- Docker Compose: инструмент для управления многоконтейнерными приложениями.
1.4 Подготовка окружения для разработки
Для успешного выполнения проекта необходимо настроить окружение разработки и убедиться, что все необходимые инструменты установлены.
Шаги для подготовки окружения:
- Установка Docker:
- Если вы ещё это не сделали, то вернитесь к лекции 4 первого уровня или следуйте инструкциям на официальном сайте Docker.
- Установка Docker Compose:
- Если Docker Compose ещё не установлен, обратитесь к лекции 2 уровня 4 или следуйте инструкциям на официальном сайте Docker Compose.
- Создание структуры проекта:
- Создайте директорию для проекта и основные поддиректории для каждого сервиса:
mkdir task_management_app
cd task_management_app
mkdir frontend backend database
- Инициализация проекта:
- Внутри директории frontend инициализируйте новый ReactJS проект:
cd frontend
npx create-react-app .
cd ..
• Внутри директории backend создайте структуру для Python/Flask приложения:
cd backend
mkdir app
touch app/__init__.py
touch app/models.py
touch app/routes.py
touch run.py
touch requirements.txt
cd ..
• Внутри директории database создайте Dockerfile для PostgreSQL (при необходимости):
cd database
touch Dockerfile
cd ..
1.5 Пример содержимого файлов:
Файл backend/app/__init__.py:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://taskuser:taskpassword@database:5432/taskdb'
db = SQLAlchemy(app)
from app import routes
Файл backend/app/models.py:
from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
tasks = db.relationship('Task', backref='owner', lazy=True)
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(120), nullable=False)
description = db.Column(db.Text, nullable=True)
owner_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
Файл backend/app/routes.py:
from app import app
@app.route('/')
def index():
return "Hello, Task Management App!"
Файл backend/run.py:
from app import app
if __name__ == '__main__':
app.run(host='0.0.0.0')
Файл backend/requirements.txt:
Flask
Flask-SQLAlchemy
psycopg2-binary
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ