Дамакин Роман 2384 и Шурыгин Данил 2384
В рамках лабораторной работы была произведена докеризация Flask-приложения с использованием базы данных PostgreSQL. Приложение включает автоматические миграции базы данных при запуске.
- Backend: Flask
- База данных: PostgreSQL 15 (alpine)
- Контейнеризация: Docker + Docker Compose
- Легковесные образы: Используются Python 3.12 и PostgreSQL на базе Alpine.
- Порты: Проброшен порт для локального запуска (
5001:5000). - Переменные окружения: Переменные окружения задаются в докерфайлах.
- Хранение данных: Данные базы сохраняются в volume и не теряются при перезапуске контейнеров.
- Пользователь: Приложение запускается от непривилегированного пользователя.
FROM python:3.12-alpine
WORKDIR /app
ENV FLASK_APP=app
ENV FLASK_RUN_HOST=0.0.0.0
ENV FLASK_RUN_PORT=5000
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN adduser -D user && chown -R user:user /app
USER user
ENTRYPOINT ["/bin/sh", "entrypoint.sh"]version: '3.8'
services:
web:
build: .
ports:
- "5001:5000"
depends_on:
- db
environment:
- DATABASE_URL=postgresql://user:password@db:5432/flaskdb
volumes:
- .:/app
db:
image: postgres:15-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: flaskdb
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:flask db init || true
flask db migrate -m "Initial migration" || true
flask db upgrade
exec flask run- Автоматически выполняются миграции базы данных при старте контейнера. "Initial migration" необходим для автоматического создания папки migrations.
- Запускается Flask-сервер с учетом автоматизации миграций (flask db upgrade).
- Dockerfile использует базовый образ
python:3.12-alpine, что обеспечивает минимальный размер конечного образа.
- В прошлом пункте указан используемый образ.
- В
docker-compose.ymlиDockerfileопределены переменные окружения для базы данных и приложения.
- В
docker-compose.ymlуказаны тома для хранения данных базы данных и кода приложения.
- Проект содержит
docker-compose.yml, который автоматизирует сборку и запуск контейнеров.
- В
docker-compose.ymlзадействован контейнер с PostgreSQL.
- Скрипт
entrypoint.shвыполняет миграции автоматически при запуске контейнера:flask db upgrade
- В Dockerfile добавлен непривилегированный пользователь:
RUN adduser -D user && chown -R user:user /app USER user
- Dockerfile очищает кеш после установки зависимостей:
RUN pip install --no-cache-dir -r requirements.txt
git clone <repository-url>
cd flask-project docker-compose up --buildПосле успешного запуска приложение будет доступно по адресу http://localhost:5001.
docker-compose down docker-compose logsflask-project/
│
├── app/
│ ├── __init__.py
│ ├── models.py
│ ├── routes.py
│ └── templates/
│ └── index.html
│
├── migrations/
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── entrypoint.sh
- Убедитесь, что у вас установлен Docker и Docker Compose.
- База данных сохраняет данные между перезапусками контейнеров благодаря тому, что использует том
pgdata. - Для очистки базы данных выполните:
docker-compose down -v- Итоговый вес контейнера составляет ~90мб