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

DockerBeginner
Практиковаться сейчас

Введение

В этом руководстве мы рассмотрим процесс запуска приложения Flask внутри контейнера Docker. Мы рассмотрим основы Docker, создадим приложение Flask, а затем упакуем приложение Flask в контейнер, чтобы воспользоваться преимуществами, которые предоставляет Docker.

Понимание Docker

Docker — это популярная платформа с открытым исходным кодом, которая позволяет разработчикам создавать, развертывать и запускать приложения в контейнерной среде. Контейнеры — это лёгкие, автономные и исполняемые программные пакеты, содержащие всё необходимое для запуска приложения, включая код, среду выполнения, системные инструменты и библиотеки.

Что такое Docker?

Docker — это инструмент, разработанный для упрощения создания, развертывания и запуска приложений с помощью контейнеров. Контейнеры позволяют разработчику упаковать приложение со всеми необходимыми компонентами, такими как библиотеки и другие зависимости, и отправить всё это как один пакет.

Архитектура Docker

Архитектура Docker состоит из следующих компонентов:

graph TD A[Клиент Docker] --> B[Дэмон Docker] B --> C[Образы Docker] B --> D[Контейнеры Docker] B --> E[Репозитории Docker]
  • Клиент Docker: Пользовательский интерфейс для взаимодействия с системой Docker.
  • Дэмон Docker: Фоновый процесс, управляющий объектами Docker, такими как образы, контейнеры, сети и тома.
  • Образы Docker: Чертежи для создания контейнеров Docker.
  • Контейнеры Docker: Исполняемые экземпляры образов Docker.
  • Репозитории Docker: Репозитории для хранения и распространения образов Docker.

Преимущества использования Docker

  1. Согласованные среды: Docker гарантирует, что приложения работают одинаково независимо от базовой инфраструктуры.
  2. Масштабируемость: Контейнеры Docker можно легко масштабировать вверх или вниз для удовлетворения меняющегося спроса.
  3. Переносимость: Контейнеры Docker могут работать на любой системе, на которой установлен Docker, что упрощает перемещение приложений между различными средами.
  4. Эффективность: Контейнеры Docker лёгкие и используют меньше ресурсов, чем традиционные виртуальные машины.
  5. Изоляция: Контейнеры Docker обеспечивают высокую степень изоляции, гарантируя, что приложения работают в безопасной и согласованной среде.

Начало работы с Docker

Для начала работы с Docker вам необходимо установить движок Docker на вашей системе. Вы можете загрузить Docker с официального сайта (https://www.docker.com/get-started) и следовать инструкциям по установке для вашей операционной системы.

После установки Docker вы можете начать создание и запуск контейнеров Docker. Вот простой пример запуска контейнера Docker с образом Ubuntu:

docker run -it ubuntu

Эта команда загрузит образ Ubuntu из репозитория Docker, создаст новый контейнер и запустит интерактивную сессию командной строки внутри контейнера.

Создание приложения Flask

Flask — популярный Python-фреймворк для веб-приложений, отличающийся лёгкостью, гибкостью и простотой использования. В этом разделе мы пройдёмся по процессу создания простого приложения Flask.

Настройка среды разработки

Сначала настроим среду разработки. В этом примере мы будем использовать Python 3.9 и Flask 2.0.2.

## Установка Python 3.9
sudo apt-get update
sudo apt-get install -y python3.9

## Установка Flask
pip3 install flask==2.0.2

Создание приложения Flask

Теперь создадим простое приложение Flask. Создайте новый файл с именем app.py и добавьте следующий код:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, LabEx!'

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

В этом примере мы импортируем класс Flask из модуля flask, создаём новый экземпляр Flask и определяем маршрут для корневого URL (/), который возвращает строку "Hello, LabEx!". Наконец, мы запускаем приложение с помощью метода app.run().

Запуск приложения Flask

Чтобы запустить приложение Flask, выполните следующую команду в вашей терминале:

python3 app.py

Это запустит сервер разработки Flask и сделает ваше приложение доступным по адресу http://localhost:5000/.

Добавление функциональности

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

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, LabEx!'

@app.route('/greet', methods=['POST'])
def greet():
    name = request.form['name']
    return f'Hello, {name}!'

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

В этом примере мы добавили новый маршрут /greet, который принимает POST-запрос с параметром name. Затем приложение возвращает сообщение приветствия с предоставленным именем.

Контейнеризация приложения Flask

Теперь, когда у нас есть базовое приложение Flask, давайте контейнеризуем его с помощью Docker. Контейнеризация приложения позволяет упаковать его вместе с зависимостями в автономную единицу, которую легко развернуть и масштабировать.

Создание Dockerfile

Для контейнеризации приложения Flask нам нужен Dockerfile. Dockerfile — это текстовый документ, содержащий все команды, которые пользователь может выполнить в командной строке для сборки образа.

Создайте новый файл с именем Dockerfile и добавьте в него следующее содержимое:

## Используем официальный образ Python в качестве базового образа
FROM python:3.9-slim

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

## Копируем файл requirements.txt в контейнер
COPY requirements.txt .

## Устанавливаем зависимости Python
RUN pip install --no-cache-dir -r requirements.txt

## Копируем код приложения Flask в контейнер
COPY app.py .

## Открываем порт, на котором будет работать приложение Flask
EXPOSE 5000

## Устанавливаем команду для запуска приложения Flask
CMD ["python", "app.py"]

В этом Dockerfile мы:

  1. Используем официальный образ Python 3.9 slim в качестве базового.
  2. Устанавливаем рабочую директорию в /app.
  3. Копируем файл requirements.txt в контейнер.
  4. Устанавливаем зависимости Python.
  5. Копируем файл app.py в контейнер.
  6. Открываем порт 5000 для приложения Flask.
  7. Устанавливаем команду для запуска приложения Flask.

Сборка Docker образа

Теперь давайте соберем Docker образ для нашего приложения Flask. В терминале выполните следующую команду:

docker build -t labex-flask-app .

Эта команда соберет Docker образ с меткой labex-flask-app используя Dockerfile в текущей директории.

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

После сборки образа мы можем запустить приложение Flask в Docker контейнере:

docker run -p 5000:5000 labex-flask-app

Эта команда запустит новый контейнер на основе образа labex-flask-app и сопоставит порт 5000 на хосте с портом 5000 в контейнере.

Теперь вы можете получить доступ к приложению Flask по адресу http://localhost:5000/.

Развертывание Docker образа

После контейнеризации приложения Flask вы можете развернуть Docker образ в реестре контейнеров, таком как Docker Hub или частном реестре, а затем развернуть приложение в производственной среде.

Резюме

К концу этого руководства вы получите чёткое представление о том, как контейнеризовать приложение Flask с помощью Docker. Вы сможете создать Docker образ для вашего приложения Flask, запустить его в Docker контейнере и использовать преимущества Docker для разработки и развертывания Flask приложений.