Введение
Docker стал популярным выбором для развертывания веб-приложений, в том числе приложений на основе Flask. В этом руководстве мы расскажем вам, как создать Docker-образ для Flask-приложения и запустить его в рабочем (production) режиме с использованием Docker. По окончании этого материала вы будете хорошо понимать, как использовать Docker для развертывания своего Flask-приложения в рабочей среде.
Понимание Docker
Docker — популярная открытая платформа, которая позволяет разработчикам создавать, развертывать и запускать приложения в контейнеризованной среде. Она предоставляет способ упаковать приложение и все его зависимости в один контейнер, что упрощает перенос приложения между разными вычислительными средами.
Что такое Docker?
Docker — это программная платформа, которая позволяет разработчикам создавать, развертывать и запускать приложения в контейнерах. Контейнер — это легковесный, автономный и исполняемый пакет, который включает все необходимое для запуска приложения, включая код, среду выполнения, системные инструменты и библиотеки. Контейнеры изолированы друг от друга и от операционной системы хоста, что обеспечивает последовательное и надежное развертывание приложений.
Преимущества Docker
- Переносимость: Контейнеры Docker могут работать одинаково в разных вычислительных средах, от ноутбука разработчика до производственного сервера, что гарантирует, что приложение будет вести себя одинаково независимо от базовой инфраструктуры.
- Масштабируемость: Docker позволяет легко масштабировать приложения вверх или вниз в зависимости от спроса, добавляя или удаляя контейнеры по мере необходимости.
- Эффективность: Контейнеры Docker являются легковесными и используют меньше ресурсов, чем традиционные виртуальные машины, что позволяет более эффективно использовать вычислительные ресурсы.
- Согласованность: Docker гарантирует, что приложение и его зависимости упакованы вместе, устраняя проблему «на моем компьютере работает», и обеспечивает согласованное поведение в разных средах.
Архитектура Docker
Архитектура Docker состоит из следующих ключевых компонентов:
graph TD
A[Docker Client] --> B[Docker Daemon]
B --> C[Docker Images]
B --> D[Docker Containers]
B --> E[Docker Networking]
B --> F[Docker Storage]
- Docker Client (Клиент Docker): Клиент Docker является основным пользовательским интерфейсом для взаимодействия с Docker. Он позволяет пользователям отправлять команды демону Docker, такие как создание, запуск и управление контейнерами.
- Docker Daemon (Демон Docker): Демон Docker — это сервис на стороне сервера, который управляет созданием, изменением и удалением объектов Docker, таких как образы, контейнеры, сети и тома.
- Docker Images (Образы Docker): Образы Docker — это чертежи для создания контейнеров Docker. Они содержат код приложения, библиотеки, зависимости и все другие файлы, необходимые для запуска приложения.
- Docker Containers (Контейнеры Docker): Контейнеры Docker — это запущенные экземпляры образов Docker. Они представляют изолированные, легковесные и переносимые среды, в которых запускается приложение.
- Docker Networking (Сетевые возможности Docker): Docker предоставляет встроенные сетевые возможности, которые позволяют контейнерам взаимодействовать друг с другом и с внешним миром.
- Docker Storage (Хранение в Docker): Docker предоставляет различные варианты хранения, включая тома и привязки (bind mounts), для управления постоянными данными, связанными с контейнером.
Понимание архитектуры Docker и его ключевых компонентов является важным для эффективного использования и управления Docker в процессе разработки и развертывания приложений.
Создание Docker-образа для Flask-приложения
В этом разделе мы узнаем, как создать Docker-образ для Flask-приложения.
Создание Flask-приложения
Начнем с создания простого Flask-приложения. Создайте новую директорию и перейдите в нее в терминале. Затем создайте новый файл с именем app.py со следующим содержимым:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, LabEx!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Это Flask-приложение имеет один маршрут, который возвращает сообщение "Hello, LabEx!".
Создание Docker-образа для Flask-приложения
Для создания Docker-образа для Flask-приложения нам нужно создать файл Dockerfile. Создайте новый файл с именем Dockerfile со следующим содержимым:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Разберем содержимое файла Dockerfile:
FROM python:3.9-slim: Эта строка указывает базовый образ для Docker-контейнера, в данном случае это slim-версия образа Python 3.9.WORKDIR /app: Эта строка устанавливает рабочую директорию внутри контейнера в/app.COPY requirements.txt .: Эта строка копирует файлrequirements.txtв рабочую директорию контейнера.RUN pip install --no-cache-dir -r requirements.txt: Эта строка устанавливает зависимости Python, указанные в файлеrequirements.txt.COPY . .: Эта строка копирует весь код приложения (включаяapp.py) в рабочую директорию контейнера.CMD ["python", "app.py"]: Эта строка указывает команду, которая будет выполнена при запуске контейнера, а именно запуск скриптаapp.pyс использованием интерпретатора Python.
Сборка и запуск Docker-контейнера
Теперь давайте соберем Docker-образ и запустим контейнер:
- Соберите Docker-образ:
docker build -t labex-flask-app . - Запустите Docker-контейнер:
docker run -p 5000:5000 labex-flask-app
Опция -p 5000:5000 сопоставляет порт 5000 хоста с портом 5000 контейнера, что позволяет вам получить доступ к Flask-приложению с локального компьютера.
После запуска контейнера вы можете получить доступ к Flask-приложению, открыв веб-браузер и перейдя по адресу http://localhost:5000. Вы должны увидеть отображаемое сообщение "Hello, LabEx!".
Поздравляем! Вы успешно создали Docker-образ для Flask-приложения.
Запуск Flask-приложения в рабочем (production) режиме
При запуске Flask-приложения в рабочей среде важно использовать готовый к эксплуатации веб-сервер вместо встроенного сервер разработки. В этом разделе мы узнаем, как запустить Flask-приложение в рабочем режиме с использованием Docker.
Выбор сервера для рабочей среды
Существует несколько веб-серверов, готовых к использованию в рабочей среде, которые можно использовать для запуска Flask-приложения, таких как Gunicorn, uWSGI и Waitress. В этом примере мы будем использовать Gunicorn, популярный и широко используемый веб-сервер для Python-приложений.
Изменение файла Dockerfile
Для запуска Flask-приложения в рабочем режиме с использованием Gunicorn нам нужно обновить файл Dockerfile. Замените содержимое файла Dockerfile следующим:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN pip install gunicorn
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
Основные изменения:
- Мы добавили
RUN pip install gunicornдля установки веб-сервера Gunicorn. - Мы изменили инструкцию
CMDдля запуска Flask-приложения с использованием Gunicorn. Команда"gunicorn", "--bind", "0.0.0.0:5000", "app:app"сообщает Gunicorn привязать приложение к адресу0.0.0.0:5000и использовать объектappиз файлаapp.pyв качестве WSGI-приложения.
Сборка и запуск Docker-контейнера для рабочей среды
Теперь давайте соберем Docker-образ и запустим контейнер в рабочем режиме:
- Соберите Docker-образ:
docker build -t labex-flask-app-prod . - Запустите Docker-контейнер:
docker run -p 5000:5000 labex-flask-app-prod
Теперь приложение должно запускаться в рабочем режиме с использованием Gunicorn.
Проверка настройки рабочей среды
Для проверки того, что Flask-приложение запущено в рабочем режиме, вы можете использовать следующую команду для просмотра журналов:
docker logs <container_id>
Вы должны увидеть вывод, похожий на следующий:
[2023-04-11 12:34:56 +0000] [1] [INFO] Starting gunicorn 20.1.0
[2023-04-11 12:34:56 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
[2023-04-11 12:34:56 +0000] [1] [INFO] Using worker: sync
[2023-04-11 12:34:56 +0000] [8] [INFO] Booting worker with pid: 8
Это подтверждает, что Flask-приложение запущено в рабочем режиме с использованием веб-сервера Gunicorn.
Резюме
В этом руководстве были рассмотрены основные шаги по запуску Flask-приложения в рабочем (production) режиме с использованием Docker. Мы изучили процесс создания Docker-образа для Flask-приложения, включая создание файла Dockerfile и сборку Docker-образа. Кроме того, мы обсудили, как запустить Flask-приложение в рабочем режиме внутри Docker-контейнера, обеспечивая надежное и масштабируемое развертывание. Следуя практикам, описанным в этом руководстве, вы сможете эффективно использовать Docker для развертывания своих веб-приложений на основе Flask в рабочей среде.



