Dela via


Skapa och köra en containerbaserad Python-webbapp lokalt

I den här delen av självstudieserien får du lära dig hur du skapar och kör en containerbaserad Django eller en Flask Python-webbapp på din lokala dator. Om du vill lagra data för den här appen kan du använda antingen en lokal MongoDB-instans eller Azure Cosmos DB för MongoDB. Den här artikeln är del 2 i en självstudieserie i fem delar. Vi rekommenderar att du slutför del 1 innan du påbörjar den här artikeln.

Följande tjänstdiagram visar de lokala komponenter som beskrivs i den här artikeln I den här artikeln får du också lära dig hur du använder Azure Cosmos DB för MongdoDB med en lokal Docker-avbildning i stället för en lokal instans av MongoDB.

Skärmbild av självstudien – Containeriserad Python-app på Azure med lokal del markerad.

Klona eller ladda ned Python-exempelappen

I det här avsnittet ska du klona eller ladda ned python-exempelappen som du använder för att skapa en Docker-avbildning. Du kan välja mellan en Django- eller Flask Python-webbapp. Om du har en egen Python-webbapp kan du välja att använda den i stället. Om du använder din egen Python-webbapp kontrollerar du att appen har en Dockerfile i rotmappen och kan ansluta till en MongoDB-databas.

  1. Klona antingen Django- eller Flask-lagringsplatsen till en lokal mapp med något av följande kommandon:

    # Django
    git clone https://github.com/Azure-Samples/msdocs-python-django-container-web-app.git
    
  2. Navigera till rotmappen för den klonade lagringsplatsen.

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

Skapa en Docker-avbildning

I det här avsnittet skapar du en Docker-avbildning för Python-webbappen med antingen Visual Studio Code eller Azure CLI. Docker-avbildningen innehåller Python-webbappen, dess beroenden och Python-körningen. Docker-avbildningen skapas från en Dockerfile som definierar avbildningens innehåll och beteende. Dockerfile finns i rotmappen för exempelappen som du klonade eller laddade ned (eller angav själv).

Tips/Råd

Om du inte har använt Azure CLI tidigare kan du läsa Komma igång med Azure CLI för att lära dig hur du laddar ned och installerar Azure CLI lokalt eller hur du kör Azure CLI-kommandon i Azure Cloud Shell.

Docker krävs för att skapa Docker-avbildningen med hjälp av Docker CLI. När Docker har installerats öppnar du ett terminalfönster och navigerar till exempelmappen.

Anmärkning

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.

  1. Bekräfta att Docker är tillgängligt genom att köra följande kommando i rotmappen för exempelappen.

    docker
    

    Om du efter att ha kört det här kommandot ser hjälpen för Docker CLI är Docker tillgänglig. Annars kontrollerar du att Docker är installerat och att ditt terminalfönster har åtkomst till Docker CLI.

  2. Skapa Docker-avbildningen för Python-webbappen med hjälp av kommandot Docker build .

    Kommandots allmänna form är 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>".

    Om du är i rotmappen för projektet använder du följande kommando för att skapa Docker-avbildningen. Punkten (".") i slutet av kommandot refererar till den aktuella katalogen där kommandot körs. Om du vill tvinga fram en ombyggnad lägger du till --no-cache.

    #!/bin/bash
    docker build --rm --pull \
      --file "Dockerfile" \
      --label "com.microsoft.create-by=docker-cli" \
      --tag "msdocspythoncontainerwebapp:latest" \
        .
    
  3. Bekräfta att avbildningen har skapats med kommandot Docker Images .

    docker images
    

    Kommandot returnerar en lista över avbildningar efter LAGRINGSPLATSnamn, TAGG och SKAPAT datum bland andra bildegenskaper.

Nu har du en lokal Docker-avbildning med namnet "msdocspythoncontainerwebapp" med taggen "latest". Taggar hjälper dig att definiera versionsinformation, avsedd användning, stabilitet och annan relevant information. Mer information finns i Rekommendationer för taggning och versionshantering av containeravbildningar.

Anmärkning

Avbildningar som skapas från VS Code eller med hjälp av Docker CLI direkt kan också visas med Docker Desktop-programmet .

Konfigurera MongoDB

Python-webbappen kräver en MongoDB-databas med namnet restaurants_reviews och en samling med namnet restaurants_reviews krävs för att lagra data. I den här självstudien använder du både en lokal installation av MongoDB och en Azure Cosmos DB för MongoDB-instans för att skapa och komma åt databasen och kollektionen.

Viktigt!

Använd inte en MongoDB-databas som du använder i produktion. I den här handledningen lagrar du MongoDB-anslutningssträngen till en av dessa MongoDB-instanser i en miljövariabel (som kan observeras av alla som kan inspektera containern, till exempel genom att använda docker inspect).

Lokal MongoDB

Vi börjar med att skapa en lokal instans av MongoDB med hjälp av Azure CLI.

  1. Installera MongoDB (om det inte redan är installerat).

    Du kan söka efter installationen av MongoDB med hjälp av MongoDB Shell (mongosh). Om följande kommandon inte fungerar kan du behöva installera mongosh eller ansluta mongosh till MongoDB-servern.

    • Använd följande kommando för att öppna MongoDB-gränssnittet och hämta versionen av både MongoDB-gränssnittet och MongoDB-servern:

      mongosh
      

      Tips/Råd

      Om du bara vill returnera den version av MongoDB-servern som är installerad på systemet stänger du och öppnar MongoDB-gränssnittet igen och använder följande kommando: mongosh --quiet --exec 'db.version()'

      I vissa installationer kan du också direkt anropa Mongo-daemon i bash-gränssnittet.

      mongod --version
      
  2. Redigera filen mongod.cfg i \MongoDB\Server\8.0\bin mappen och lägg till datorns lokala IP-adress i bindIP nyckeln.

    Nyckeln bindip i MongoD-konfigurationsfilen definierar de värdnamn och IP-adresser som MongoDB lyssnar efter klientanslutningar. Lägg till den aktuella IP-adressen för din lokala utvecklingsdator. Python-exempelwebbappen 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>
    
  3. Spara ändringarna i den här konfigurationsfilen.

    Viktigt!

    Du behöver administratörsbehörighet för att spara de ändringar du gör i den här konfigurationsfilen.

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

  5. Öppna ett MongoDB-gränssnitt och kör följande kommando för att ange databasnamnet till "restaurants_reviews" och samlingsnamnet till "restaurants_reviews". Du kan också skapa en databas och samling med VS Code MongoDB-tillägget eller något annat MongoDB-medvetet verktyg.

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

När du har slutfört föregående steg är den lokala MongoDB-anslutningssträngen "mongodb://127.0.0.1:27017/", databasnamnet är "restaurants_reviews" och samlingsnamnet är "restaurants_reviews".

Azure Cosmos DB för MongoDB

Nu ska vi också skapa en Azure Cosmos DB för MongoDB-instans med hjälp av Azure CLI.

Anmärkning

I del 4 i den här självstudieserien använder du Azure Cosmos DB for MongoDB-instansen för att köra webbappen i Azure App Service.

Innan du kör följande skript ersätter du platsen, resursgruppen och Azure Cosmos DB för MongoDB-kontonamnet med lämpliga värden (valfritt). Vi rekommenderar att du använder samma resursgrupp för alla Azure-resurser som skapats i den här självstudien för att göra dem enklare att ta bort när du är klar.

Det tar några minuter att köra skriptet.

#!/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"

När skriptet är klart kopierar du den primära MongoDB-anslutningssträngen från resultatet av det senaste kommandot till urklipp eller något annat ställe.

{
  "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"
    },

    ...
  ]
}

När du har slutfört föregående steg har du en Azure Cosmos DB för MongoDB-anslutningssträng i formuläret mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>, en databas med namnet restaurants_reviewsoch en samling med namnet restaurants_reviews.

Mer information om hur du använder Azure CLI för att skapa ett Cosmos DB för MongoDB-konto och för att skapa databaser och samlingar finns i Skapa en databas och samling för MongoDB för Azure Cosmos DB med Azure CLI. Du kan också använda PowerShell, VS Code Azure Databases-tillägget och Azure-portalen.

Tips/Råd

I TILLÄGGET VS Code Azure Databases kan du högerklicka på MongoDB-servern och hämta anslutningssträngen.

Kör avbildningen lokalt i en container

Nu är du redo att köra Docker-containern lokalt med antingen din lokala MongoDB-instans eller Cosmos DB för MongoDB-instansen. I det här avsnittet av självstudien lär du dig att använda antingen VS Code eller Azure CLI för att köra bilden lokalt. Exempelappen förväntar sig att MongoDB-anslutningsinformationen skickas till den med miljövariabler. Det finns flera sätt att överföra miljövariabler 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.

Anmärkning

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

MongoDB lokal

Använd följande kommandon med din lokala instans av MongoDB för att köra Docker-avbildningen lokalt.

  1. Kör den senaste versionen av avbildningen.

    #!/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:latest
    
  2. Bekräfta att containern är igång. Kör kommandot docker container ls i ett annat konsolfönster.

    docker container ls
    

    Se containern "msdocspythoncontainerwebapp:latest:latest" i listan. Observera kolumnen för NAMES utdata och PORTS kolumnen. Använd containernamnet för att stoppa containern.

  3. Testa webbappen.

    Gå till "http://127.0.0.1:8000" för Django och "http://127.0.0.1:5000/" för Flask.

  4. Stäng av containern.

    docker container stop <container-name>
    

Azure Cosmos DB för MongoDB

Använd följande kommandon med din Azure Cosmos DB for MongoDB-instans för att köra Docker-avbildningen i Azure.

  1. Kör den senaste versionen av avbildningen.

    #!/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
    

    Att skicka in känslig information visas endast i demonstrationssyfte. Du kan visa information om anslutningssträngen genom att inspektera containern med kommandot dockercontainern. Ett annat sätt att hantera hemligheter är att använda BuildKit-funktionerna i Docker.

  2. Öppna ett nytt konsolfönster, kör följande docker container ls-kommando för att bekräfta att containern körs.

    docker container ls
    

    Se containern "msdocspythoncontainerwebapp:latest:latest" i listan. Observera kolumnen för NAMES utdata och PORTS kolumnen. Använd containernamnet för att stoppa containern.

  3. Testa webbappen.

    Gå till "http://127.0.0.1:8000" för Django och "http://127.0.0.1:5000/" för Flask.

  4. Stäng av containern.

    docker container stop <container-name>
    

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

Nästa steg