Home » Как создать и развернуть Flask приложение с Docker на Ubuntu 24.04
Как создать и развернуть Flask приложение с Docker на Ubuntu 24.04

Как создать и развернуть Flask приложение с Docker на Ubuntu 24.04

В этой статье разберёмся, как быстро и без боли развернуть Flask-приложение в Docker-контейнере на свежей Ubuntu 24.04. Почему это важно? Flask — один из самых популярных Python-фреймворков для веба, а Docker — стандарт де-факто для упаковки и деплоя приложений. Если вы хотите, чтобы ваше приложение работало одинаково на локалке, тестовом сервере и в проде, без танцев с бубном вокруг зависимостей, — этот гайд для вас. Всё покажу на практике, с командами, примерами и лайфхаками. Погнали!

Как это работает?

Flask — это микрофреймворк для Python, который позволяет быстро собирать веб-приложения. Docker — это контейнеризация: вы упаковываете приложение вместе со всеми зависимостями в контейнер, который можно запускать где угодно, где есть Docker. Ubuntu 24.04 — свежая LTS-версия, стабильная и с поддержкой до 2029 года. В связке Flask + Docker + Ubuntu вы получаете:

  • Изоляцию окружения (никаких конфликтов библиотек, как на голой системе)
  • Упрощённый деплой (копируешь контейнер — и всё работает)
  • Лёгкую масштабируемость (поднимаешь сколько угодно инстансов через Docker Compose или Kubernetes)
  • Возможность быстро откатываться к рабочей версии (контейнеры легко версионировать)

Всё это критично, если вы хотите, чтобы ваше приложение не падало из-за несовместимых пакетов или кривых апдейтов на сервере. А ещё — это must-have для автоматизации и CI/CD.

Как быстро и просто всё настроить?

Давайте разложим процесс по шагам. Вот что вам понадобится:

  • VPS или выделенный сервер с Ubuntu 24.04 (заказать VPS / выделенный сервер)
  • Доступ по SSH (желательно с sudo)
  • Установленный Docker и Docker Compose
  • Минимальные знания Python и Flask (но даже если нет — разберёмся по ходу)

1. Установка Docker и Docker Compose

На Ubuntu 24.04 всё просто. Вот полный набор команд:


sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
newgrp docker

Проверьте, что Docker работает:


docker run hello-world

Docker Compose теперь встроен как docker compose (без дефиса). Проверяем:


docker compose version

2. Создаём простое Flask-приложение

Создаём директорию проекта и минимальный Flask-скрипт:


mkdir flask-docker-demo
cd flask-docker-demo
nano app.py

Вставляем в app.py:


from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello, Docker on Ubuntu 24.04!"

if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)

Создаём requirements.txt:


flask

3. Пишем Dockerfile

Dockerfile — это рецепт, как собрать контейнер. Пример:


# Используем официальный Python-образ
FROM python:3.12-slim

# Устанавливаем рабочую директорию
WORKDIR /app

# Копируем зависимости
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Копируем исходники
COPY . .

# Запускаем приложение
CMD ["python", "app.py"]

4. Собираем и запускаем контейнер

Собираем образ:


docker build -t flask-docker-demo .

Запускаем контейнер:


docker run -d -p 5000:5000 --name flask-demo flask-docker-demo

Проверьте в браузере или через curl http://localhost:5000 — должно вернуть Hello, Docker on Ubuntu 24.04!

5. (Опционально) Docker Compose для продвинутых

Если хотите добавить базу данных или другие сервисы — используйте docker-compose.yml:


version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
restart: always

Запуск:


docker compose up -d

Примеры, схемы, практические советы

Вот типичные сценарии и грабли, на которые наступают новички и не только:

Кейс Что происходит Рекомендация
Flask работает, но не доступен извне Приложение слушает 127.0.0.1 вместо 0.0.0.0 В app.run() указывайте host="0.0.0.0"
Контейнер падает сразу после запуска Ошибка в Dockerfile или зависимостях Смотрите логи: docker logs flask-demo
Изменения в коде не видны Контейнер не пересобран после изменений Пересоберите образ: docker build ...
Проблемы с правами на порты Порт 80 занят или требует sudo Используйте порты >1024 или настройте reverse proxy (nginx)
Нужно хранить данные вне контейнера Данные теряются при пересоздании контейнера Используйте Docker volumes для хранения данных

Практические советы:

  • Для продакшена используйте Gunicorn вместо встроенного Flask-сервера
  • Добавьте .dockerignore (как .gitignore) — чтобы не тянуть лишние файлы в образ
  • Для HTTPS и балансировки — ставьте nginx перед контейнером
  • Для автозапуска после ребута — используйте restart: always в Compose или systemd unit
  • Для CI/CD — интегрируйте сборку и деплой через GitHub Actions, GitLab CI, Jenkins и т.д.

Похожие решения, программы и утилиты

  • Podman — альтернатива Docker, совместим с Dockerfile, rootless, но чуть сложнее для новичков (официальный сайт)
  • Buildah — для сборки контейнеров без демона Docker (buildah.io)
  • Heroku — PaaS, где Flask можно деплоить без Docker, но с ограничениями и платно при нагрузке (heroku.com)
  • Kubernetes — для масштабирования и оркестрации контейнеров, но требует отдельного изучения (kubernetes.io)
  • uWSGI — ещё один популярный WSGI-сервер для Python-приложений (uwsgi-docs)

Статистика и сравнение с другими решениями

Решение Плюсы Минусы Когда использовать
Flask + Docker Изоляция, переносимость, масштабируемость, автоматизация Требует понимания Docker, чуть больше ресурсов Для продакшена, CI/CD, микросервисов
Flask на голой Ubuntu Просто, быстро для теста Конфликты зависимостей, сложнее масштабировать Для прототипов, локальной разработки
Heroku Меньше ручной работы, автоскейлинг Дорого при нагрузке, ограничения Для MVP, демо, стартапов
Kubernetes Масштабируемость, отказоустойчивость Сложно, требует DevOps-скиллов Для крупных проектов, highload

Интересные факты и нестандартные способы использования

  • Можно запускать несколько Flask-приложений на одном сервере, каждое в своём контейнере, не боясь конфликтов портов и библиотек.
  • Docker позволяет тестировать разные версии Python или Flask без переустановки системы — просто меняйте базовый образ в Dockerfile.
  • Можно собирать образы на CI и пушить их в приватный Docker Registry — удобно для командной работы.
  • С помощью Docker Compose можно поднимать целый стек: Flask + Redis + PostgreSQL за одну команду.
  • Контейнеры можно запускать на ARM-серверах (например, Raspberry Pi) — просто выберите подходящий базовый образ.
  • Для автоматизации можно писать скрипты, которые деплоят новые версии приложения по git push — zero downtime deployment.

Какие новые возможности открываются и чем это поможет в автоматизации и скриптах?

  • Можно автоматизировать деплой: пушите код — CI собирает и выкатывает контейнер на сервер.
  • Легко откатываться к рабочей версии: просто запускаете старый контейнер.
  • Можно быстро клонировать окружение для тестирования или разработки — копируете Dockerfile и requirements.txt.
  • Скрипты для мониторинга, бэкапов, миграций можно запускать в отдельных контейнерах, не засоряя основную систему.
  • Можно масштабировать приложение горизонтально — поднимать несколько контейнеров за пару секунд.
  • Всё это отлично ложится в инфраструктуру как код (IaC) — описываете всё в yaml-файлах, и сервер сам собирает нужную конфигурацию.

Вывод — заключение и рекомендации

Если вы хотите, чтобы ваше Flask-приложение было легко переносимым, масштабируемым и не зависело от настроек конкретного сервера — используйте Docker. Это не только модно, но и реально удобно: меньше багов, меньше ручной рутины, проще автоматизация. Ubuntu 24.04 — отличный выбор для сервера: свежая, стабильная, с долгой поддержкой. Flask + Docker — идеальная связка для микросервисов, pet-проектов, MVP и даже продакшена (если добавить Gunicorn и nginx).

Рекомендую сразу привыкать к контейнерам — это не только про Python, но и про любую современную разработку. Если нужен VPS или выделенный сервер для экспериментов — берите VPS или выделенный сервер и пробуйте на практике. Не бойтесь экспериментировать: контейнеры легко сносить и пересоздавать, а опыт работы с Docker сейчас ценится на вес золота.

Официальные ссылки для самостоятельного изучения:

Если остались вопросы — пишите в комменты, разберём любые кейсы и баги. Удачного деплоя и стабильных аптаймов!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked