Python + Flask + Docker простыми словами
1 июня 2025
Многие инструкции по запуску веб-приложений в Docker написанных на Python+Flask перегружены лишней информацией. Если у меня уже есть написанное веб-приложение (или хотя его заготовка), и оно прекрасно работает в PyCharm, то зачем мне знать подробности тонкой настройки nginx или других компонентов? Я просто хочу взять и запустить его!
К счастью, был найден образ Docker, в котором уже есть всё необходимое для запуска.
Итак, у нас есть каталог проекта с рабочим кодом на Python+Flask, который имеет следующую структуру:
- requirements.txt — зависимости для проекта
- app\main.py — исходный код проекта
- app\templates\ — каталог шаблонов
- app\static\ — каталог статических файлов (CSS, JS, изображения и т.д.)
Для примера я просто взял две HTML-странички, на второй из них выводится произвольное число и список из кода. Сам код на Python (app\main.py) выглядит следующим образом:
- main.py
from flask import Flask, render_template, request import random app = Flask(__name__) @app.route('/') def hello(): return render_template('index.html') @app.route('/second') def secondpage(): value = random.randint(0, 100) items = ["abc", "def", "ghi"] return render_template('second.html', value = value, items = items) if __name__ == '__main__': app.run(debug=True)
В браузере, при запуске в PyCharm, это выглядит так:
Упаковываем в Docker
Создаём файл Dockerfile следующего содержания:
FROM tiangolo/uwsgi-nginx-flask:python3.12 COPY ./requirements.txt /app/requirements.txt RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt COPY ./app /app
Здесь мы используем образ tiangolo/uwsgi-nginx-flask , в котором уже есть всё готовое для запуска веб-приложений: Python, uWSGI, Nginx.
Теперь создаём файл настроек uWSGI (app\uwsgi.ini):
[uwsgi] module = main callable = app enable-threads = true
Здесь мы указали название модуля с веб-приложением, объект Flask, который необходимо вызывать (app). А также разрешили использовать потоки.
Получившаяся структура файлов выглядит следующим образом.
Собственно всё. Давайте создадим образ веб-приложения:
# docker build -t sample-flask .
И запустим контейнер:
# docker run --name sampleflask -d -p 8088:80 sample-flask:latest
И если всё нормально, то по адресу http://IP:8088 должно открыться наше веб-приложение.
Готовый проект можно скачать из моего репозитория: https://gitverse.ru/nightflash/sample-flask-uwsgi
Или здесь: sample-flask-uwsgi-master.zip



