Sestavení a spuštění kontejnerizované webové aplikace v Pythonu místně pomocí MongoDB
Článek
Tento článek je součástí kurzu o kontejnerizaci a nasazení kontejnerizované webové aplikace v Pythonu do služby Aplikace Azure Service. App Service umožňuje spouštět kontejnerizované webové aplikace a nasazovat prostřednictvím funkcí kontinuální integrace a průběžného nasazování (CI/CD) pomocí Docker Hubu, Azure Container Registry a Visual Studio Team Services. V této části kurzu se dozvíte, jak sestavit a spustit kontejnerizovanou webovou aplikaci v Pythonu místně. Tento krok je volitelný a nevyžaduje se k nasazení ukázkové aplikace do Azure.
Místní spuštění image Dockeru ve vývojovém prostředí vyžaduje nastavení nad rámec nasazení do Azure. Představte si ji jako investici, která může usnadnit budoucí vývojové cykly, zejména když se přesunete mimo ukázkové aplikace a začnete vytvářet vlastní webové aplikace. Pokud chcete nasadit ukázkové aplikace pro Django a Flask, můžete tento krok přeskočit a přejít k dalšímu kroku v tomto kurzu. Po nasazení do Azure se můžete kdykoli vrátit a projít si tyto kroky.
Následující diagram služby zvýrazňuje součásti popsané v tomto článku.
Rozbalte soubor ZIP do složky a otevřete okno terminálu v této složce.
2. Sestavení image Dockeru
Pokud používáte některou z ukázkových aplikací architektury, které jsou dostupné pro Django a Flask, můžete začít. Pokud pracujete s vlastní ukázkovou aplikací, podívejte se, jak jsou ukázkové aplikace nastavené, zejména soubor Dockerfile v kořenovém adresáři.
Tyto pokyny vyžadují Visual Studio Code a rozšíření Dockeru. Přejděte do ukázkové složky, kterou jste naklonovali nebo stáhli, a otevřete VS Code pomocí příkazu code ..
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.
Pokyny
Snímek obrazovky
Otevřete rozšíření Dockeru.
Pokud rozšíření Dockeru hlásí chybu Nepovedlo se připojit, ujistěte se, že je Docker nainstalovaný a spuštěný. Pokud pracujete s Dockerem poprvé, pravděpodobně nebudete mít žádné kontejnery, image ani připojené registry.
Sestavte image.
V Průzkumníku projektu zobrazující soubory projektu klikněte pravým tlačítkem na soubor Dockerfile a vyberte Sestavit image....
Případně můžete k vyvolání příkazu použít paletu příkazů (F1 nebo Ctrl+Shift+P) a zadat Docker Images: Build Images.
Další informace o syntaxi souboru Dockerfile najdete v referenčních informacích k souboru Dockerfile.
Potvrďte, že image byla sestavena.
Přejděte do části IMAGES rozšíření Dockeru.
Vyhledejte nedávno sestavenou image. Název image kontejneru je msdocspythoncontainerwebapp, který je nastavený v souboru .vscode/tasks.json .
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.
Začněte v kořenovém adresáři ukázkové aplikace, kterou jste naklonovali nebo stáhli.
Krok 1. Na příkazovém řádku prostředí 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, pokračujte. Jinak se ujistěte, že je Docker nainstalovaný nebo má vaše prostředí přístup k rozhraní příkazového řádku Dockeru.
Krok 2. Sestavte image.
Obecná forma příkazu docker build 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 například v kořenovém adresáři projektu, můžete k vytvoření image použít podobný příkaz:
Všimněte si tečky (".") na konci příkazu odkazující na aktuální přímo, ve kterém se příkaz spouští. Pokud chcete vynutit opětovné sestavení, můžete ho přidat --no-cache .
Měly by se zobrazit obrázky uvedené podle názvu ÚLOŽIŠTĚ, značky a data CREATED mimo jiné charakteristiky obrázku.
V tuto chvíli jste místně vytvořili image. Vytvořená image má název msdocspythoncontainerwebapp a značku "latest". Značky představují způsob, jak definovat informace o verzi, zamýšlené použití, stabilitu nebo jiné informace. Další informace najdete v tématu Doporučení pro označování a správu verzí imagí kontejnerů.
Image vytvořené z editoru VS Code nebo pomocí rozhraní příkazového řádku Dockeru je možné zobrazit také pomocí desktopové aplikace Dockeru.
3. Nastavení MongoDB
Pro účely tohoto kurzu potřebujete databázi MongoDB s názvem restaurants_reviews a kolekci s názvem restaurants_reviews. Kroky v této části ukazují, jak použít místní instalaci MongoDB nebo 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 budete používat v produkčním prostředí. V tomto kurzu uložíte připojovací řetězec MongoDB do proměnné prostředí. Díky tomu může každý, kdo může zkontrolovat váš kontejner (například pomocí docker inspect).
Alternativou v některých instalacích je přímé vyvolání démona Mongo.
mongod --version
Krok 2: Upravte soubor mongod.cfg a přidejte IP adresu počítače.
Konfigurační soubor Mongod má bindIp klíč, který 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á aplikace spuštěná místně v kontejneru Dockeru bude komunikovat s hostitelským počítačem s touto adresou.
Například část konfiguračního souboru by měla vypadat takto:
Restartujte MongoDB a vyzvedněte změny konfiguračního souboru.
Krok 3: Vytvoření databáze a kolekce v místní databázi MongoDB
Nastavte název databáze na "restaurants_reviews" a název kolekce na "restaurants_reviews". Databázi a kolekci můžete vytvořit pomocí rozšíření VS Code MongoDB, prostředí MongoDB (mongosh) nebo jakéhokoli jiného nástroje s podporou MondoDB.
Tady jsou ukázkové příkazy pro vytvoření databáze a kolekce v prostředí MongoDB:
> help
> use restaurants_reviews
> db.restaurants_reviews.insertOne({})
> show dbs
> exit
V tuto chvíli 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".
Pomocí příkazů Azure CLI můžete vytvořit účet služby Azure Cosmos DB pro MongoDB a pak vytvořit požadovanou databázi a kolekci pro účely tohoto kurzu. Pokud jste azure CLI ještě nepoužívali, 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.
Před spuštěním následujícího skriptu nahraďte umístění a název účtu Azure Cosmos DB for MongoDB příslušnými hodnotami. Můžete použít název skupiny prostředků zadaný ve skriptu nebo ho změnit. V obou směrech doporučujeme použít stejnou skupinu prostředků pro všechny prostředky Azure vytvořené v různých článcích tohoto kurzu. Jakmile budete s kurzem hotovi, usnadníte jejich odstranění. Pokud jste sem přijeli z části 4. Nasaďte službu App Service kontejneru, použijte název skupiny prostředků a umístění, které už pro prostředky používáte.
Skript předpokládá, že používáte prostředí Bash. Pokud chcete použít jiné prostředí, budete muset změnit deklaraci proměnné a syntaxi nahrazení. Spuštění skriptu může trvat několik minut.
#!/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 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í řetězec MongoDB Připojení ion z výstupu posledního příkazu.
V tomto okamžiku byste měli mít službu Azure Cosmos DB pro MongoDB připojovací řetězec formulářemongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>, databázi s názvem restaurants_reviewsa kolekci s názvem restaurants_reviews.
V rozšíření VS Code Azure Databases můžete kliknout pravým tlačítkem na server MongoDB a získat připojovací řetězec.
4. Místní spuštění image v kontejneru
S informacemi o tom, jak se připojit k MongoDB, jste připraveni spustit kontejner místně. Ukázková aplikace očekává předání informací o připojení MongoDB v proměnných prostředí. Proměnné prostředí předané do kontejneru můžete místně získat několika způsoby. Každá z nich má výhody a nevýhody z hlediska zabezpečení. Měli byste se vyhnout vrácení citlivých informací se kontrolou nebo ponechání citlivých informací v kódu v kontejneru.
Poznámka:
Když se nasadí do Azure, webová aplikace získá informace o připojení z hodnot prostředí nastavených jako nastavení konfigurace služby App Service a nepoužije se žádná změna pro místní scénář vývojového prostředí.
Ve složce .vscode ukázkové aplikace definuje soubor settings.json, co se stane, když použijete rozšíření Dockeru, a v místní nabídce značky vyberte Spustit nebo Spustit Interactive. Soubor settings.json obsahuje dvě šablony pro jednotlivé (MongoDB local) scénáře a (MongoDB Azure) scénáře.
Pokud používáte místní databázi MongoDB:
Nahraďte obě instance <YOUR_IP_ADDRESS> vaší IP adresou.
Nahraďte obě instance <CONNECTION_STRING> připojovací řetězec databáze MongoDB.
Pokud používáte databázi Azure Cosmos DB for MongoDB:
Nahraďte obě instance <CONNECTION_STRING> službou Azure Cosmos DB for MongoDB připojovací řetězec.
docker.dockerPath Nastavte nastavení konfigurace používané šablonami. Pokud chcete nastavit docker.dockerPath, otevřete paletu příkazů VS Code (Ctrl+Shift+P), zadejte Předvolby: Otevřít pracovní prostor Nastavení a do pole Nastavení hledání zadejte docker.dockerPath. Jako hodnotu nastavení zadejte docker (bez uvozovek).
Poznámka:
Předpokládá se, že název databáze i název kolekce .restaurants_reviews
Spusťte image.
V části IMAGES rozšíření Docker najděte vytvořenou image.
Zobrazí se výzva k výběru úlohy, která je vhodná pro váš scénář, buď Interaktivní konfigurace spuštění (místní MongoDB), nebo Interaktivní konfigurace spuštění (Azure MongoDB).
Při interaktivním spuštění uvidíte v kódu všechny příkazy tisku, které můžou být užitečné pro ladění. Můžete také vybrat možnost Spustit , která není interaktivní a nezachová standardní vstup.
Důležité
Tento krok selže, pokud je výchozí profil terminálu nastavený na příkazový řádek (Windows). Pokud chcete změnit výchozí profil, otevřete paletu příkazů VS Code (Ctrl+Shift+P), zadejte "Terminal: Select Default Profile" (Terminál: Select Default Profile) a pak v rozevírací nabídce vyberte jiný profil, například Git Bash nebo PowerShell.
Ověřte, že je kontejner spuštěný.
V části KONTEJNERY rozšíření Docker najděte kontejner.
Rozbalte uzel Jednotlivé kontejnery a ověřte, že je spuštěný msdocspythoncontainerwebapp. Pokud je kontejner spuštěný, měl by se vedle názvu kontejneru zobrazit zelený symbol trojúhelníku.
Otestujte webovou aplikaci tak, že kliknete pravým tlačítkem na název kontejneru a vyberete Otevřít v prohlížeči.
Prohlížeč se otevře ve výchozím prohlížeči jako "http://127.0.0.1:8000" pro Django nebo "http://127.0.0.1:5000/" pro Flask.
Zastavte kontejner.
V části KONTEJNERY rozšíření Docker najděte spuštěný kontejner.
Klikněte pravým tlačítkem na kontejner a vyberte Zastavit.
Tip
Kontejner můžete také spustit výběrem konfigurace spuštění nebo ladění. Úlohy rozšíření Dockeru v souboru tasks.json se volají při spuštění nebo ladění. Volaná úloha závisí na tom, jakou konfiguraci spuštění vyberete. Pro úlohu Docker: Python (místní MongoDB) zadejte <VAŠI-IP-ADRESU>. Pro úlohu Docker: Python (MongoDB Azure) zadejte <CONNECTION-STRING>.
# 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
Výše uvedený příkaz je naformátován pro prostředí Bash. Pokud používáte PowerShell, příkazový řádek nebo jiné prostředí, budete možná muset odpovídajícím způsobem upravit pokračování řádku a formát proměnné prostředí.
# 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
Výše uvedený příkaz je naformátován pro prostředí Bash. Pokud používáte PowerShell, příkazový řádek nebo jiné prostředí, budete možná muset odpovídajícím způsobem upravit pokračování řádku a formát proměnné prostředí.
Předání citlivých informací, jak je znázorněno zde, slouží k demonstračním účelům. Informace o připojovací řetězec lze 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.
V seznamu by se měl zobrazit kontejner msdocspythoncontainerwebapp:latest:latest. Všimněte si NAMES sloupce výstupu PORTS a sloupce. Název můžete použít k zastavení kontejneru.
Krok 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 při spuštění s místním MongoDB.