Назад в блог

Контейнеризация Python-приложения с помощью Docker

Контейнеризация Python-приложения с помощью Docker

Docker — это бесплатное решение с открытым исходным кодом для разработки, развертывания и управления приложениями в легковесной виртуализации на уровне ОС. В этом руководстве мы продемонстрируем создание Python приложения внутри контейнера Docker.

Prerequisites

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

Docker Containers

При запуске различных программ в одной и той же среде что-то может пойти (и пойдет) не так. Чем больше программ вы добавляете, тем более нестабильной становится система. Для обычных людей это может быть не так критично. Однако, когда речь идет о критически важных приложениях, последствия могут быть серьезными.

Чем больше приложений появляется в системе, тем больше поверхность атаки. Одно скомпрометированное приложение может легко привести к падению всей системы.

Для решения этих проблем мы можем использовать контейнеры Docker для изолирования на уровне программного обеспечения:

  • Приложения внутри контейнера будут иметь ограниченный доступ к файлам.

  • Контейнеризированные приложения не могут видеть другие процессы, запущенные в системе.

  • Контейнеру может быть выделено определенное количество аппаратных ресурсов.

  • Сетевые порты контейнера не открыты наружу.

  • Согласованная упаковка практически чего угодно для локальных сред и сред продакшена.

Для демонстрации мы создадим простой сервер Python внутри контейнера Docker, преобразуем контейнер в образ и развернем этот образ в тестовой рабочей среде.

Шаг 1 – Настройка файловой системы

Для размещения проекта сначала мы создадим выделенную директорию:

Внутри этой директории создайте поддиректорию src для хранения нашего кода:

Шаг 2 – Создание сервера Python

На этом шаге мы создадим простой HTTP-сервер на Python. Создайте файл server.py:

Откройте его в текстовом редакторе:

Введите следующий код Python:

Здесь:

  • Мы используем класс HTTPServer и запрашиваем обработчик из стандартной библиотеки Python, сохраняя программу простой.

  • Функция run инициализирует экземпляр HTTPserver.

  • Как показывают аргументы server_address, сервер будет прослушивать любые входящие подключения на порту 8080.

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

В новом окне терминала мы можем использовать curl для отправки запроса на сервер:

Кроме того, вы можете открыть ссылку в веб-браузере:

Шаг 3 – Создание Dockerfile

Файл Dockerfile  содержит необходимые инструкции для создания образа Docker. Инструкции в файле выполняются последовательно. Узнайте больше о Dockerfile.

Создайте новый Dockerfile для нашего проекта:

Теперь мы добавим в него необходимый код. Откройте его в текстовом редакторе:

Введите следующий код:

Здесь,

  • Любой Dockerfile должен начинаться с FROM директивы. В нашем случае мы объявляем Python в качестве основы Docker-образа.

  • Директива ENV SRC_DIR задает расположение директории контейнера.

  • Директива COPY копирует файлы из директории src, в которой сейчас находится сервер Python.

  • Переменная PYTHONBUFFERED=1 указывает, что Python будет выводить и записывать логи напрямую в STDOUT. В противном случае логи не отправлялись бы ни в какой буфер.

  • Директива CMD задает команду по умолчанию для запуска при выполнении контейнера. В данном случае мы используем эту директиву для запуска нашего Python-сервера.

Шаг 4 – Генерация Docker-образа

Когда Dockerfile готов, мы можем собрать образ. Запустите следующую команду Docker, чтобы начать процесс:

Здесь,

  • Флаг -t используется для присвоения тега нашему Docker-образу как python_server.

  • Docker загрузит все необходимые компоненты и объединит их в образ.

Шаг 5 – Запуск образа

Образ готов к развертыванию. Мы можем запустить его с помощью следующей команды:

Здесь мы перенаправляем порт 8080 с локальной машины на Docker-образ с помощью флага -p .

Мы можем легко проверить, запущен ли и работает ли сервер, с помощью curl:

Шаг 6 – Остановка сервера

В терминале нажмите “Ctrl + C”, чтобы завершить процесс Docker:

Шаг 7 – Экспорт и импорт Docker-образа

Теперь у нас есть функциональный Docker-образ, содержащий наш Python-сервер. С помощью функций экспорта и импорта Docker мы можем перенести его на любую другую систему.

Сначала проверьте список Docker-образов в текущей системе:

Наша цель — Docker-образ python_server, который мы только что создали. Следующая команда экспортирует его в виде TAR-архива:

После переноса файла python_server.tar на целевую машину используйте следующую команду для импорта Docker-образа:

Заключение

В этом руководстве мы продемонстрировали создание Docker-образа из приложения на Python. Мы создали простой веб-сервер на Python и собрали из него Docker-образ. Теперь этот Docker-образ можно развернуть в любой среде и ожидать стабильной работы.

Хотите узнать больше о Docker? Ознакомьтесь со следующими руководствами:

Приятной работы!

author

Preslav Dobrev

Автор · CloudSigma

Preslav Dobrev — креативный дизайнер в CloudSigma, сосредоточенный на формировании последовательного корпоративного образа с помощью традиционных и инновационных маркетинговых каналов. Он умело сочетает художественное видение со стратегическим маркетингом, создавая убедительные истории бренда.

Комментарии

Комментариев пока нет. Будьте первым.