Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой части серии учебников вы узнаете, как создать и запустить контейнерное веб-приложение Django или веб-приложение Flask Python на локальном компьютере. Для хранения данных для этого приложения можно использовать локальный экземпляр MongoDB или Azure Cosmos DB для MongoDB. Эта статья является частью серии из 5 руководств, и это — часть 2. Перед началом работы с этой статьей необходимо выполнить часть 1 .
На следующей схеме служб выделены локальные компоненты, описанные в этой статье. В этой статье вы также узнаете, как использовать Azure Cosmos DB для MongoDB с локальным образом Docker, а не локальным экземпляром MongoDB.
Клонирование или скачивание примера приложения Python
В этом разделе описано, как клонировать или скачать пример приложения Python, используемого для создания образа Docker. Вы можете выбрать веб-приложение Django или Flask Python. Если у вас есть собственное веб-приложение Python, вы можете использовать это вместо этого. Если вы используете собственное веб-приложение Python, убедитесь, что приложение имеет Dockerfile в корневой папке и может подключиться к базе данных MongoDB.
Клонируйте либо репозиторий Django, либо репозиторий Flask в папку на вашем компьютере, используя одну из следующих команд:
Перейдите в корневую папку для клонированного репозитория.
Создание образа Docker
В этом разделе описано, как создать образ Docker для веб-приложения Python с помощью Visual Studio Code или Azure CLI. Образ Docker содержит веб-приложение Python, его зависимости и среду выполнения Python. Вы создаете образ Docker из Dockerfile , который определяет содержимое и поведение образа. Dockerfile находится в корневой папке примера приложения, клонированного или скачаного (или предоставленного самостоятельно).
Подсказка
Если вы не знакомы с Azure CLI, см. статью "Начало работы с Azure CLI ", чтобы узнать, как скачать и установить Azure CLI локально или как выполнять команды Azure CLI в Azure Cloud Shell.
Чтобы создать образ Docker с помощью интерфейса командной строки Docker, вам потребуется Docker. После установки Docker откройте окно терминала и перейдите в образец папки.
Примечание.
Действия, описанные в этом разделе, требуют запуска управляющей программы Docker. В некоторых установках, таких как Windows, необходимо открыть Docker Desktop, которая запускает управляющую программу, прежде чем продолжить.
Убедитесь, что Docker доступен, выполнив следующую команду в корневой папке примеров приложения.
dockerЕсли после выполнения этой команды вы увидите справку по интерфейсу командной строки Docker, значит Docker доступен. В противном случае убедитесь, что Docker установлен и у вашей оболочки есть доступ к Интерфейсу командной строки Docker.
Создайте образ Docker для веб-приложения Python с помощью команды docker build.
Общая форма команды
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>".Если вы находитесь в корневой папке проекта, используйте следующую команду, чтобы создать образ Docker. Точка (".") в конце команды ссылается на текущий каталог, в котором выполняется команда. Чтобы принудительно выполнить пересборку, добавьте
--no-cache.Примечание.
В примере репозитория используется Python 3.8. Если вы создаете собственный файл Dockerfile, используйте поддерживаемую версию Python, например 3.12 или 3.13. Сведения о поддерживаемых в настоящее время версиях см. в разделе Поддержка версий Python.
#!/bin/bash docker build --rm --pull \ --file "Dockerfile" \ --label "com.microsoft.created-by=docker-cli" \ --tag "msdocspythoncontainerwebapp:latest" \ .Убедитесь, что образ был успешно создан с помощью команды Docker images .
docker imagesКоманда возвращает список изображений по имени репозитория, ТЕГу и дате CREATED среди других характеристик изображения.
На этом этапе у вас есть локальный образ Docker с именем msdocspythoncontainerwebapp с тегом "latest". Теги помогают определить сведения о версии, предполагаемое использование, стабильность и другие важные сведения. Дополнительные сведения см. в статье Рекомендации по использованию тегов и управлению версиями образов контейнеров.
Примечание.
Вы также можете просматривать изображения, созданные из VS Code или с помощью интерфейса командной строки Docker непосредственно с помощью приложения Docker Desktop .
Настройка MongoDB
Для хранения данных в веб-приложении Python требуется база данных MongoDB и коллекция с именем restaurants_reviews. В этом руководстве вы используете как локальную установку MongoDB, так и экземпляр Azure Cosmos DB для MongoDB, чтобы создавать базу данных и коллекцию и получать к ним доступ.
Это важно
Не используйте базу данных MongoDB, используемую в рабочей среде. В этом руководстве сохраните в переменной среды строку подключения к одному из этих экземпляров MongoDB. Любой, кто может просмотреть содержимое вашего контейнера, например с помощью docker inspect, сможет увидеть эту строку подключения.
Локальный MongoDB
Создайте локальный экземпляр MongoDB с помощью Azure CLI.
Установите MongoDB , если он еще не установлен.
Чтобы проверить, установлен ли MongoDB, используйте оболочку MongoDB (mongosh). Если следующие команды не работают, может потребоваться явно установить mongosh или подключить mongosh к серверу MongoDB.
Используйте следующую команду, чтобы открыть оболочку MongoDB и получить версию оболочки MongoDB и сервера MongoDB:
mongoshПодсказка
Чтобы вернуть только версию сервера MongoDB, установленного в системе, закройте и снова откройте оболочку MongoDB и выполните следующую команду:
mongosh --quiet --exec 'db.version()'В некоторых настройках можно также напрямую вызвать демон Mongo в bash.
mongod --version
Измените файл mongod.cfg в папке
\MongoDB\Server\8.0\binи добавьте локальный IP-адрес компьютера вbindIPключ.Примечание.
Путь к файлу конфигурации зависит от операционной системы и версии MongoDB. В macOS найдите
/usr/local/etc/mongod.confили/opt/homebrew/etc/mongod.conf. В Linux проверьте/etc/mongod.conf.Ключ
bindipв файле конфигурации MongoD определяет имена узлов и IP-адреса, на которых MongoDB принимает клиентские подключения. Добавьте текущий IP-адрес локального компьютера разработки. Пример веб-приложения Python, работающего локально в контейнере Docker, взаимодействует с хост-компьютером с этим адресом.Например, часть файла конфигурации должна выглядеть следующим образом:
net: port: 27017 bindIp: 127.0.0.1,<local-ip-address>Сохраните изменения в этом файле конфигурации.
Это важно
Для сохранения изменений, внесенных в этот файл конфигурации, требуются права администратора.
Перезапустите MongoDB, чтобы получить изменения в файле конфигурации.
Откройте оболочку MongoDB и выполните следующую команду, чтобы задать для имени базы данных значение "restaurants_reviews", а имя коллекции — "restaurants_reviews". Вы также можете создать базу данных и коллекцию с помощью расширения MongoDB VS Code или любого другого средства с поддержкой 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 Cosmos DB для экземпляра MongoDB с помощью Azure CLI.
Примечание.
В части 4 этого руководства вы используете экземпляр Azure Cosmos DB для MongoDB для запуска веб-приложения в Службе приложений Azure.
Перед выполнением следующего скрипта замените расположение, группу ресурсов и имя учетной записи Azure Cosmos DB для MongoDB соответствующими значениями (необязательно). Используйте одну и ту же группу ресурсов для всех ресурсов Azure, создаваемых в этом руководстве, чтобы упростить их удаление после завершения работы.
Выполнение скрипта занимает несколько минут.
#!/bin/bash
# LOCATION: The Azure region. Use the "az account list-locations -o table" command to find a region near you.
LOCATION='westus'
# RESOURCE_GROUP_NAME: The resource group name, which can contain underscores, hyphens, periods, parenthesis, letters, and numbers.
RESOURCE_GROUP_NAME='msdocs-web-app-rg'
# ACCOUNT_NAME: The Azure Cosmos DB for MongDB account name, which can contain lowercase letters, hyphens, and numbers.
ACCOUNT_NAME='msdocs-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"
После завершения скрипта скопируйте Primary MongoDB Connection String из вывода последней команды в буфер обмена или в другое место.
{
"connectionStrings": [
{
"connectionString": ""mongodb://msdocs-cosmos-db:pnaMGVtGIRAZHUjsg4GJBCZMBJ0trV4eg2IcZf1TqV...5oONz0WX14Ph0Ha5IeYACDbuVrBPA==@msdocs-cosmos-db.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@msdocs-cosmos-db@"",
"description": "Primary MongoDB Connection String",
"keyKind": "Primary",
"type": "MongoDB"
},
...
]
}
После выполнения предыдущего шага у вас есть строка подключения Azure Cosmos DB для MongoDB формы mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>, база данных с именем restaurants_reviewsи коллекция с именем restaurants_reviews.
Дополнительные сведения об использовании Azure CLI для создания учетной записи Cosmos DB для MongoDB и создания баз данных и коллекций см. в статье "Создание базы данных и коллекции для MongoDB для Azure Cosmos DB с помощью Azure CLI". Вы также можете использовать PowerShell, расширение баз данных Azure VS Code и портал Azure.
Подсказка
В расширении Azure Databases в VS Code вы можете щелкнуть правой кнопкой мыши на сервере MongoDB, чтобы получить строку подключения.
Запустите образ локально в контейнере
Теперь вы готовы запустить контейнер Docker локально с помощью локального экземпляра MongoDB или экземпляра Cosmos DB для MongoDB. В этом разделе руководства вы узнаете, как использовать VS Code или Azure CLI для локального запуска образа. В примере приложения ожидается, что сведения о подключении MongoDB передаются с помощью переменных среды. Существует несколько методов для передачи переменных среды в контейнер локально. Каждый метод имеет преимущества и недостатки с точки зрения безопасности. Избегайте регистрации или выхода конфиденциальной информации в коде в контейнере.
Примечание.
При развертывании веб-приложения в Azure веб-приложение получает сведения о подключении из значений среды, заданных в качестве параметров конфигурации службы приложений. Ни одна из изменений для сценария локальной среды разработки не применяется.
MongoDB локально
Используйте следующие команды с локальным экземпляром MongoDB для локального запуска образа Docker.
Запустите последнюю версию образа.
#!/bin/bash # Define variables # Set the port number based on the framework being used: # 8000 for Django, 5000 for Flask export PORT=<port-number> # Replace with actual port (e.g., 8000 or 5000) # Set your computer''s IP address (replace with actual IP) export YOUR_IP_ADDRESS=<your-computer-ip-address> # Replace with actual IP address # Run the Docker container with the required environment variables docker run --rm -it \ --publish "$PORT:$PORT" \ --add-host "mongoservice:$YOUR_IP_ADDRESS" \ --env CONNECTION_STRING=mongodb://mongoservice:27017 \ --env DB_NAME=restaurants_reviews \ --env COLLECTION_NAME=restaurants_reviews \ --env SECRET_KEY="supersecretkeythatispassedtopythonapp" \ msdocspythoncontainerwebapp:latestУбедитесь, что контейнер запущен. В другом окне консоли выполните команду docker container ls.
docker container lsВы видите свой контейнер
msdocspythoncontainerwebapp:latestв списке. Обратите внимание на столбецNAMESвыходных данных и столбецPORTS. Используйте имя контейнера, чтобы остановить контейнер.Тестирование веб-приложения.
Перейдите к
http://127.0.0.1:8000для Django и кhttp://127.0.0.1:5000/для Flask.Выключите контейнер.
docker container stop <container-name>
Azure Cosmos DB для MongoDB
Используйте следующие команды с экземпляром Azure Cosmos DB для MongoDB, чтобы запустить образ Docker в Azure.
Запустите последнюю версию образа.
#!/bin/bash # 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 \ --env SECRET_KEY=supersecretkeythatyougenerate \ msdocspythoncontainerwebapp:latestВ этом примере показана передача конфиденциальной информации. Информацию о строке подключения можно просмотреть, выполнив проверку контейнера с помощью команды docker container inspect. Другим способом обработки секретов является использование функций BuildKit Docker.
Откройте новое окно консоли и выполните следующую команду docker container ls , чтобы убедиться, что контейнер запущен.
docker container lsВы видите свой контейнер
msdocspythoncontainerwebapp:latestв списке. Обратите внимание на столбецNAMESвыходных данных и столбецPORTS. Используйте имя контейнера, чтобы остановить контейнер.Тестирование веб-приложения.
Перейдите к
http://127.0.0.1:8000для Django и кhttp://127.0.0.1:5000/для Flask.Выключите контейнер.
docker container stop <container-name>
Вы также можете запустить контейнер из образа и остановить его с помощью приложения Docker Desktop.