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

Если вы новичок в Docker и контейнерах, изучение развёртывания приложения Python Flask в Docker – отличный способ начать. Docker позволяет контейнеризировать приложения с лёгкой технологией и обеспечивает безопасность для быстрого развёртывания приложений.

В этом руководстве вы научитесь быть своим собственным мастером в установке и развёртывании приложений Python Flask API в контейнерах Docker.

Приготовьтесь и начните развёртывание!

Предварительные условия

Если вы хотите идти пошагово, вам понадобится следующее:

  • Установленная машина Ubuntu с установленным Docker. В этом руководстве используется Ubuntu 18.04.5 LTS с Docker v19.03.8.
  • Установленный Python v3.9 или более поздней версии на машине Ubuntu. В этом руководстве используется Python v3.9.2 на машине Ubuntu.
  • Пакет Elinks установлен на машине Ubuntu, используемой для тестирования API в этом руководстве.

Создание приложения Python Flask API (GET и POST API)

Начните этот учебник с создания приложения Python Flask. Flask – это легкий микрофреймворк веб-приложений, написанный на Python, который поддерживает WSGI. Flask предоставляет удобные инструменты и функции для создания веб-приложений на Python.

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

1. Войдите в свою машину Ubuntu, используя ваш любимый SSH-клиент.

2. Затем выполните следующие команды, чтобы создать каталог с именем ~/docker_python_flask_demo и переключиться на него. Этот каталог будет содержать все файлы, необходимые Python и Docker для запуска приложения.

mkdir ~/docker_python_flask_demo
cd ~/docker_python_flask_demo

3. Выполните команду pip ниже, чтобы установить виртуальное окружение Python (virtualenv), необходимое Flask для выполнения приложений. Виртуальное окружение Python предлагает свой собственный двоичный файл Python и установленные пакеты для каждого приложения, чтобы избежать конфликтов с другими приложениями.

pip install virtualenv
Installing the environment needed by Flask to execute the applications

4. Выполните команду virtualenv ниже, чтобы создать и активировать виртуальное окружение с использованием модуля venv.

virtualenv venv
Creating the virtual environment for Python

5. Теперь выполните следующую команду для установки пакета Python flask с помощью менеджера пакетов pip.

pip install flask

6. Выполните следующую команду для активации пакетов в вашем виртуальном окружении перед тем, как начать устанавливать или использовать их. Это изменяет переменную окружения VIRTUAL_ENV, чтобы указать на ваше виртуальное окружение, и добавляет бинарный файл Python из виртуального окружения в путь, чтобы вы запускали правильный бинарный файл.

source venv/bin/activate

7. Создайте еще один файл с именем requirements.txt и определите зависимость Flask-приложения, как показано ниже.

Flask==2.0.2

8. Создайте текстовый файл ~/docker_python_flask_demo/app.py и заполните файл следующим Python-кодом.

Нижеприведенный Python-код импортирует класс flask и создает экземпляр класса с именем app. Экземпляр класса app содержит две функции login(), выполняемые при отправке пользователем запросов на страницу /login.

Затем выполняется функция success(), отображая приветственное сообщение “name-of-the-user” в браузере.


from flask import Flask , redirect , url_for , request # Импорт класса flask
# app - объект или экземпляр Flask
app = Flask(__name__)
# app.route информирует Flask о URL, используемом функцией
@app.route('/success/<name>')
# Создание функции с именем success
def success(name):
    return 'welcome %s' % name

@app.route('/login', methods = ['GET','POST'])
# Создание функции с именем login
def login():
    if request.method == 'POST':
       user = request.form['adamlistek']
       return redirect(url_for('success', name = user)) 
    else:
       return "INVALID"
# Программа выполняется здесь в разработческом сервере (локально на вашей системе)
# с включенным режимом отладки
  
if __name__ == '__main__':
   app.run(debug = True)

9. Создайте еще один файл с именем ~/docker_python_flask_demo/form.html и скопируйте/вставьте нижеприведенный код.

Запуск HTML-кода ниже создает форму с двумя полями ввода: одно для предоставления вашего имени, а другое – для кнопки отправки.

Как только вы укажете имя пользователя и нажмете кнопку отправки, будет отправлен запрос POST, и Flask выполнит другую функцию, открыв новую веб-страницу по адресу http://localhost:5000/success/<username>.

<html>
  <body>
    <form action="http://localhost:5000/login" method="post">
      <p>Please Enter your name</p>
      <p><input type="text" name="adamlistek" /></p>
      <p><input type="submit" value="Submit" /></p>
    </form>
  </body>
</html>

10. Наконец, запустите команду Python ниже, чтобы проверить работу приложения (app.py) локально на вашей системе.

Python app.py

Как видно ниже, приложение успешно запущено на машине с Ubuntu, но не на Docker. Вы запустите то же приложение на Docker в следующих разделах.

Running the Python application on the ubuntu machine.

Создание Dockerfile для развертывания приложения Python Flask API

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

Создайте файл с именем Dockerfile в каталоге ~/docker_python_flask_demo и скопируйте/вставьте содержимое ниже в Dockerfile.

Docker будет использовать этот Dockerfile для выполнения всех инструкций или команд, необходимых для создания нового образа Docker на основе базового образа (ubuntu:18.04).

# Устанавливает базовый образ для последующих инструкций
FROM ubuntu:18.04
# Устанавливает рабочий каталог в контейнере
WORKDIR /app
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev
# Копирует файлы в рабочий каталог
COPY form.html /app/form.html
# Копирует файлы зависимостей в рабочий каталог
COPY requirements.txt /app/requirements.txt
# Устанавливает зависимости
RUN pip install -r requirements.txt
# Копирует все в рабочий каталог
COPY . /app
# Команда для выполнения при запуске контейнера
CMD [ "python" , "./app.py" ]

Теперь выполните команду tree ниже, чтобы убедиться, что все необходимые файлы для запуска приложения Python Flask содержатся в рабочем каталоге (~/docker_python_flask_demo).

tree  
Verifying all Required Files to Run the Flask Application Exist

Создание образа Docker для приложения Python Flask API

Теперь у вас есть необходимые файлы для развертывания приложения Python Flask, но эти файлы ничего не сделают, пока вы не создадите образ. Вы выполните команду docker build для создания образа Docker на основе инструкций, установленных в Dockerfile.

Запустите команду docker build ниже, чтобы создать образ Docker в рабочем каталоге (.). Эта команда помечает (-t) образ как flask-image версии 1 (:v1).

sudo docker build -t flask-image:v1 .
Building the Docker Image

Теперь выполните команду docker ниже, чтобы просмотреть все доступные образы.

sudo docker images

Ниже вы можете увидеть различные возвращаемые атрибуты, такие как REPOSITORY. Обратите внимание, что имя REPOSITORYflask-image и помечено версией (v1), как показано ниже.

Verifying the New Docker Image (flask-image)

Запуск приложения Python Flask в контейнере Docker

После создания образа Docker вы можете запустить приложение Python Flask в контейнере Docker. Контейнер Docker упаковывает код и его зависимости для быстрого запуска приложений.

1. Выполните команду docker run ниже, чтобы выполнить следующее:

  • Запустите контейнер в режиме detached (-d), чтобы он работал как фоновый процесс и выводил вывод консоли при создании.
  • Отображает порт хоста Docker (-p 5000:5000) с портом контейнера.
  • Запускает контейнер Docker (flask-image:v1)
sudo docker run -d -p 5000:5000 flask-image:v1

2. Далее выполните команду docker ниже, чтобы перечислить все контейнеры в движке Docker. Проверьте, успешно ли Docker создал контейнер.

sudo docker ps -a
Verifying the Docker container in the Docker engine

3. Наконец, выполните команду ниже, чтобы открыть веб-браузер на вашей машине Ubuntu с использованием elinks.

elinks form.html

Команда открывает веб-браузер в терминале и запрашивает имя, как показано ниже.

Введите ваше имя и нажмите кнопку Отправить.

Accessing the login web page with the form to enter your name

4. Как видно ниже, после нажатия кнопки Отправить, функция входа перенаправляется на функцию успешного выполнения в приложении Flask.

Displaying the welcome message in the web browser

Заключение

Этот учебник направлен на то, чтобы помочь вам в процессе настройки контейнера Python Flask API Docker с использованием образов Docker. Вы также затронули вопрос запуска контейнеров Python Flask с использованием Dockerfiles, что позволяет редактировать и создавать настраиваемые контейнеры на ваш выбор.

Какие еще приложения вы планируете развернуть в контейнере Docker? Возможно, контейнер MongoDB для Docker?

Source:
https://adamtheautomator.com/python-flask-api/