- Home »

Как создать и развернуть 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 сейчас ценится на вес золота.
Официальные ссылки для самостоятельного изучения:
Если остались вопросы — пишите в комменты, разберём любые кейсы и баги. Удачного деплоя и стабильных аптаймов!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.