Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit deel van de reeks zelfstudies leert u hoe u een in een container geplaatste Django of een Flask Python-web-app op uw lokale computer bouwt en uitvoert. Als u gegevens voor deze app wilt opslaan, kunt u een lokaal MongoDB-exemplaar of Azure Cosmos DB voor MongoDB gebruiken. Dit artikel is deel 2 van een 5-delige reeks zelfstudies. U wordt aangeraden deel 1 te voltooien voordat u aan dit artikel begint.
In het volgende servicediagram worden de lokale onderdelen beschreven die in dit artikel aan bod komen. In dit artikel leert u ook hoe u Azure Cosmos DB voor MongoDB gebruikt met een lokale Docker-image in plaats van een lokale instantie van MongoDB.
De Python-voorbeeld-app klonen of downloaden
In deze sectie kloont of downloadt u de voorbeeld Python-app die u gebruikt om een Docker-image te bouwen. U kunt kiezen tussen een Django- of Flask Python-web-app. Als u uw eigen Python-web-app hebt, kunt u dat gebruiken. Als u uw eigen Python-web-app gebruikt, moet u ervoor zorgen dat uw app een Dockerfile in de hoofdmap heeft en verbinding kan maken met een MongoDB-database.
Kloon de Django- of Flask-opslagplaats in een lokale map met behulp van een van de volgende opdrachten:
Navigeer naar de hoofdmap voor de gekloonde opslagplaats.
Een Docker-image bouwen
In deze sectie bouwt u een Docker-image voor de Python-web-app met Visual Studio Code of de Azure CLI. De Docker-installatiekopieën bevatten de Python-web-app, de bijbehorende afhankelijkheden en de Python-runtime. De Docker-installatiekopie is gebouwd op basis van een Dockerfile waarmee de inhoud en het gedrag van de installatiekopie worden gedefinieerd. Het Dockerfile bevindt zich in de hoofdmap van de voorbeeld-app die u hebt gekloond of gedownload (of uzelf hebt opgegeven).
Hint
Als u nieuw bent bij de Azure CLI, raadpleeg dan Aan de slag met Azure CLI voor meer informatie over hoe u de Azure CLI lokaal kunt downloaden en installeren of hoe u Azure CLI-opdrachten kunt uitvoeren in Azure Cloud Shell.
Docker is vereist om de Docker-installatiekopieën te bouwen met behulp van de Docker CLI. Zodra Docker is geïnstalleerd, opent u een terminalvenster en navigeert u naar de voorbeeldmap.
Notitie
Voor de stappen in deze sectie moet de Docker-daemon worden uitgevoerd. In sommige installaties, bijvoorbeeld in Windows, moet u Docker Desktop openen, waarmee de daemon wordt gestart voordat u doorgaat.
Controleer of Docker toegankelijk is door de volgende opdracht uit te voeren in de hoofdmap van de voorbeeld-app.
dockerAls u na het uitvoeren van deze opdracht help voor de Docker CLI ziet, is Docker toegankelijk. Zorg er anders voor dat Docker is geïnstalleerd en dat uw shell toegang heeft tot de Docker CLI.
Bouw de Docker-image voor de Python-web-app door de Docker build opdracht te gebruiken.
De algemene vorm van de opdracht is
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>".Als u zich in de hoofdmap van het project bevindt, gebruik de volgende opdracht om de Docker-image te bouwen. De punt (".") aan het einde van de opdracht verwijst naar de huidige map waarin de opdracht wordt uitgevoerd. Als u een herbouw wilt afdwingen, voegt u het toe
--no-cache.#!/bin/bash docker build --rm --pull \ --file "Dockerfile" \ --label "com.microsoft.create-by=docker-cli" \ --tag "msdocspythoncontainerwebapp:latest" \ .Controleer of het image succesvol is gebouwd met behulp van de opdracht Docker images.
docker imagesMet de opdracht wordt een lijst met afbeeldingen geretourneerd op naam van de opslagplaats, tag, aanmaakdatum en andere eigenschappen van de afbeelding.
Op dit moment hebt u een lokale Docker-installatiekopie met de naam 'msdocspythoncontainerwebapp' met de tag 'latest'. Tags helpen bij het definiëren van versiedetails, het beoogde gebruik, de stabiliteit en andere relevante informatie. Zie Aanbevelingen voor het taggen en versiebeheer van containerinstallatiekopieën voor meer informatie.
Notitie
Afbeeldingen die zijn gebouwd vanuit VS Code of door de Docker CLI rechtstreeks te gebruiken, kunnen ook worden bekeken met de Docker Desktop-toepassing.
MongoDB instellen
Uw Python-web-app vereist een MongoDB-database met de naam restaurants_reviews en een verzameling met de naam restaurants_reviews zijn vereist voor het opslaan van gegevens. In deze zelfstudie gebruikt u zowel een lokale installatie van MongoDB als een Azure Cosmos DB voor MongoDB-exemplaar om de database en verzameling te maken en te openen.
Belangrijk
Gebruik geen MongoDB-database die u in productie gebruikt. In deze zelfstudie slaat u de MongoDB-verbindingsreeks op naar een van deze MongoDB-exemplaren in een omgevingsvariabele (die kan worden waargenomen door iedereen die uw container kan inspecteren, zoals met behulp van docker inspect).
Lokale MongoDB
Laten we beginnen met het maken van een lokaal exemplaar van MongoDB met behulp van de Azure CLI.
Installeer MongoDB (als deze nog niet is geïnstalleerd).
U kunt controleren op de installatie van MongoDB met behulp van de
MongoDB-shell (mongosh).> Als de volgende opdrachten niet werken, moet u mogelijk mongosh expliciet installeren of mongosh verbinden met uw MongoDB-server. Gebruik de volgende opdracht om de MongoDB-shell te openen en de versie van zowel de MongoDB-shell als de MongoDB-server op te halen:
mongoshHint
Als u alleen de versie van de MongoDB-server wilt retourneren die op uw systeem is geïnstalleerd, sluit u de MongoDB-shell en opent u deze opnieuw en gebruikt u de volgende opdracht:
mongosh --quiet --exec 'db.version()'In sommige setups kunt u de Mongo-daemon ook rechtstreeks aanroepen in uw bash-shell.
mongod --version
Bewerk het bestand mongod.cfg in de
\MongoDB\Server\8.0\binmap en voeg het lokale IP-adres van uw computer toe aan debindIPsleutel.De
bindipsleutel in het MongoD-configuratiebestand definieert de hostnamen en IP-adressen die MongoDB luistert naar clientverbindingen. Voeg het huidige IP-adres van uw lokale ontwikkelcomputer toe. De Python-voorbeeldweb-app die lokaal in een Docker-container wordt uitgevoerd, communiceert met dit adres naar de hostcomputer.Een deel van het configuratiebestand moet er bijvoorbeeld als volgt uitzien:
net: port: 27017 bindIp: 127.0.0.1,<local-ip-address>Sla uw wijzigingen op in dit configuratiebestand.
Belangrijk
U hebt beheerdersbevoegdheden nodig om de wijzigingen die u aanbrengt in dit configuratiebestand op te slaan.
Start MongoDB opnieuw om wijzigingen in het configuratiebestand op te halen.
Open een MongoDB-shell en voer de volgende opdracht uit om de databasenaam in te stellen op 'restaurants_reviews' en de naam van de verzameling op 'restaurants_reviews'. U kunt ook een database en verzameling maken met de VS Code MongoDB-extensie of een ander mongoDB-hulpprogramma.
> help > use restaurants_reviews > db.restaurants_reviews.insertOne({}) > show dbs > exit
Nadat u de vorige stap hebt voltooid, is de lokale MongoDB-verbindingsreeks 'mongodb://127.0.0.1:27017/', de databasenaam 'restaurants_reviews' en is de verzamelingsnaam 'restaurants_reviews'.
Azure Cosmos DB voor MongoDB
Nu gaan we ook een Azure Cosmos DB voor MongoDB-exemplaar maken met behulp van de Azure CLI.
Notitie
In deel 4 van deze reeks zelfstudies gebruikt u het Azure Cosmos DB voor MongoDB-exemplaar om de web-app uit te voeren in Azure App Service.
Voordat u het volgende script uitvoert, vervangt u de locatie, de resourcegroep en de naam van het Azure Cosmos DB voor MongoDB-account door de juiste waarden (optioneel). We raden u aan dezelfde resourcegroep te gebruiken voor alle Azure-resources die in deze zelfstudie zijn gemaakt, zodat ze gemakkelijker kunnen worden verwijderd wanneer u klaar bent.
Het uitvoeren van het script duurt enkele minuten.
#!/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"
Wanneer het script is voltooid, kopieert u de primaire MongoDB-verbindingsreeks uit de uitvoer van de laatste opdracht naar het klembord of een andere locatie.
{
"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"
},
...
]
}
Nadat u de vorige stap hebt voltooid, hebt u een Azure Cosmos DB voor MongoDB-verbindingsreeks van het formulier mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>, een database met de naam restaurants_reviewsen een verzameling met de naam restaurants_reviews.
Zie Een database en verzameling maken voor MongoDB voor Azure Cosmos DB met behulp van Azure CLI voor meer informatie over het gebruik van de Azure CLI om een account voor Cosmos DB voor MongoDB te maken en databases en verzamelingen te maken. U kunt ook PowerShell, de VS Code Azure Databases-extensie en Azure Portal gebruiken.
Hint
In de VS Code Azure Databases-extensie kunt u met de rechtermuisknop op de MongoDB-server klikken en de verbindingsreeks ophalen.
De image lokaal uitvoeren in een container
U bent nu klaar om de Docker-container lokaal uit te voeren met behulp van uw lokale MongoDB-exemplaar of uw Cosmos DB voor MongoDB-exemplaar. In deze sectie van de zelfstudie leert u om VS Code of de Azure CLI te gebruiken om het image lokaal te draaien. In de voorbeeld-app is het de bedoeling dat de MongoDB-verbindingsgegevens worden overgedragen met omgevingsvariabelen. Er zijn verschillende manieren om omgevingsvariabelen lokaal door te geven aan de container. Elk heeft voor- en nadelen in termen van beveiliging. Vermijd het inchecken van gevoelige informatie of het achterlaten van gevoelige informatie in code in de container.
Notitie
Wanneer de web-app wordt geïmplementeerd in Azure, haalt de web-app verbindingsgegevens op van omgevingswaarden die zijn ingesteld als App Service-configuratie-instellingen en zijn geen van de wijzigingen voor het scenario van de lokale ontwikkelomgeving van toepassing.
MongoDB lokaal
Gebruik de volgende opdrachten met uw lokale exemplaar van MongoDB om de Docker-installatiekopieën lokaal uit te voeren.
Voer de nieuwste versie van de image uit.
#!/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" \ --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 \ --env SECRET_KEY="supersecretkeythatispassedtopythonapp" \ msdocspythoncontainerwebapp:latestControleer of de container draait. Voer in een ander consolevenster de opdracht docker-container ls uit.
docker container lsBekijk de container "msdocspythoncontainerwebapp:latest:latest" in de lijst. Let op de
NAMESkolom van de uitvoer en dePORTSkolom. Gebruik de containernaam om de container te stoppen.Test de webapplicatie.
Ga naar "http://127.0.0.1:8000" voor Django en "http://127.0.0.1:5000/" voor Flask.
Sluit de container af.
docker container stop <container-name>
Azure Cosmos DB voor MongoDB
Gebruik de volgende opdrachten met uw Azure Cosmos DB voor MongoDB-instantie om de Docker-image in Azure uit te voeren.
Voer de nieuwste versie van de image uit.
#!/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:latestHet doorgeven van gevoelige informatie wordt alleen weergegeven voor demonstratiedoeleinden. De verbindingstekenreeksgegevens kunnen worden weergegeven door de container te inspecteren met de opdracht docker-container inspect. Een andere manier om geheimen te verwerken, is door de BuildKit-functionaliteit van Docker te gebruiken.
Open een nieuw consolevenster en voer de volgende docker-container ls-opdracht uit om te bevestigen dat de container wordt uitgevoerd.
docker container lsBekijk de container "msdocspythoncontainerwebapp:latest:latest" in de lijst. Let op de
NAMESkolom van de uitvoer en dePORTSkolom. Gebruik de containernaam om de container te stoppen.Test de webapplicatie.
Ga naar "http://127.0.0.1:8000" voor Django en "http://127.0.0.1:5000/" voor Flask.
Sluit de container af.
docker container stop <container-name>
U kunt ook een container starten vanuit een image en stoppen met Docker Desktop-toepassing.