Введение
В этом руководстве мы рассмотрим процесс запуска приложения 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
- Согласованные среды: Docker гарантирует, что приложения работают одинаково независимо от базовой инфраструктуры.
- Масштабируемость: Контейнеры Docker можно легко масштабировать вверх или вниз для удовлетворения меняющегося спроса.
- Переносимость: Контейнеры Docker могут работать на любой системе, на которой установлен Docker, что упрощает перемещение приложений между различными средами.
- Эффективность: Контейнеры Docker лёгкие и используют меньше ресурсов, чем традиционные виртуальные машины.
- Изоляция: Контейнеры 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 мы:
- Используем официальный образ Python 3.9 slim в качестве базового.
- Устанавливаем рабочую директорию в
/app. - Копируем файл
requirements.txtв контейнер. - Устанавливаем зависимости Python.
- Копируем файл
app.pyв контейнер. - Открываем порт 5000 для приложения Flask.
- Устанавливаем команду для запуска приложения 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 приложений.



