Skapa och köra en containerbaserad Python-webbapp lokalt med MongoDB

Den här artikeln är en del av en självstudie om hur du containeriserar och distribuerar en containerbaserad Python-webbapp till Azure App Service. Med App Service kan du köra containerbaserade webbappar och distribuera dem via CI/CD-funktioner (kontinuerlig integrering/kontinuerlig distribution) med Docker Hub, Azure Container Registry och Visual Studio Team Services. I den här delen av självstudien får du lära dig hur du skapar och kör den containerbaserade Python-webbappen lokalt. Det här steget är valfritt och krävs inte för att distribuera exempelappen till Azure.

Om du kör en Docker-avbildning lokalt i utvecklingsmiljön krävs installation utöver distribution till Azure. Tänk på det som en investering som kan göra framtida utvecklingscykler enklare, särskilt när du går bortom exempelappar och du börjar skapa egna webbappar. Om du vill distribuera exempelapparna för Django och Flask kan du hoppa över det här steget och gå till nästa steg i den här självstudien. Du kan alltid återvända när du har distribuerat till Azure och gå igenom de här stegen.

Följande tjänstdiagram visar de komponenter som beskrivs i den här artikeln.

A screenshot of the Tutorial - Containerized Python App on Azure with local part highlighted.

1. Klona eller ladda ned exempelappen

Klona lagringsplatsen:

# Django
git clone https://github.com/Azure-Samples/msdocs-python-django-container-web-app.git

# Flask
git clone https://github.com/Azure-Samples/msdocs-python-flask-container-web-app.git

Navigera sedan till mappen:

# Django
cd msdocs-python-django-container-web-app

# Flask
cd msdocs-python-flask-container-web-app

2. Skapa en Docker-avbildning

Om du använder en av de ramverksexempelappar som är tillgängliga för Django och Flask är du inställd på att gå. Om du arbetar med din egen exempelapp tar du en titt för att se hur exempelapparna har konfigurerats, särskilt Dockerfile i rotkatalogen.

Dessa instruktioner kräver Visual Studio Code och Docker-tillägget. Gå till exempelmappen som du klonade eller laddade ned och öppna VS Code med kommandot code ..

Kommentar

Stegen i det här avsnittet kräver att Docker-daemon körs. I vissa installationer, till exempel i Windows, måste du öppna Docker Desktop, som startar daemonen, innan du fortsätter.

Instruktioner Skärmbild
Öppna Docker-tillägget.

Om Docker-tillägget rapporterar felet "Det gick inte att ansluta" kontrollerar du att Docker är installerat och körs. Om det här är första gången du arbetar med Docker har du förmodligen inga containrar, avbildningar eller anslutna register.
A screenshot showing how to open the Docker extension in Visual Studio Code.
Skapa avbildningen.
  • I projektutforskaren som visar projektfilerna högerklickar du på Dockerfile och väljer Skapa avbildning....

  • Alternativt kan du använda kommandopaletten (F1 eller Ctrl+Skift+P) och skriva "Docker Images: Build Images" för att anropa kommandot.

Mer information om Dockerfile-syntax finns i Dockerfile-referensen.
A screenshot showing how to build the Docker image in Visual Studio Code.
Bekräfta att avbildningen har skapats.
  • Gå till avsnittet BILDER i Docker-tillägget.

  • Leta efter nyskapade avbildningar. Namnet på containeravbildningen är "msdocspythoncontainerwebapp", som anges i filen .vscode/tasks.json .

A screenshot showing how to confirm the built image in Visual Studio Code.

Nu har du skapat en avbildning lokalt. Avbildningen som du skapade har namnet "msdocspythoncontainerwebapp" och taggen "latest". Taggar är ett sätt att definiera versionsinformation, avsedd användning, stabilitet eller annan information. Mer information finns i Rekommendationer för taggning och versionshantering av containeravbildningar.

Avbildningar som har skapats från VS Code eller från att använda Docker CLI direkt kan också visas med Docker Desktop-programmet .

3. Konfigurera MongoDB

I den här självstudien behöver du en MongoDB-databas med namnet restaurants_reviews och en samling med namnet restaurants_reviews. Stegen i det här avsnittet visar hur du använder en lokal installation av MongoDB eller Azure Cosmos DB för MongoDB för att skapa och komma åt databasen och samlingen.

Viktigt!

Använd inte en MongoDB-databas som du ska använda i produktion. I den här självstudien ska du lagra MongoDB-anslutningssträng i en miljövariabel. Detta gör att den kan observeras av alla som kan inspektera din container (till exempel med ).docker inspect

Steg 1: Installera MongoDB om det inte redan är det.

Du kan söka efter installationen av MongoDB med hjälp av MongoDB Shell (mongosh).

  • Följande kommando anger gränssnittet och ger dig den version av både mongosh- och mongoDB-servern som är installerad på systemet:

    mongosh
    
  • Med följande kommando får du bara den version av MongoDB-servern som är installerad i systemet:

    mongosh --quiet --exec 'db.version()'
    

Om dessa kommandon inte fungerar kan du behöva installera mongosh eller ansluta mongosh till MongoDB-servern.

Ett alternativ i vissa installationer är att direkt anropa Mongo-daemonen.

mongod --version

Steg 2: Redigera filen mongod.cfg för att lägga till datorns IP-adress.

Mongod-konfigurationsfilen har en bindIp nyckel som definierar värdnamn och IP-adresser som MongoDB lyssnar efter klientanslutningar. Lägg till den aktuella IP-adressen för din lokala utvecklingsdator. Exempelappen som körs lokalt i en Docker-container kommunicerar med värddatorn med den här adressen.

En del av konfigurationsfilen bör till exempel se ut så här:

net:
  port: 27017
  bindIp: 127.0.0.1,<local-ip-address>

Starta om MongoDB för att hämta ändringar i konfigurationsfilen.

Steg 3: Skapa en databas och samling i den lokala MongoDB-databasen.

Ange databasnamnet till "restaurants_reviews" och samlingsnamnet till "restaurants_reviews". Du kan skapa en databas och samling med VS Code MongoDB-tillägget, MongoDB Shell (mongosh) eller något annat MondoDB-medvetet verktyg.

För MongoDB-gränssnittet finns här exempelkommandon för att skapa databasen och samlingen:

> help
> use restaurants_reviews
> db.restaurants_reviews.insertOne({})
> show dbs
> exit

Nu är din lokala MongoDB-anslutningssträng "mongodb://127.0.0.1:27017/", databasnamnet är "restaurants_reviews" och samlingsnamnet är "restaurants_reviews".

4. Kör avbildningen lokalt i en container

Med information om hur du ansluter till en MongoDB är du redo att köra containern lokalt. Exempelappen förväntar sig att MongoDB-anslutningsinformation skickas i miljövariabler. Det finns flera sätt att hämta miljövariabler som skickas till containern lokalt. Var och en har fördelar och nackdelar när det gäller säkerhet. Du bör undvika att checka in känslig information eller lämna känslig information i koden i containern.

Kommentar

När den distribueras till Azure får webbappen anslutningsinformation från miljövärden som angetts som App Service-konfigurationsinställningar och ingen av ändringarna för scenariot för den lokala utvecklingsmiljön gäller.

Instruktioner Skärmbild
I mappen .vscode i exempelappen definierar filen settings.json vad som händer när du använder Docker-tillägget och väljer Kör eller Kör interaktivt på snabbmenyn för en tagg. Filen settings.json innehåller två mallar vardera för scenarierna (MongoDB local) och (MongoDB Azure) .

Om du använder en lokal MongoDB-databas:
  • Ersätt båda instanserna av <YOUR_IP_ADDRESS> med din IP-adress.

  • Ersätt båda instanserna av <CONNECTION_STRING> med anslutningssträng för din MongoDB-databas.

Om du använder en Azure Cosmos DB för MongoDB-databas:
  • Ersätt båda instanserna av <CONNECTION_STRING> med Azure Cosmos DB för MongoDB anslutningssträng.
Ange konfigurationsinställningen docker.dockerPath som används av mallarna. Om du vill ange docker.dockerPathöppnar du kommandopaletten för VS Code (Ctrl+Skift+P), anger "Inställningar: Öppna arbetsyta Inställningar" och anger sedan "docker.dockerPath" i rutan Sökinställningar. Ange "docker" (utan citattecken) som värde för inställningen.

Kommentar

Både databasnamnet och samlingsnamnet antas vara restaurants_reviews.

A screenshot showing the settings.json file Visual Studio Code.
Kör avbildningen.
  • I avsnittet BILDER i Docker-tillägget hittar du den skapade avbildningen.

  • Expandera bilden för att hitta den senaste taggen, högerklicka och välj Kör interaktiv.

  • Du uppmanas att välja den uppgift som är lämplig för ditt scenario, antingen "Interaktiv körningskonfiguration (Lokal MongoDB)" eller "Konfiguration av interaktiv körning (MongoDB Azure)".

Med interaktiv körning ser du eventuella utskriftsuttryck i koden, vilket kan vara användbart för felsökning. Du kan också välja Kör som inte är interaktiv och inte håller standardindata öppna.

Viktigt!

Det här steget misslyckas om standardterminalprofilen är inställd på (Windows) kommandotolk. Om du vill ändra standardprofilen öppnar du kommandopaletten för VS Code (Ctrl+Skift+P), anger "Terminal: Välj standardprofil" och väljer sedan en annan profil från listrutan, till exempel Git Bash eller PowerShell.

A screenshot showing how to run a Docker container in Visual Studio Code.
Bekräfta att containern körs.
  • I avsnittet CONTAINRAR i Docker-tillägget letar du reda på containern.

  • Expandera noden Enskilda containrar och bekräfta att "msdocspythoncontainerwebapp" körs. Du bör se en grön triangelsymbol bredvid containernamnet om den körs.

A screenshot showing how to confirm a Docker container is running in Visual Studio Code.
Testa webbappen genom att högerklicka på containernamnet och välja Öppna i webbläsare.

Webbläsaren öppnas i standardwebbläsaren som "http://127.0.0.1:8000" för Django eller "http://127.0.0.1:5000/" för Flask.
A screenshot showing how to browse the endpoint of a Docker container in Visual Studio Code.
Stoppa containern.
  • I avsnittet CONTAINRAR i Docker-tillägget letar du reda på containern som körs.

  • Högerklicka på containern och välj Stoppa.

A screenshot showing how to stop a running Docker container in Visual Studio Code.

Dricks

Du kan också köra containern och välja en körnings- eller felsökningskonfiguration. Docker-tilläggsuppgifterna i tasks.json anropas när du kör eller felsöker. Uppgiften som anropas beror på vilken startkonfiguration du väljer. För uppgiften "Docker: Python (MongoDB local)" anger du <YOUR-IP-ADDRESS>. För uppgiften "Docker: Python (MongoDB Azure)" anger du <CONNECTION-STRING>.

Du kan också starta en container från en avbildning och stoppa den med Docker Desktop-programmet .

Gå vidare