Sdílet prostřednictvím


Místní sestavení a spuštění kontejnerizované webové aplikace v Pythonu

V této části série kurzů se dozvíte, jak sestavit a spustit kontejnerizovanou webovou aplikaci Django nebo Flask Python na místním počítači. K ukládání dat pro tuto aplikaci můžete použít místní instanci MongoDB nebo Azure Cosmos DB pro MongoDB. Tento článek je 2. částí 5dílné série kurzů. Před zahájením tohoto článku doporučujeme dokončit část 1 .

Následující diagram služby zvýrazňuje místní komponenty popsané v tomto článku. Dozvíte se také, jak používat Azure Cosmos DB pro MongoDB s místní imagí Dockeru místo místní instance MongoDB.

Snímek obrazovky s kurzem – Kontejnerizovaná aplikace Pythonu v Azure se zvýrazněnou místní částí

Klonování nebo stažení ukázkové aplikace v Pythonu

V této části naklonujete nebo stáhnete ukázkovou aplikaci v Pythonu, kterou používáte k sestavení image Dockeru. Můžete si vybrat mezi webovou aplikací Django nebo Flask Python. Pokud máte vlastní webovou aplikaci v Pythonu, můžete ji použít. Pokud používáte vlastní webovou aplikaci v Pythonu, ujistěte se, že má vaše aplikace v kořenové složce soubor Dockerfile a může se připojit k databázi MongoDB.

  1. Naklonujte úložiště Django nebo Flask do místní složky pomocí jednoho z následujících příkazů:

    # Django
    git clone https://github.com/Azure-Samples/msdocs-python-django-container-web-app.git
    
  2. Přejděte do kořenové složky pro klonované úložiště.

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

Vytvořit Docker image

V této části vytvoříte image Dockeru pro webovou aplikaci Python pomocí editoru Visual Studio Code nebo Azure CLI. Image Dockeru obsahuje webovou aplikaci Python, její závislosti a modul runtime Pythonu. Image Dockeru je sestavená ze souboru Dockerfile , který definuje obsah a chování image. Soubor Dockerfile je v kořenové složce ukázkové aplikace, kterou jste naklonovali nebo stáhli (nebo jste sami zadali).

Návod

Pokud s Azure CLI začínáte, přečtěte si téma Začínáme s Azure CLI a zjistěte, jak stáhnout a nainstalovat Azure CLI místně nebo jak spouštět příkazy Azure CLI v Azure Cloud Shellu.

K sestavení image Dockeru pomocí rozhraní příkazového řádku Dockeru se vyžaduje Docker. Po instalaci Dockeru otevřete okno terminálu a přejděte do ukázkové složky.

Poznámka:

Kroky v této části vyžadují, aby byl démon Dockeru spuštěný. V některých instalacích, například ve Windows, musíte před pokračováním otevřít Docker Desktop, který spustí proces démon.

  1. Spuštěním následujícího příkazu v kořenové složce ukázkové aplikace ověřte, že je Docker přístupný.

    docker
    

    Pokud po spuštění tohoto příkazu uvidíte nápovědu k rozhraní příkazového řádku Dockeru, bude Docker přístupný. V opačném případě se ujistěte, že je Docker nainstalovaný a že vaše prostředí má přístup k rozhraní příkazového řádku Dockeru.

  2. Pomocí příkazu Sestavení Dockeru sestavte image Dockeru pro webovou aplikaci Python.

    Obecná forma příkazu je 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>".

    Pokud jste v kořenové složce projektu, pomocí následujícího příkazu sestavte image Dockeru. Tečka (".") na konci příkazu odkazuje na aktuální adresář, ve kterém se příkaz spouští. Chcete-li vynutit opětovné sestavení, přidejte --no-cache.

    #!/bin/bash
    docker build --rm --pull \
      --file "Dockerfile" \
      --label "com.microsoft.create-by=docker-cli" \
      --tag "msdocspythoncontainerwebapp:latest" \
        .
    
  3. Pomocí příkazu Image Dockeru ověřte, že se image úspěšně vytvořila.

    docker images
    

    Příkaz vrátí seznam obrázků podle názvu úložiště, tagu a data vytvoření a dalších charakteristik obrázku.

V tuto chvíli máte místní image Dockeru s názvem "msdocspythoncontainerwebapp" se značkou "latest". Značky pomáhají definovat podrobnosti o verzi, zamýšlené použití, stabilitu a další relevantní informace. Další informace najdete v tématu Doporučení pro označování a správu verzí imagí kontejnerů.

Poznámka:

Image vytvořené z editoru VS Code nebo přímo pomocí rozhraní příkazového řádku Dockeru je možné zobrazit také pomocí desktopové aplikace Dockeru .

Nastavení MongoDB

Webová aplikace v Pythonu vyžaduje databázi MongoDB s názvem restaurants_reviews a k ukládání dat se vyžaduje kolekce s názvem restaurants_reviews . V tomto kurzu použijete místní instalaci MongoDB i instanci Azure Cosmos DB for MongoDB k vytvoření a přístupu k databázi a kolekci.

Důležité

Nepoužívejte databázi MongoDB, kterou používáte v produkčním prostředí. V tomto kurzu uložíte připojovací řetězec MongoDB do jedné z těchto instancí MongoDB v proměnné prostředí (která je pozorovatelná kýmkoli, kdo může zkontrolovat váš kontejner – například pomocí docker inspect).

Místní MongoDB

Začněme vytvořením místní instance MongoDB pomocí Azure CLI.

  1. Nainstalujte MongoDB (pokud ještě není nainstalovaný).

    Instalaci MongoDB můžete zkontrolovat pomocí prostředí MongoDB (mongosh). Pokud následující příkazy nefungují, možná budete muset explicitně nainstalovat mongosh nebo připojit mongosh k serveru MongoDB.

    • Pomocí následujícího příkazu otevřete prostředí MongoDB a získejte verzi prostředí MongoDB i serveru MongoDB:

      mongosh
      

      Návod

      Pokud chcete vrátit jenom verzi serveru MongoDB nainstalovanou v systému, zavřete a znovu otevřete prostředí MongoDB a použijte následující příkaz: mongosh --quiet --exec 'db.version()'

      V některých nastaveních můžete také přímo vyvolat démon Mongo v prostředí Bash.

      mongod --version
      
  2. Upravte soubor mongod.cfg ve \MongoDB\Server\8.0\bin složce a přidejte do bindIP klíče místní IP adresu počítače.

    Klíč bindip v konfiguračním souboru MongoD definuje názvy hostitelů a IP adresy, které MongoDB naslouchá klientským připojením. Přidejte aktuální IP adresu místního vývojového počítače. Ukázková webová aplikace Python spuštěná místně v kontejneru Dockeru komunikuje s hostitelským počítačem s touto adresou.

    Například část konfiguračního souboru by měla vypadat takto:

    net:
      port: 27017
      bindIp: 127.0.0.1,<local-ip-address>
    
  3. Uložte změny tohoto konfiguračního souboru.

    Důležité

    K uložení změn provedených v tomto konfiguračním souboru potřebujete oprávnění správce.

  4. Restartujte MongoDB a vyzvedněte změny konfiguračního souboru.

  5. Otevřete prostředí MongoDB a spuštěním následujícího příkazu nastavte název databáze na restaurants_reviews a název kolekce na restaurants_reviews. Můžete také vytvořit databázi a kolekci s rozšířením MongoDB VS Code nebo jakýmkoli jiným nástrojem s podporou MongoDB.

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

Po dokončení předchozího kroku je místní připojovací řetězec MongoDB "mongodb://127.0.0.1:27017/", název databáze je "restaurants_reviews" a název kolekce je "restaurants_reviews".

Azure Cosmos DB pro MongoDB

Teď také vytvoříme instanci Azure Cosmos DB pro MongoDB pomocí Azure CLI.

Poznámka:

Ve 4. části této série kurzů použijete instanci Azure Cosmos DB for MongoDB ke spuštění webové aplikace ve službě Azure App Service.

Před spuštěním následujícího skriptu nahraďte umístění, skupinu prostředků a název účtu Azure Cosmos DB pro MongoDB příslušnými hodnotami (volitelné). Doporučujeme použít stejnou skupinu prostředků pro všechny prostředky Azure vytvořené v tomto kurzu, abyste je po dokončení usnadnili odstranění.

Spuštění skriptu trvá několik minut.

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

Po dokončení skriptu zkopírujte Primární připojovací řetězec MongoDB z výsledku posledního příkazu do schránky nebo do jiného umístění.

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

    ...
  ]
}

Po dokončení předchozího kroku budete mít připojovací řetězec formuláře mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>Azure Cosmos DB for MongoDB, databázi s názvem restaurants_reviewsa kolekci s názvem restaurants_reviews.

Další informace o tom, jak pomocí Azure CLI vytvořit účet Cosmos DB pro MongoDB a vytvářet databáze a kolekce, najdete v tématu Vytvoření databáze a kolekce pro MongoDB pro Azure Cosmos DB pomocí Azure CLI. Můžete také použít PowerShell, rozšíření VS Code Azure Databases a Azure Portal.

Návod

V rozšíření VS Code Azure Databases můžete kliknout pravým tlačítkem na server MongoDB a získat připojovací řetězec.

Spusťte image lokálně v kontejneru

Teď jste připraveni spustit kontejner Dockeru místně pomocí místní instance MongoDB nebo instance Cosmos DB pro MongoDB. V této části kurzu se naučíte používat VS Code nebo Azure CLI ke spuštění image místně. Ukázková aplikace očekává, že se do ní předají informace o připojení MongoDB pomocí proměnných prostředí. Existuje několik způsobů, jak lokálně získat proměnné prostředí předané do kontejneru. Každá z nich má výhody a nevýhody z hlediska zabezpečení. Měli byste se vyhnout uložení citlivých informací nebo ponechávání citlivých informací v kódu uvnitř kontejneru.

Poznámka:

Když se webová aplikace nasadí do Azure, získá webová aplikace informace o připojení z hodnot prostředí nastavených jako nastavení konfigurace služby App Service a nepoužije se žádná úprava scénáře místního vývojového prostředí.

Místní MongoDB

K místnímu spuštění image Dockeru použijte následující příkazy s místní instancí MongoDB.

  1. Spusťte nejnovější verzi obrazu.

    #!/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. Ověřte, že je kontejner spuštěný. V jiném okně konzoly spusťte příkaz docker container ls .

    docker container ls
    

    Najděte svůj kontejner "msdocspythoncontainerwebapp:latest:latest" v seznamu. Všimněte si sloupce NAMES výstupu a sloupce PORTS. K zastavení kontejneru použijte název kontejneru.

  3. Otestujte webovou aplikaci.

    Přejděte na "http://127.0.0.1:8000" pro Django a "http://127.0.0.1:5000/" pro Flask.

  4. Vypněte kontejner.

    docker container stop <container-name>
    

Azure Cosmos DB pro MongoDB

Ke spuštění image Dockeru v Azure použijte následující příkazy s instancí Azure Cosmos DB for MongoDB.

  1. Spusťte nejnovější verzi obrazu.

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

    Předávání citlivých informací se uvádí jen pro demonstrační účely. Informace o připojovacím řetězci je možné zobrazit kontrolou kontejneru pomocí příkazu docker container inspect. Dalším způsobem zpracování tajných kódů je použití funkce BuildKitu Dockeru.

  2. Otevřete nové okno konzoly, spuštěním následujícího příkazu docker container ls potvrďte, že kontejner běží.

    docker container ls
    

    Najděte svůj kontejner "msdocspythoncontainerwebapp:latest:latest" v seznamu. Všimněte si sloupce NAMES výstupu a sloupce PORTS. K zastavení kontejneru použijte název kontejneru.

  3. Otestujte webovou aplikaci.

    Přejděte na "http://127.0.0.1:8000" pro Django a "http://127.0.0.1:5000/" pro Flask.

  4. Vypněte kontejner.

    docker container stop <container-name>
    

Kontejner můžete také spustit z image a zastavit ho pomocí desktopové aplikace Dockeru .

Další krok