docker:python_flask_docker_prostymi_slovami

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, это выглядит так:

Создаём файл 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

  • docker/python_flask_docker_prostymi_slovami.txt
  • Последнее изменение: 08.01.2026 11:52
  • r0wbh