Een in een container geplaatste Python-web-app lokaal bouwen en uitvoeren met MongoDB
Artikel
Dit artikel maakt deel uit van een zelfstudie over het in een container zetten en implementeren van een in een container geplaatste Python-web-app in Azure-app Service. Met App Service kunt u in containers geplaatste web-apps uitvoeren en implementeren via mogelijkheden voor continue integratie/continue implementatie (CI/CD) met Docker Hub, Azure Container Registry en Visual Studio Team Services. In dit deel van de zelfstudie leert u hoe u de in een container geplaatste Python-web-app lokaal bouwt en uitvoert. Deze stap is optioneel en is niet vereist voor het implementeren van de voorbeeld-app in Azure.
Voor het lokaal uitvoeren van een Docker-installatiekopieën in uw ontwikkelomgeving is de installatie buiten de implementatie naar Azure vereist. U kunt het beschouwen als een investering die toekomstige ontwikkelingscycli gemakkelijker kan maken, met name wanneer u verdergaat dan voorbeeld-apps en u begint met het maken van uw eigen web-apps. Als u de voorbeeld-apps voor Django en Flask wilt implementeren, kunt u deze stap overslaan en naar de volgende stap in deze zelfstudie gaan. U kunt altijd terugkeren na de implementatie in Azure en deze stappen uitvoeren.
In het volgende servicediagram ziet u de onderdelen die in dit artikel worden behandeld.
Selecteer Code en selecteer Vervolgens ZIP downloaden.
Pak het ZIP-bestand uit in een map en open vervolgens een terminalvenster in die map.
2. Een Docker-installatiekopieën bouwen
Als u een van de frameworkvoorbeeld-apps gebruikt die beschikbaar zijn voor Django en Flask, gaat u naartoe. Als u met uw eigen voorbeeld-app werkt, bekijkt u hoe de voorbeeld-apps zijn ingesteld, met name het Dockerfile in de hoofdmap.
Voor deze instructies zijn Visual Studio Code en de Docker-extensie vereist. Ga naar de voorbeeldmap die u hebt gekloond of gedownload en open VS Code met de opdracht code ..
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.
Instructies
Schermafbeelding
Open de Docker-extensie.
Als de Docker-extensie een fout 'Kan geen verbinding maken' rapporteert, controleert u of Docker is geïnstalleerd en wordt uitgevoerd. Als dit de eerste keer is dat u met Docker werkt, hebt u waarschijnlijk geen containers, installatiekopieën of verbonden registers.
Bouw de installatiekopieën.
Klik in projectverkenner met de projectbestanden met de rechtermuisknop op de Dockerfile en selecteer Build Image....
U kunt ook het opdrachtenpalet (F1 of Ctrl+Shift+P) gebruiken en 'Docker Images: Build Images' typen om de opdracht aan te roepen.
Zoek naar onlangs gebouwde installatiekopie. De naam van de containerinstallatiekopie is 'msdocspythoncontainerwebapp', die is ingesteld in het bestand .vscode/tasks.json .
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.
Begin in de hoofdmap van de voorbeeld-app die u hebt gekloond of gedownload.
Stap 1. Controleer bij een shellprompt of Docker toegankelijk is.
docker
Als u na het uitvoeren van deze opdracht help voor de Docker CLI ziet, gaat u verder. Zorg er anders voor dat Docker is geïnstalleerd of dat uw shell toegang heeft tot de Docker CLI.
Stap 2. Bouw de installatiekopieën.
De algemene vorm van de docker-buildopdracht 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 bijvoorbeeld in de hoofdmap van de projectmap bevindt, kunt u de opdracht als volgt gebruiken om een installatiekopieën te maken:
Noteer de punt (".") aan het einde van de opdracht die verwijst naar de huidige rechtstreeks waarin de opdracht wordt uitgevoerd. U kunt toevoegen --no-cache om een herbouw af te dwingen.
Stap 3. Controleer of de installatiekopie is gemaakt.
Als het goed is, ziet u afbeeldingen die worden vermeld op de naam van de OPSLAGPLAATS, TAG en DE DATUM GEMAAKT onder andere afbeeldingskenmerken.
Op dit moment hebt u een installatiekopie lokaal gemaakt. De installatiekopie die u hebt gemaakt, heeft de naam msdocspythoncontainerwebapp en tag "latest". Tags zijn een manier om versie-informatie, bedoeld gebruik, stabiliteit of andere informatie te definiëren. Zie Aanbevelingen voor het taggen en versiebeheer van containerinstallatiekopieën voor meer informatie.
Installatiekopieën die zijn gebouwd vanuit VS Code of vanuit de Docker CLI, kunnen ook rechtstreeks worden weergegeven met de Docker Desktop-toepassing .
3. MongoDB instellen
Voor deze zelfstudie hebt u een MongoDB-database met de naam restaurants_reviews en een verzameling met de naam restaurants_reviews nodig. In de stappen in deze sectie ziet u hoe u een lokale installatie van MongoDB of Azure Cosmos DB voor MongoDB gebruikt om de database en verzameling te maken en te openen.
Belangrijk
Gebruik geen MongoDB-database die u in productie gaat gebruiken. In deze zelfstudie slaat u de MongoDB-verbindingsreeks op in een omgevingsvariabele. Dit maakt het waarneembaar door iedereen die uw container kan inspecteren (bijvoorbeeld met behulp van docker inspect).
Een alternatief in sommige installaties is het rechtstreeks aanroepen van de Mongo-daemon.
mongod --version
Stap 2: bewerk het mongod.cfg-bestand om het IP-adres van uw computer toe te voegen.
Het mongod-configuratiebestand heeft een bindIp sleutel waarmee hostnamen en IP-adressen worden gedefinieerd die MongoDB luistert naar clientverbindingen. Voeg het huidige IP-adres van uw lokale ontwikkelcomputer toe. De voorbeeld-app die lokaal wordt uitgevoerd in een Docker-container, communiceert met dit adres naar de hostcomputer.
Een deel van het configuratiebestand moet er bijvoorbeeld als volgt uitzien:
Start MongoDB opnieuw om wijzigingen in het configuratiebestand op te halen.
Stap 3: Maak een database en verzameling in de lokale MongoDB-database.
Stel de databasenaam in op 'restaurants_reviews' en de naam van de verzameling op 'restaurants_reviews'. U kunt een database en verzameling maken met de VS Code MongoDB-extensie, de MongoDB-shell (mongosh) of een ander mondoDB-hulpprogramma.
Voor de MongoDB-shell zijn hier voorbeelden van opdrachten voor het maken van de database en verzameling:
> help
> use restaurants_reviews
> db.restaurants_reviews.insertOne({})
> show dbs
> exit
Op dit moment is uw lokale MongoDB-verbindingsreeks 'mongodb://127.0.0.1:27017/', de databasenaam 'restaurants_reviews' en de naam van de verzameling 'restaurants_reviews'.
U kunt Azure CLI-opdrachten gebruiken om een Azure Cosmos DB voor MongoDB-account te maken en vervolgens de vereiste database en verzameling voor deze zelfstudie te maken. Als u de Azure CLI nog niet eerder hebt gebruikt, raadpleegt u Aan de slag met Azure CLI voor informatie over het lokaal downloaden en installeren van de Azure CLI of het uitvoeren van Azure CLI-opdrachten in Azure Cloud Shell.
Voordat u het volgende script uitvoert, vervangt u de locatie en azure Cosmos DB voor de naam van het MongoDB-account door de juiste waarden. U kunt de naam van de resourcegroep gebruiken die is opgegeven in het script of wijzigen. In beide gevallen wordt u aangeraden dezelfde resourcegroep te gebruiken voor alle Azure-resources die zijn gemaakt in de verschillende artikelen van deze zelfstudie. Hiermee kunt u ze gemakkelijker verwijderen wanneer u klaar bent met de zelfstudie. Als je hier bent aangekomen vanaf deel 4. Implementeer container App Service, gebruik de naam en locatie van de resourcegroep die u al voor uw resources hebt gebruikt.
In het script wordt ervan uitgegaan dat u een Bash-shell gebruikt. Als u een andere shell wilt gebruiken, moet u de variabeledeclaratie en vervangingssyntaxis wijzigen. Het uitvoeren van het script kan enkele minuten duren.
#!/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 restaraunts_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-Verbinding maken iontekenreeks uit de uitvoer van de laatste opdracht.
Op dit moment hebt u een Azure Cosmos DB voor MongoDB-verbindingsreeks van het formuliermongodb://<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 naamrestaurants_reviews.
In de VS Code Azure Databases-extensie kunt u met de rechtermuisknop op de MongoDB-server klikken en de verbindingsreeks ophalen.
4. Voer de installatiekopieën lokaal uit in een container
Met informatie over het maken van verbinding met een MongoDB kunt u de container lokaal uitvoeren. In de voorbeeld-app wordt verwacht dat MongoDB-verbindingsgegevens worden doorgegeven in 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, krijgt de web-app verbindingsgegevens 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.
In de map .vscode van de voorbeeld-app definieert het bestand settings.json wat er gebeurt wanneer u de Docker-extensie gebruikt en Selecteer Uitvoeren of Interactief uitvoeren in het contextmenu van een tag. Het bestand settings.json bevat twee sjablonen voor de (MongoDB local) en (MongoDB Azure) scenario's.
Als u een lokale MongoDB-database gebruikt:
Vervang beide exemplaren door <YOUR_IP_ADDRESS> uw IP-adres.
Vervang beide exemplaren door <CONNECTION_STRING> de verbindingsreeks voor uw MongoDB-database.
Als u een Azure Cosmos DB voor MongoDB-database gebruikt:
Vervang beide exemplaren door <CONNECTION_STRING> de Azure Cosmos DB voor MongoDB-verbindingsreeks.
Stel de docker.dockerPath configuratie-instelling in die door de sjablonen wordt gebruikt. Als u dit wilt instellendocker.dockerPath, opent u het opdrachtenpalet van VS Code (Ctrl+Shift+P), voert u 'Voorkeuren: Werkruimte openen Instellingen' in en voert u 'docker.dockerPath' in het vak Zoekinstellingen in. Voer docker (zonder aanhalingstekens) in voor de waarde van de instelling.
Notitie
Zowel de naam van de database als de naam van de verzameling wordt restaurants_reviewservan uitgegaan.
Voer de installatiekopieën uit.
Zoek in de sectie IMAGES van de Docker-extensie de ingebouwde installatiekopie.
Vouw de afbeelding uit om de meest recente tag te vinden, klik met de rechtermuisknop en selecteer Interactief uitvoeren.
U wordt gevraagd om de taak te selecteren die geschikt is voor uw scenario, ofwel 'Interactive run configuration (MongoDB local)' of 'Interactive run configuration (MongoDB Azure)'.
Met interactieve uitvoering ziet u alle afdrukinstructies in de code, wat handig kan zijn voor foutopsporing. U kunt ook Uitvoeren selecteren. Dit is niet-interactief en houdt standaardinvoer niet open.
Belangrijk
Deze stap mislukt als het standaardterminalprofiel is ingesteld op de opdrachtprompt (Windows). Als u het standaardprofiel wilt wijzigen, opent u het OPDRACHTENpalet van VS Code (Ctrl+Shift+P), voert u 'Terminal: Standaardprofiel selecteren' in en selecteert u vervolgens een ander profiel in de vervolgkeuzelijst, bijvoorbeeld Git Bash of PowerShell.
Controleer of de container wordt uitgevoerd.
Zoek de container in de sectie CONTAINERS van de Docker-extensie.
Vouw het knooppunt Afzonderlijke containers uit en controleer of msdocspythoncontainerwebapp wordt uitgevoerd. Als deze wordt uitgevoerd, ziet u een groen driehoeksymbool naast de containernaam.
Test de web-app door met de rechtermuisknop op de containernaam te klikken en Openen in browser te selecteren.
De browser wordt in uw standaardbrowser geopend als "http://127.0.0.1:8000" voor Django of "http://127.0.0.1:5000/" voor Flask.
Stop de container.
Zoek in de sectie CONTAINERS van de Docker-extensie de actieve container.
Klik met de rechtermuisknop op de container en selecteer Stoppen.
Tip
U kunt ook de container uitvoeren die een uitvoerings- of foutopsporingsconfiguratie selecteert. De Docker-extensietaken in tasks.json worden aangeroepen wanneer u fouten uitvoert of foutopsporing uitvoert. De aangeroepen taak is afhankelijk van de startconfiguratie die u selecteert. Geef <voor de taak Docker: Python (MongoDB local)' UW-IP-ADRES> op. Geef <voor de taak Docker: Python (MongoDB Azure)' CONNECTION-STRING> op.
Stap 1. Voer de nieuwste versie van de installatiekopieën uit.
# 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
De bovenstaande opdracht is opgemaakt voor Bash-shell. Als u PowerShell, opdrachtprompt of een andere shell gebruikt, moet u mogelijk de indeling voor regelvervolging en omgevingsvariabele dienovereenkomstig aanpassen.
# 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
De bovenstaande opdracht is opgemaakt voor Bash-shell. Als u PowerShell, opdrachtprompt of een andere shell gebruikt, moet u mogelijk de indeling voor regelvervolging en omgevingsvariabele dienovereenkomstig aanpassen.
Het doorgeven van gevoelige informatie, zoals hier wordt weergegeven, is voor demonstratiedoeleinden. De verbindingsreeks informatie kan worden bekeken door de container te inspecteren met de opdracht docker-container inspecteren. Een andere manier om geheimen te verwerken, is door de BuildKit-functionaliteit van Docker te gebruiken.
Stap 2. Controleer of de container wordt uitgevoerd.
U ziet uw container 'msdocspythoncontainerwebapp:latest:latest' in de lijst. Noteer de NAMES kolom van de uitvoer en de PORTS kolom. U kunt de naam gebruiken om de container te stoppen.
Stap 3. Test de web-app.
Ga naar "http://127.0.0.1:8000" voor Django en "http://127.0.0.1:5000/" voor Flask bij uitvoering met lokale MongoDB.
Stap 4. De container afsluiten
docker container stop <container-name>
U kunt ook een container starten vanuit een installatiekopieën en stoppen met de Docker Desktop-toepassing .