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

DockerBeginner
Практиковаться сейчас

Введение

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

Понимание Docker

Что такое Docker?

Docker — это платформа с открытым исходным кодом, которая позволяет разработчикам создавать, развертывать и запускать приложения в контейнерной среде. Контейнеры — это лёгкие, автономные и исполняемые программные пакеты, включающие всё необходимое для запуска приложения, включая код, среду выполнения, системные инструменты и библиотеки. Docker предоставляет способ упаковки и распространения этих контейнеров, что упрощает развертывание и управление приложениями в различных средах.

Преимущества использования Docker

  1. Согласованность: Контейнеры Docker гарантируют, что приложение будет работать одинаково независимо от базовой инфраструктуры.
  2. Масштабируемость: Docker упрощает масштабирование приложений вверх или вниз по мере необходимости, добавляя или удаляя контейнеры.
  3. Эффективность: Контейнеры Docker лёгкие и используют меньше ресурсов, чем традиционные виртуальные машины, что позволяет более эффективно использовать вычислительные ресурсы.
  4. Переносимость: Контейнеры Docker легко перемещаются между различными средами, такими как разработка, тестирование и производство, без необходимости сложных изменений конфигурации.

Архитектура Docker

Архитектура Docker основана на модели клиент-сервер, где клиент Docker взаимодействует с демоном Docker, который отвечает за создание, запуск и управление контейнерами Docker. Ключевые компоненты архитектуры Docker включают:

graph LR A[Клиент Docker] -- Взаимодействует с --> B[Демoн Docker] B -- Управляет --> C[Образы Docker] B -- Управляет --> D[Контейнеры Docker] B -- Управляет --> E[Тома Docker] B -- Управляет --> F[Сети Docker]

Начало работы с Docker

Для начала работы с Docker вам необходимо установить движок Docker на вашей системе. Вы можете загрузить и установить Docker с официального сайта Docker (https://www.docker.com/get-started). После установки вы можете использовать командную строку docker (CLI) для взаимодействия с демоном Docker и управления своими контейнерами.

Вот пример того, как запустить простой контейнер "Hello, World!" с помощью Docker:

$ docker run hello-world

Эта команда загрузит образ hello-world из реестра Docker Hub, создаст новый контейнер и запустит приложение внутри контейнера.

Контейнеризация приложения Python

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

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

Вот пример создания образа Docker для простого приложения Python:

  1. Создайте новую директорию для вашего проекта и перейдите в неё в терминале.

  2. Создайте новый файл с именем app.py и добавьте следующий код Python:

    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)
  3. Создайте новый файл с именем Dockerfile и добавьте следующее содержимое:

    FROM python:3.9-slim
    WORKDIR /app
    COPY . /app
    RUN pip install --no-cache-dir -r requirements.txt
    CMD ["python", "app.py"]

    Этот Dockerfile определяет шаги для создания образа Docker для вашего приложения Python. Он начинается с базового образа python:3.9-slim, устанавливает рабочую директорию в /app, копирует файлы приложения в контейнер, устанавливает необходимые зависимости и запускает скрипт app.py.

  4. Создайте новый файл с именем requirements.txt и добавьте следующую зависимость:

    flask
  5. Соберите образ Docker с помощью следующей команды:

    $ docker build -t my-python-app .

    Эта команда собирает образ Docker с меткой my-python-app.

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

После создания образа Docker вы можете запустить приложение Python в контейнере Docker с помощью следующей команды:

$ docker run -p 5000:5000 my-python-app

Эта команда запускает контейнер my-python-app, отображая порт 5000 контейнера на порт 5000 хоста.

Теперь вы можете получить доступ к приложению Python, открыв веб-браузер и перейдя по адресу http://localhost:5000. Вы должны увидеть сообщение "Hello, LabEx!".

Развертывание контейнера Docker

Загрузка образа Docker в реестр

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

Вот как вы можете загрузить образ my-python-app в Docker Hub:

  1. Создайте учетную запись Docker Hub (если у вас её ещё нет) на сайте https://hub.docker.com.

  2. Войдите в Docker Hub, используя команду docker login:

    $ docker login

    Введите имя пользователя и пароль Docker Hub, когда будет запрошено.

  3. Пометьте локальный образ my-python-app именем пользователя Docker Hub и меткой (например, latest):

    $ docker tag my-python-app username/my-python-app:latest
  4. Загрузите помеченный образ в Docker Hub:

    $ docker push username/my-python-app:latest

Теперь ваш образ Docker доступен в реестре Docker Hub и может быть загружен и развернут на других системах.

Развертывание контейнера Docker

Для развертывания контейнера Docker в рабочей среде можно использовать платформу оркестрации контейнеров, такую как Kubernetes или Docker Swarm. Эти платформы предоставляют возможности масштабирования, балансировки нагрузки и управления жизненным циклом ваших контейнеров.

Вот пример того, как можно развернуть контейнер my-python-app с помощью Docker Swarm:

  1. Инициализируйте кластер Docker Swarm:

    $ docker swarm init
  2. Создайте новую службу для контейнера my-python-app:

    $ docker service create --name my-python-app -p 5000:5000 username/my-python-app:latest

    Эта команда создаёт новую службу с именем my-python-app и запускает образ username/my-python-app:latest, отображая порт 5000 контейнера на порт 5000 хоста.

  3. Масштабируйте службу до нескольких реплик:

    $ docker service scale my-python-app=3

    Эта команда масштабирует службу my-python-app до 3 реплик, обеспечивая высокую доступность и балансировку нагрузки для приложения.

  4. Мониторинг состояния службы:

    $ docker service ls
    $ docker service logs my-python-app

    Эти команды позволяют просмотреть состояние службы my-python-app и просмотреть журналы.

Используя платформу оркестрации контейнеров, такую как Docker Swarm, вы можете легко управлять, масштабировать и развертывать свои контейнеры Docker в рабочей среде.

Резюме

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