Создание и запуск контейнерного веб-приложения Python локально с помощью MongoDB
Статья
Эта статья является частью руководства по контейнеризации и развертыванию контейнерного веб-приложения Python в службе приложение Azure. Служба приложений позволяет запускать контейнерные веб-приложения и развертывать их с помощью возможностей непрерывной интеграции и непрерывного развертывания (CI/CD) с помощью Docker Hub, Реестр контейнеров Azure и Visual Studio Team Services. В этой части руководства вы узнаете, как создать и запустить контейнерное веб-приложение Python локально. Этот шаг является необязательным и не требуется для развертывания примера приложения в Azure.
Для локального запуска образа Docker в среде разработки требуется настройка за пределами развертывания в Azure. Думайте об этом как об инвестициях, которые могут упростить будущие циклы разработки, особенно когда вы переходите за рамки примеров приложений, и вы начинаете создавать собственные веб-приложения. Чтобы развернуть примеры приложений для Django и Flask, можно пропустить этот шаг и перейти к следующему шагу в этом руководстве. Вы всегда можете вернуться после развертывания в Azure и выполнить эти действия.
На следующей схеме служб выделены компоненты, описанные в этой статье.
Распакуйте ZIP-файл в папку и откройте окно терминала в этой папке.
2. Создание образа Docker
Если вы используете один из примеров приложений платформы, доступных для Django и Flask, вы можете перейти. Если вы работаете с собственным примером приложения, посмотрите, как настроены примеры приложений, в частности Dockerfile в корневом каталоге.
Для этих инструкций требуется Visual Studio Code и расширение Docker. Перейдите в пример папки, клонированную или скачав, и откройте VS Code с помощью команды code ..
Примечание.
Действия, описанные в этом разделе, требуют запуска управляющей программы Docker. В некоторых установках, например в Windows, необходимо открыть Docker Desktop, который запускает управляющую программу, прежде чем продолжить.
Instructions
Снимок экрана
Откройте расширение Docker.
Если расширение Docker сообщает об ошибке "Не удалось подключиться", убедитесь, что Docker установлен и запущен. Если вы впервые работаете с Docker, у вас, вероятно, нет контейнеров, образов или подключенных реестров.
Создание образа.
В Обозреватель проекта, где отображаются файлы проекта, щелкните файл Dockerfile правой кнопкой мыши и выберите "Создать образ...".
Кроме того, можно использовать палитру команд (F1 или CTRL+SHIFT+P) и введите "Образы Docker: сборка изображений" для вызова команды.
Дополнительные сведения о синтаксисе Dockerfile см. в справочнике по Dockerfile.
Убедитесь, что изображение создано.
Перейдите в раздел IMAGES расширения Docker.
Найдите недавно созданный образ. Имя образа контейнера — msdocspythoncontainerwebapp, заданное в vscode/tasks.json .
Действия, описанные в этом разделе, требуют запуска управляющей программы Docker. В некоторых установках, например в Windows, необходимо открыть Docker Desktop, который запускает управляющую программу, прежде чем продолжить.
Запустите корень примера приложения, клонированного или скачаного.
Шаг 1. В командной строке оболочки убедитесь, что Docker доступен.
docker
Если после выполнения этой команды вы увидите справку по интерфейсу командной строки Docker, а затем продолжить. В противном случае убедитесь, что Docker установлен или у вашей оболочки есть доступ к Интерфейсу командной строки Docker.
Шаг 2. Создание образа.
Общая форма команды сборки Docker .docker build --rm --pull --file "<path-to-project-root>/Dockerfile" --label "com.microsoft.created-by=docker-cli" --tag "<container-name>:latest" "<path-to-project-root>"
Например, если вы находитесь в корневом каталоге проекта, можно использовать следующую команду для создания образа:
Обратите внимание на точку (".") в конце команды, ссылающейся на текущий момент, в котором выполняется команда. Можно добавить --no-cache для принудительного перестроения.
Изображения должны отображаться по имени репозитория, ТЕГу и дате CREATED среди других характеристик изображения.
На этом этапе вы создали образ локально. Созданный образ имеет имя msdocspythoncontainerwebapp и тег "latest". Теги — это способ определения сведений о версиях, предполагаемого использования, стабильности или других сведений. Дополнительные сведения см. в статье Рекомендации по использованию тегов и управлению версиями образов контейнеров.
Изображения, созданные из VS Code или с помощью интерфейса командной строки Docker, также можно просматривать с помощью классического приложения Docker .
3. Настройка MongoDB
Для работы с этим руководством требуется база данных MongoDB с именем restaurants_reviews и коллекция с именем restaurants_reviews. В этом разделе показано, как использовать локальную установку MongoDB или Azure Cosmos DB для MongoDB для MongoDB для создания и доступа к базе данных и коллекции.
Важно!
Не используйте базу данных MongoDB, которую вы будете использовать в рабочей среде. В этом руководстве вы сохраните строка подключения MongoDB в переменной среды. Это делает его видимым для всех, кто может проверять контейнер (например, с помощью docker inspect).
Альтернативой в некоторых установках является непосредственное вызов управляющей программы Mongo.
mongod --version
Шаг 2. Измените файл mongod.cfg , чтобы добавить IP-адрес компьютера.
В файле конфигурации mongod есть ключ, определяющий bindIp имена узлов и IP-адреса, которые MongoDB прослушивает клиентские подключения. Добавьте текущий IP-адрес локального компьютера разработки. Пример приложения, запущенного локально в контейнере Docker, будет взаимодействовать с хост-компьютером с этим адресом.
Например, часть файла конфигурации должна выглядеть следующим образом:
Перезапустите MongoDB, чтобы получить изменения в файле конфигурации.
Шаг 3. Создание базы данных и коллекции в локальной базе данных MongoDB.
Задайте для имени базы данных значение "restaurants_reviews", а имя коллекции — "restaurants_reviews". Базу данных и коллекцию можно создать с расширением VS Code MongoDB, оболочкой MongoDB (mongosh) или любым другим средством с поддержкой MondoDB.
Для оболочки MongoDB приведены примеры команд для создания базы данных и коллекции:
> help
> use restaurants_reviews
> db.restaurants_reviews.insertOne({})
> show dbs
> exit
На этом этапе локальный строка подключения MongoDB имеет значение "mongodb://127.0.0.1:27017/", имя базы данных — "restaurants_reviews", а имя коллекции — "restaurants_reviews".
Для создания учетной записи Azure Cosmos DB для MongoDB можно использовать команды Azure CLI, а затем создать необходимую базу данных и коллекцию для этого руководства. Если вы еще не использовали Azure CLI, см. статью "Начало работы с Azure CLI", чтобы узнать, как скачать и установить Azure CLI локально или как выполнять команды Azure CLI в Azure Cloud Shell.
Перед выполнением следующего скрипта замените расположение и имя учетной записи Azure Cosmos DB для MongoDB соответствующими значениями. Вы можете использовать имя группы ресурсов, указанное в скрипте, или изменить его. В любом случае мы рекомендуем использовать одну и ту же группу ресурсов для всех ресурсов Azure, созданных в различных статьях этого руководства. Это упрощает их удаление после завершения работы с руководством. Если вы приехали сюда из части 4. Разверните контейнер Служба приложений, используйте имя группы ресурсов и расположение, которое вы уже использовали для ресурсов.
Сценарий предполагает, что вы используете оболочку Bash. Если вы хотите использовать другую оболочку, необходимо изменить синтаксис объявления переменной и подстановки. Выполнение скрипта может занять несколько минут.
#!/bin/bash
# LOCATION: The Azure region. Use the "az account list-locations -o table" command to find a region near you.
# RESOURCE_GROUP_NAME: The resource group name. Can contain underscores, hyphens, periods, parenthesis, letters, and numbers.
# ACCOUNT_NAME: The Azure Cosmos DB for MongDB account name. Can contain lowercase letters, hyphens, and numbers.
LOCATION='eastus'
RESOURCE_GROUP_NAME='msdocs-web-app-rg'
ACCOUNT_NAME='<cosmos-db-account-name>'
# Create a resource group
echo "Creating resource group $RESOURCE_GROUP_NAME in $LOCATION..."
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
# Create a Cosmos account for MongoDB API
echo "Creating $ACCOUNT_NAME. This command may take a while to complete."
az cosmosdb create --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --kind MongoDB
# Create a MongoDB API database
echo "Creating database restaurants_reviews"
az cosmosdb mongodb database create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --name restaurants_reviews
# Create a MongoDB API collection
echo "Creating collection restaurants_reviews"
az cosmosdb mongodb collection create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --database-name restaurants_reviews --name restaurants_reviews
# Get the connection string for the MongoDB database
echo "Get the connection string for the MongoDB account"
az cosmosdb keys list --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --type connection-strings
echo "Copy the Primary MongoDB Connection String from the list above"
После завершения скрипта скопируйте основную строку mongoDB Подключение ion String из выходных данных последней команды.
На этом этапе необходимо иметь azure Cosmos DB для MongoDB строка подключения формыmongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>, базу данных с именем restaurants_reviewsи коллекцию с именемrestaurants_reviews.
В расширении баз данных AZURE VS Code щелкните правой кнопкой мыши сервер MongoDB и получите строка подключения.
4. Локальный запуск образа в контейнере
Сведения о том, как подключиться к MongoDB, можно запустить контейнер локально. В примере приложения ожидается, что сведения о подключении MongoDB передаются в переменных среды. Существует несколько способов получения переменных среды, передаваемых в контейнер локально. Каждый из них имеет преимущества и недостатки с точки зрения безопасности. Следует избегать проверка в любой конфиденциальной информации или оставлять конфиденциальную информацию в коде в контейнере.
Примечание.
При развертывании в Azure веб-приложение получит сведения о подключении из значений среды, заданных в качестве параметров конфигурации Служба приложений, и никакие изменения для сценария локальной среды разработки не применяются.
В папке VSCODE примера приложения файл settings.json определяет, что происходит при использовании расширения Docker и выберите "Выполнить или запустить интерактивный" в контекстном меню тега. Файл settings.json содержит два шаблона для (MongoDB local) каждого из них и (MongoDB Azure) сценариев.
Если вы используете локальную базу данных MongoDB:
Замените оба экземпляра <YOUR_IP_ADDRESS> IP-адресом.
Замените оба экземпляра <CONNECTION_STRING> строка подключения для базы данных MongoDB.
Если вы используете базу данных Azure Cosmos DB для MongoDB:
Замените оба экземпляра <CONNECTION_STRING> строка подключения Azure Cosmos DB для MongoDB.
Задайте параметр конфигурации, используемый docker.dockerPath шаблонами. Чтобы задатьdocker.dockerPath, откройте палитру команд VS Code (CTRL+SHIFT+P), введите "Параметры: открыть рабочую область Параметры", а затем введите "docker.dockerPath" в поле параметров поиска. Введите docker (без кавычки) для значения параметра.
Примечание.
Предполагается restaurants_reviews, что имя базы данных и имя коллекции.
Запустите образ.
В разделе IMAGES расширения Docker найдите созданный образ.
Разверните изображение, чтобы найти последний тег, щелкните правой кнопкой мыши и выберите "Запустить интерактивный".
Вам будет предложено выбрать задачу, соответствующую вашему сценарию, либо "Интерактивная конфигурация запуска (local MongoDB)" или "Интерактивная конфигурация запуска (MongoDB Azure)".
При интерактивном запуске вы увидите все инструкции печати в коде, которые могут быть полезны для отладки. Вы также можете выбрать команду "Выполнить ", которая не является интерактивной и не открывает стандартные входные данные.
Важно!
Этот шаг завершается ошибкой, если для профиля терминала по умолчанию задано значение командной строки Windows. Чтобы изменить профиль по умолчанию, откройте палитру команд VS Code (CTRL+SHIFT+P), введите "Терминал: Выберите профиль по умолчанию", а затем выберите другой профиль из раскрывающегося меню, например Git Bash или PowerShell.
Убедитесь, что контейнер запущен.
В разделе CONTAINER расширения Docker найдите контейнер.
Разверните узел отдельных контейнеров и убедитесь, что запущено приложение msdocspythoncontainerwebapp. Если он запущен, вы увидите зеленый треугольник рядом с именем контейнера.
Протестируйте веб-приложение, щелкнув правой кнопкой мыши имя контейнера и выбрав "Открыть в браузере".
Браузер откроется в браузере по умолчанию как "http://127.0.0.1:8000" для Django или "http://127.0.0.1:5000/" для Flask.
Остановите контейнер.
В разделе CONTAINER расширения Docker найдите запущенный контейнер.
Щелкните контейнер правой кнопкой мыши и нажмите кнопку "Остановить".
Совет
Вы также можете запустить контейнер, выбрав конфигурацию запуска или отладки. Задачи расширения Docker в tasks.json вызываются при запуске или отладке. Вызываемая задача зависит от выбранной конфигурации запуска. Для задачи "Docker: Python (local MongoDB)" укажите <YOUR-IP-ADDRESS>. Для задачи "Docker: Python (MongoDB Azure)" укажите <CONNECTION-STRING>.
# PORT=8000 for Django and 5000 for Flask
export PORT=<port-number>
export YOUR_IP_ADDRESS=<your-machine-ip-address>
docker run --rm -it \
--publish $PORT:$PORT --publish 27017:27017 \
--add-host mongoservice:$YOUR_IP_ADDRESS \
--env CONNECTION_STRING=mongodb://mongoservice:27017 --env DB_NAME=restaurants_reviews --env COLLECTION_NAME=restaurants_reviews \
msdocspythoncontainerwebapp:latest
Указанная выше команда отформатирована для оболочки Bash. Если вы используете PowerShell, командную строку или другую оболочку, вам может потребоваться соответствующим образом изменить формат продолжения строки и переменной среды.
# PORT=8000 for Django and 5000 for Flask
export PORT=<port-number>
export CONNECTION_STRING="<connection-string>"
docker run --rm -it \
--publish $PORT:$PORT/tcp \
--env CONNECTION_STRING=$CONNECTION_STRING --env DB_NAME=restaurants_reviews --env COLLECTION_NAME=restaurants_reviews \
msdocspythoncontainerwebapp:latest
Указанная выше команда отформатирована для оболочки Bash. Если вы используете PowerShell, командную строку или другую оболочку, вам может потребоваться соответствующим образом изменить формат продолжения строки и переменной среды.
Передача конфиденциальной информации, как показано здесь, предназначена для демонстрационных целей. Сведения строка подключения можно просмотреть, проверив контейнер с помощью проверки контейнера docker команды. Другим способом обработки секретов является использование функций BuildKit Docker.
В списке должен появиться контейнер msdocspythoncontainerwebapp:latest:latest. Обратите внимание на NAMES столбец выходных данных и PORTS столбец. Имя можно использовать для остановки контейнера.
Шаг 3. Тестирование веб-приложения.
Перейдите в раздел "http://127.0.0.1:8000" для Django и "http://127.0.0.1:5000/" для Flask при запуске с локальным MongoDB.