Общие сведения о приложениях контейнеров Python в Azure
В этой статье описывается, как перейти из кода проекта Python (например, веб-приложения) в развернутый контейнер Docker в Azure. В этой статье рассматривается общий процесс контейнеризации, варианты развертывания контейнеров в Azure и конфигурация контейнеров для Python в Azure.
Характер контейнеров Docker заключается в том, что создание образа Docker из кода и развертывание этого образа в контейнере в Azure аналогично языкам программирования. Вопросы, связанные с языком ( Python в этом случае, находятся в конфигурации во время процесса контейнеризации в Azure, в частности структура и конфигурация Dockerfile, поддерживающие веб-платформы Python, такие как Django, Flask и FastAPI.
Сценарии рабочего процесса контейнера
Для разработки контейнеров Python некоторые типичные рабочие процессы для перехода из кода в контейнер:
Сценарий | Description | Рабочий процесс |
---|---|---|
Dev | Создайте образы Docker Python в среде разработки. | Код: клонированный код git для среды разработки (с установленным Docker). Сборка: использование Docker CLI, VS Code (с расширениями), PyCharm (с подключаемым модулем). Описано в разделе "Работа с образами и контейнерами Python Docker". Тест. В среде разработки в контейнере Docker. Отправка: в реестр, например Реестр контейнеров Azure, Docker Hub или частный реестр. Развертывание: в службе Azure из реестра. |
Гибридный | В среде разработки создайте образы Docker Python в Azure. | Код: клонированный код git для среды разработки (не требуется для установки Docker). Сборка: VS Code (с расширениями), Azure CLI. Отправка: чтобы Реестр контейнеров Azure Развертывание: в службе Azure из реестра. |
Azure | Все в облаке; используйте Azure Cloud Shell для создания кода образов Docker Python из репозитория GitHub. | Код: репозиторий GitHub GitHub в Azure Cloud Shell. Сборка. В Azure Cloud Shell используйте Azure CLI или Docker CLI. Отправка: в реестр, например Реестр контейнеров Azure, Docker Hub или частный реестр. Развертывание: в службе Azure из реестра. |
Цель этих рабочих процессов заключается в том, чтобы контейнер работал в одном из ресурсов Azure, поддерживающих контейнеры Docker, как указано в следующем разделе.
Среда разработки может быть локальной рабочей станцией с Visual Studio Code или PyCharm, Codespaces (среда разработки, размещенная в облаке), или контейнерами разработки Visual Studio (контейнером в качестве среды разработки).
Параметры контейнера развертывания в Azure
Приложения контейнеров Python поддерживаются в следующих службах.
Служба | Description |
---|---|
Веб-приложение для контейнеров | Полностью управляемая служба размещения для контейнерных веб-приложений, включая веб-сайты и веб-API. Контейнерные веб-приложения в службе приложение Azure могут масштабироваться по мере необходимости и использовать оптимизированные рабочие процессы CI/CD с Помощью Docker Hub, Реестр контейнеров Azure и GitHub. Идеально подходит для разработчиков, чтобы воспользоваться преимуществами полностью управляемой платформы службы приложение Azure, но которые также хотят, чтобы один развернутый артефакт, содержащий приложение и все его зависимости. Пример. Развертывание веб-приложения Flask или FastPI в службе приложение Azure. |
Приложения контейнеров Azure (ACA) | Полностью управляемая бессерверная служба контейнеров с поддержкой Kubernetes и технологий с открытым кодом, таких как Dapr, KEDA и envoy. Основываясь на рекомендациях и оптимизированных для контейнеров общего назначения. Инфраструктура кластера управляется ACA и прямой доступ к API Kubernetes не поддерживается. Предоставляет множество концепций, относящихся к приложениям, на основе контейнеров, включая сертификаты, редакции, масштабирование и среды. Идеально подходит для команд, которые хотят начать создание микрослужб контейнеров без необходимости управлять базовой сложностью Kubernetes. Пример. Развертывание веб-приложения Flask или FastPI в приложениях контейнеров Azure. |
Экземпляры контейнеров Azure | Бессерверное предложение, которое предоставляет единый модуль изолированных контейнеров Hyper-V по запросу. Выставляется плата за потребление, а не подготовленные ресурсы. Такие понятия, как масштабирование, балансировка нагрузки и сертификаты, не предоставляются контейнерами ACI. Пользователи часто взаимодействуют с ACI через другие службы; например, AKS для оркестрации. Идеально, если вам нужен менее "сознаенный" стандартный блок, который не соответствует сценариям, для работы с приложениями контейнеров Azure оптимизированы. Пример. Создание образа контейнера для развертывания для Экземпляры контейнеров Azure. (Учебник не относится к Python, но эти понятия применяются ко всем языкам.) |
Служба Azure Kubernetes (AKS) | Полностью управляемый параметр Kubernetes в Azure. Поддерживает прямой доступ к API Kubernetes и выполняет любую рабочую нагрузку Kubernetes. Весь кластер размещается в вашей подписке, включая конфигурации и операции кластера, находящиеся в пределах вашего контроля и ответственности. Идеально подходит для команд, которые ищут полностью управляемую версию Kubernetes в Azure. Пример. Развертывание кластера Служба Azure Kubernetes с помощью Azure CLI. |
Функции Azure | Решение, управляемое событиями, бессерверными функциями как услуга (FAAS). Предоставляет множество характеристик приложениям контейнеров Azure для масштабирования и интеграции с событиями, но оптимизирован для временных функций, развернутых как код или контейнеры. Идеально подходит для команд, желающих активировать выполнение функций на событиях; например, для привязки к другим источникам данных. Пример. Создание функции в Linux с помощью пользовательского контейнера. |
Более подробное сравнение этих служб см. в статье "Сравнение приложений контейнеров" с другими параметрами контейнера Azure.
Виртуальные среды и контейнеры
При запуске проекта Python в среде разработки использование виртуальной среды — это распространенный способ управления зависимостями и обеспечения воспроизводимости настройки проекта. Виртуальная среда содержит интерпретатор Python, библиотеки и скрипты, необходимые для кода проекта, выполняемого в этой среде. Зависимости для проектов Python управляются с помощью файла requirements.txt .
Совет
При использовании контейнеров виртуальные среды не требуются, если вы не используете их для тестирования или других причин. Если вы используете виртуальные среды, не копируйте их в образ Docker. Используйте файл dockerignore, чтобы исключить их.
Контейнеры Docker можно рассматривать как предоставление аналогичных возможностей в качестве виртуальных сред, но с дополнительными преимуществами в воспроизводимости и переносимости. Контейнер Docker можно запускать в любом месте, независимо от ОС.
Контейнер Docker содержит код проекта Python и все необходимое для выполнения кода. Чтобы перейти к этой точке, необходимо создать код проекта Python в образ Docker, а затем создать контейнер, выполняющийся экземпляр этого образа.
Для контейнерных проектов Python используются ключевые файлы:
Файл проекта | Description |
---|---|
requirements.txt | Используется во время сборки образа Docker для получения правильных зависимостей в образе. |
Dockerfile | Используется для указания способа сборки образа Docker Python. Дополнительные сведения см. в разделе Инструкции Dockerfile для Python. |
.dockerignore | Файлы и каталоги в dockerignore не копируются в образ Docker с COPY помощью команды в Dockerfile. Файл dockerignore поддерживает шаблоны исключений, аналогичные файлам gitignore . Дополнительные сведения см . в файле dockerignore. Исключение файлов помогает повысить производительность сборки изображений, но также следует использовать для предотвращения добавления конфиденциальной информации в образ, где его можно проверить. Например, dockerignore должен содержать строки, чтобы игнорировать .env и .venv (виртуальные среды). |
Параметры контейнера для веб-платформ
Веб-платформы имеют порты по умолчанию, на которых они прослушивают веб-запросы. При работе с некоторыми решениями контейнеров Azure необходимо указать порт, который будет прослушивать контейнер.
Веб-платформа | Порт |
---|---|
Django | 8000 |
Flask | 5000 или 5002 |
FastAPI (uvicorn) | 8000 или 80 |
В следующей таблице показано, как задать порт для разных решений контейнеров Azure.
Решение контейнера Azure | Настройка порта веб-приложения |
---|---|
Веб-приложение для контейнеров | По умолчанию Служба приложений предполагает, что ваш пользовательский контейнер прослушивает порт 80 или 8080. Если контейнер прослушивает другой порт, задайте параметр приложения WEBSITES_PORT в приложении Служба приложений. Дополнительные сведения см. в разделе "Настройка пользовательского контейнера для службы приложение Azure". |
Приложения контейнеров Azure | Приложения контейнеров Azure позволяют предоставлять приложение-контейнер для общедоступного веб-сайта, виртуальной сети или другим приложениям-контейнерам в вашей среде, включив входящий трафик. Задайте для порта входящий трафик targetPort , который контейнер прослушивает входящие запросы. Конечная точка входящего трафика приложения всегда предоставляется через порт 443. Дополнительные сведения см. в статье "Настройка httpS или TCP-входящего трафика" в приложениях контейнеров Azure. |
Экземпляры контейнеров Azure, Azure Kubernetes | Задайте порт во время создания контейнера. Необходимо убедиться, что решение имеет веб-платформу, сервер приложений (например, gunicorn, uvicorn) и веб-сервер (например, nginx). Например, можно создать два контейнера, один контейнер с веб-платформой и сервером приложений и другой платформой с веб-сервером. Два контейнера взаимодействуют по одному порту, а контейнер веб-сервера предоставляет 80/443 для внешних запросов. |
Python Dockerfile
Dockerfile — это текстовый файл, содержащий инструкции по созданию образа Docker. Первая строка указывает базовый образ, с который начинается. За этой строкой следует инструкции по установке необходимых программ, копированию файлов и другим инструкциям по созданию рабочей среды. Например, некоторые примеры, относящиеся к Python, для ключевых инструкций Dockerfile Python, показаны в таблице ниже.
Инструкция | Характер использования | Пример |
---|---|---|
FROM | Задает базовый образ для последующих инструкций. | FROM python:3.8-slim |
ПРЕДОСТАВЛЯТЬ | Сообщает Docker, что контейнер прослушивает указанные сетевые порты во время выполнения. | EXPOSE 5000 |
COPY | Копирует файлы или каталоги из указанного источника и добавляет их в файловую систему контейнера по указанному пути назначения. | COPY . /app |
ЗАПУСТИТЬ | Выполняет команду внутри образа Docker. Например, вытягивание зависимостей. Команда выполняется сразу во время сборки. | RUN python -m pip install -r requirements.txt |
CMD | Эта команда предоставляет значение по умолчанию для выполнения контейнера. Существует только одна инструкция CMD. | CMD ["gunicorn", "--bind", "0.0.0.0:5000", "wsgi:app"] |
Команда сборки Docker создает образы Docker из Dockerfile и контекста. Контекст сборки — это набор файлов, расположенных по указанному пути или URL-адресу. Как правило, вы создадите образ из корневого каталога проекта Python, а путь к команде сборки — ".", как показано в следующем примере.
docker build --rm --pull --file "Dockerfile" --tag "mywebapp:latest" .
Процесс сборки может ссылаться на любой из файлов в контексте. Например, сборка может использовать инструкцию COPY для ссылки на файл в контексте. Ниже приведен пример dockerfile для проекта Python с помощью платформы Flask :
FROM python:3.8-slim
EXPOSE 5000
# Keeps Python from generating .pyc files in the container.
ENV PYTHONDONTWRITEBYTECODE=1
# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1
# Install pip requirements.
COPY requirements.txt .
RUN python -m pip install -r requirements.txt
WORKDIR /app
COPY . /app
# Creates a non-root user with an explicit UID and adds permission to access the /app folder.
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser
# Provides defaults for an executing container; can be overridden with Docker CLI.
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "wsgi:app"]
Можно создать Dockerfile вручную или создать его автоматически с помощью VS Code и расширения Docker. Дополнительные сведения см. в разделе "Создание файлов Docker".
Команда сборки Docker входит в интерфейс командной строки Docker. При использовании таких идентификаторов, как VS Code или PyCharm, команды пользовательского интерфейса для работы с образами Docker вызывают команду сборки для вас и автоматизируют задание параметров.
Работа с образами и контейнерами Python Docker
VS Code и PyCharm
Работа в интегрированной среде разработки (IDE) для разработки контейнеров Python не требуется, но может упростить множество задач, связанных с контейнерами. Ниже приведены некоторые действия, которые можно сделать с помощью VS Code и PyCharm.
Скачайте и создайте образы Docker.
- Создайте образы в среде разработки.
- Создание образов Docker в Azure без установки Docker в среде разработки. (Для PyCharm используйте Azure CLI для создания образов в Azure.)
Создайте и запустите контейнеры Docker из существующего образа, извлеченного образа или непосредственно из Dockerfile.
Запуск многоконтайнерных приложений с помощью Docker Compose.
Подключение и работать с реестрами контейнеров, такими как Docker Hub, GitLab, JetBrains Space, Docker V2 и другие локальные реестры Docker.
(только VS Code) Добавьте файлы Dockerfile и Docker Compose, адаптированные для проекта Python.
Чтобы настроить VS Code и PyCharm для запуска контейнеров Docker в среде разработки, выполните следующие действия.
Если вы еще не сделали этого, установите средства Azure для VS Code.
Instructions | Снимок экрана |
---|---|
Шаг 1. Используйте SHIFT + ALT + A, чтобы открыть расширение Azure и подтвердить подключение к Azure. Вы также можете выбрать значок Azure на панели расширений VS Code. Если вы не вошли, выберите вход в Azure и следуйте инструкциям. Если у вас возникли проблемы с доступом к подписке Azure, это может быть связано с тем, что вы находитесь за прокси-сервером. Сведения об устранении проблем с подключением см. в разделе "Сетевые Подключение ions" в Visual Studio Code. |
|
Шаг 2. Используйте CTRL + SHIFT + X для открытия расширений, поиска расширения Docker и установки расширения. Вы также можете выбрать значок расширений на панели расширений VS Code. |
|
Шаг 3. Выберите значок Docker на панели расширения, разверните изображения и щелкните его в качестве контейнера правой кнопкой мыши. | |
Шаг 4. Мониторинг выходных данных Запуска Docker в окне терминала . |
Azure CLI и Интерфейс командной строки Docker
Вы также можете работать с образами и контейнерами Python Docker с помощью Azure CLI и Docker CLI. В VS Code и PyCharm есть терминалы, где можно запускать эти среды CLIs.
Используйте интерфейс командной строки, если требуется более подробный контроль над аргументами сборки и выполнения, а также для автоматизации. Например, следующая команда показывает, как использовать Azure CLI az acr build , чтобы указать имя образа Docker.
az acr build --registry <registry-name> \
--resource-group <resource-group> \
--target pythoncontainerwebapp:latest .
В другом примере рассмотрим следующую команду, в которой показано, как использовать команду запуска Интерфейса командной строки Docker. В примере показано, как запустить контейнер Docker, который взаимодействует с экземпляром MongoDB в среде разработки за пределами контейнера. Различные значения для выполнения команды проще автоматизировать при указании в командной строке.
docker run --rm -it \
--publish <port>:<port> --publish 27017:27017 \
--add-host mongoservice:<your-server-IP-address> \
--env CONNECTION_STRING=mongodb://mongoservice:27017 \
--env DB_NAME=<database-name> \
--env COLLECTION_NAME=<collection-name> \
containermongo:latest
Дополнительные сведения об этом сценарии см. в статье о сборке и тестировании контейнерного веб-приложения Python локально.
Переменные среды в контейнерах
Проекты Python часто используют переменные среды для передачи данных в код. Например, можно указать сведения о подключении к базе данных в переменной среды, чтобы его можно было легко изменить во время тестирования. При развертывании проекта в рабочей среде подключение к базе данных можно изменить, чтобы ссылаться на экземпляр рабочей базы данных.
Пакеты, такие как python-dotenv , часто используются для чтения пар "ключ-значение" из env-файла и задают их в качестве переменных среды. Env-файл полезен при запуске в виртуальной среде, но не рекомендуется при работе с контейнерами. Не копируйте env-файл в образ Docker, особенно если он содержит конфиденциальную информацию, и контейнер будет открыт. Используйте файл dockerignore, чтобы исключить копирование файлов в образ Docker. Дополнительные сведения см. в разделе "Виртуальные среды и контейнеры " в этой статье.
Переменные среды можно передать контейнерам несколькими способами:
- Определяется в Dockerfile в виде инструкций ENV.
- Передан в качестве
--build-arg
аргументов с помощью команды сборки Docker. - Передан в качестве
--secret
аргументов с помощью команды сборки Docker и серверной части BuildKit . - Переданы как
--env
или--env-file
аргументы с помощью команды запуска Docker.
Первые два варианта имеют тот же недостаток, что и выше с env-файлами , а именно, что вы жестко закодировали потенциально конфиденциальную информацию в образ Docker. Можно проверить образ Docker и просмотреть переменные среды, например с помощью проверки образа docker команды.
Третий вариант с BuildKit позволяет передавать секретные сведения, которые будут использоваться в Dockerfile для создания образов docker безопасным способом, который не будет храниться в окончательном образе.
Четвертый вариант передачи переменных среды с помощью команды запуска Docker означает, что образ Docker не содержит переменные. Однако переменные по-прежнему видны при проверке экземпляра контейнера (например, при проверке контейнера Docker). Этот параметр может быть приемлемым при управлении доступом к экземпляру контейнера или в сценариях тестирования или разработки.
Ниже приведен пример передачи переменных среды с помощью команды выполнения интерфейса командной строки Docker и использования аргумента --env
.
# PORT=8000 for Django and 5000 for Flask
export PORT=<port-number>
docker run --rm -it \
--publish $PORT:$PORT \
--env CONNECTION_STRING=<connection-info> \
--env DB_NAME=<database-name> \
<dockerimagename:tag>
Если вы используете VS Code или PyCharm, параметры пользовательского интерфейса для работы с изображениями и контейнерами в конечном итоге используют команды Интерфейса командной строки Docker, как показано выше.
Наконец, указание переменных среды при развертывании контейнера в Azure отличается от использования переменных среды в среде разработки. Например:
Для веб-приложения для контейнеров можно настроить параметры приложения во время настройки Служба приложений. Эти параметры доступны для кода приложения в виде переменных среды и вызываются с помощью стандартного шаблона os.environ. При необходимости можно изменить значения после первоначального развертывания. Дополнительные сведения см. в разделе "Параметры приложения Access" в качестве переменных среды.
Для приложений контейнеров Azure вы настраиваете переменные среды во время начальной настройки приложения-контейнера. Последующее изменение переменных среды создает редакцию контейнера. Кроме того, приложения контейнеров Azure позволяют определять секреты на уровне приложения, а затем ссылаться на них в переменных среды. Дополнительные сведения см. в статье "Управление секретами в приложениях контейнеров Azure".
В качестве другого варианта можно использовать службу Подключение or для подключения вычислительных служб Azure к другим службам резервного копирования. С помощью соединителя можно настроить параметры сети и сведения о соединении (например, создать переменные среды) между службой вычислений и целевой вспомогательной службой в плоскости управления.
Просмотр журналов контейнера
Просмотрите журналы экземпляров контейнера, чтобы просмотреть выходные данные диагностических сообщений из кода и устранить неполадки в коде контейнера. Ниже приведено несколько способов просмотра журналов при запуске контейнера в среде разработки:
Запуск контейнера с VS Code или PyCharm, как показано в разделе VS Code и PyCharm, можно увидеть журналы в окнах терминала, открытых при выполнении docker.
Если вы используете команду запуска Интерфейса командной строки Docker с интерактивным флагом
-it
, вы увидите выходные данные после команды.В Docker Desktop можно также просматривать журналы для запущенного контейнера.
При развертывании контейнера в Azure также есть доступ к журналам контейнеров. Ниже приведены несколько служб Azure и как получить доступ к журналам контейнеров в портал Azure.
Служба Azure | Доступ к журналам в портал Azure |
---|---|
Веб-приложение для контейнеров | Перейдите к ресурсу диагностики и решения проблем , чтобы просмотреть журналы. Диагностика — это интеллектуальный и интерактивный интерфейс, помогающий устранять неполадки с приложением без требуемой конфигурации. Для просмотра журналов в режиме реального времени перейдите в поток журнала мониторинга - . Дополнительные сведения о запросах и конфигурации журналов см. в разделе "Мониторинг" других ресурсов. |
Приложения-контейнеры Azure | Перейдите к ресурсу среды Для диагностики и устранения проблем с средой. Чаще всего вы хотите просмотреть журналы контейнеров. В ресурсе контейнера в разделе "Управление редакцией приложений - " выберите редакцию и оттуда можно просмотреть журналы системы и консоли. Дополнительные сведения о запросах и конфигурации журналов см. в разделе "Мониторинг". |
Экземпляры контейнеров Azure | Перейдите к ресурсу "Контейнеры " и выберите "Журналы". |
Для указанных выше служб приведены команды Azure CLI для доступа к журналам.
Служба Azure | Команда Azure CLI для доступа к журналам |
---|---|
Веб-приложение для контейнеров | az webapp log |
Приложения-контейнеры Azure | az containerapps logs |
Экземпляры контейнеров Azure | az container logs |
Также поддерживается просмотр журналов в VS Code. Необходимо установить средства Azure для VS Code . Ниже приведен пример просмотра журналов веб-приложения для контейнеров (Служба приложений) в VS Code.