← Back to blog

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

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

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

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

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

Контейнеры Docker

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

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

Чтобы решить эти проблемы, мы можем использовать контейнеры Docker для изоляции на уровне ПО:

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

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

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

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

  • Единообразная упаковка практически чего угодно в локальной и production-средах.

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

Шаг 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? Ознакомьтесь со следующими руководствами:

Удачных вычислений!

Preslav Dobrev

Автор · CloudSigma

Комментарии

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