Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tej części serii samouczków dowiesz się, jak skompilować i uruchomić konteneryzowaną aplikację internetową Django lub aplikację internetową platformy Flask w języku Python na komputerze lokalnym. Aby przechowywać dane dla tej aplikacji, możesz użyć lokalnego wystąpienia bazy danych MongoDB lub usługi Azure Cosmos DB dla bazy danych MongoDB. Ten artykuł jest częścią 2 z 5-częściowej serii samouczków. Zalecamy ukończenie części 1 przed rozpoczęciem tego artykułu.
Poniższy diagram usługi przedstawia lokalne składniki omówione w tym artykule W tym artykule dowiesz się również, jak używać usługi Azure Cosmos DB dla bazy danych MongdoDB z lokalnym obrazem platformy Docker, a nie lokalnym wystąpieniem bazy danych MongoDB.
Klonowanie lub pobieranie przykładowej aplikacji w języku Python
W tej sekcji sklonujesz lub pobierzesz przykładową aplikację w języku Python, której używasz do tworzenia obrazu platformy Docker. Możesz wybrać między aplikacją internetową Django lub Flask Python. Jeśli masz własną aplikację internetową w języku Python, możesz zamiast tego użyć tej aplikacji. Jeśli używasz własnej aplikacji internetowej w języku Python, upewnij się, że aplikacja ma plik Dockerfile w folderze głównym i może nawiązać połączenie z bazą danych MongoDB.
Sklonuj repozytorium Django lub Flask do folderu lokalnego przy użyciu jednego z następujących poleceń:
Przejdź do katalogu głównego sklonowanego repozytorium.
Tworzenie obrazu platformy Docker
W tej sekcji utworzysz obraz platformy Docker dla aplikacji internetowej w języku Python przy użyciu programu Visual Studio Code lub interfejsu wiersza polecenia platformy Azure. Obraz platformy Docker zawiera aplikację internetową języka Python, jej zależności i środowisko uruchomieniowe języka Python. Obraz platformy Docker jest tworzony na podstawie pliku Dockerfile , który definiuje zawartość i zachowanie obrazu. Plik Dockerfile znajduje się w folderze głównym sklonowanej lub pobranej przykładowej aplikacji (lub dostarczonej samodzielnie).
Wskazówka
Jeśli dopiero zaczynasz korzystać z interfejsu wiersza polecenia platformy Azure, zobacz Wprowadzenie do interfejsu wiersza polecenia platformy Azure , aby dowiedzieć się, jak pobrać i zainstalować interfejs wiersza polecenia platformy Azure lokalnie lub jak uruchamiać polecenia interfejsu wiersza polecenia platformy Azure w usłudze Azure Cloud Shell.
Docker jest wymagany do skompilowania obrazu platformy Docker przy użyciu interfejsu wiersza polecenia platformy Docker. Po zainstalowaniu platformy Docker otwórz okno terminalu i przejdź do folderu przykładowego.
Uwaga
Kroki opisane w tej sekcji wymagają uruchomienia demona platformy Docker. W niektórych instalacjach, na przykład w systemie Windows, należy otworzyć program Docker Desktop, który uruchamia demona przed kontynuowaniem.
Upewnij się, że platforma Docker jest dostępna, uruchamiając następujące polecenie w folderze głównym przykładowej aplikacji.
dockerJeśli po uruchomieniu tego polecenia zobaczysz pomoc dotyczącą interfejsu wiersza polecenia platformy Docker, platforma Docker jest dostępna. W przeciwnym razie upewnij się, że Docker jest zainstalowany i że powłoka ma dostęp do CLI Dockera.
Skompiluj obraz platformy Docker dla aplikacji internetowej w języku Python przy użyciu polecenia kompilacji platformy Docker .
Ogólną formą polecenia jest
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>".Jeśli jesteś w folderze głównym projektu, użyj następującego polecenia, aby zbudować obraz Dockera. Kropka (".") na końcu polecenia odwołuje się do bieżącego katalogu, w którym jest uruchamiane polecenie. Aby wymusić ponowną kompilację, dodaj polecenie
--no-cache.#!/bin/bash docker build --rm --pull \ --file "Dockerfile" \ --label "com.microsoft.create-by=docker-cli" \ --tag "msdocspythoncontainerwebapp:latest" \ .Upewnij się, że obraz został pomyślnie skompilowany przy użyciu polecenia Obrazy platformy Docker .
docker imagesPolecenie zwraca listę obrazów według nazwy repozytorium, tagu i daty utworzenia wśród innych cech obrazu.
W tym momencie masz lokalny obraz Docker o nazwie "msdocspythoncontainerwebapp" z tagiem "latest". Tagi ułatwiają definiowanie szczegółów wersji, zamierzonego użycia, stabilności i innych istotnych informacji. Aby uzyskać więcej informacji, zobacz Zalecenia dotyczące tagowania i przechowywania wersji obrazów kontenerów.
Uwaga
Obrazy utworzone na podstawie programu VS Code lub przy użyciu interfejsu wiersza polecenia platformy Docker można również wyświetlać bezpośrednio z aplikacją docker Desktop .
Konfigurowanie bazy danych MongoDB
Aplikacja internetowa w języku Python wymaga bazy danych MongoDB o nazwie restaurants_reviews , a kolekcja o nazwie restaurants_reviews jest wymagana do przechowywania danych. W tym samouczku używasz zarówno lokalnej instalacji MongoDB, jak i instancji Azure Cosmos DB dla MongoDB do tworzenia i uzyskiwania dostępu do bazy danych i kolekcji.
Ważne
Nie używaj bazy danych MongoDB używanej w środowisku produkcyjnym. W tym samouczku ciąg połączenia do jednej z tych instancji MongoDB jest przechowywany w zmiennej środowiskowej (co może być widoczne dla każdego, kto może sprawdzić kontener — na przykład przy użyciu polecenia docker inspect).
Lokalna baza danych MongoDB
Zacznijmy od utworzenia lokalnej instancji MongoDB przy użyciu Azure CLI.
Zainstaluj bazę danych MongoDB (jeśli nie została jeszcze zainstalowana).
Możesz sprawdzić instalację bazy danych MongoDB przy użyciu powłoki MongoDB (mongosh). Jeśli następujące polecenia nie działają, może być konieczne jawne zainstalowanie bazy danych Mongosh lub nawiązanie połączenia z serwerem MongoDB.
Użyj następującego polecenia, aby otworzyć powłokę MongoDB i uzyskać wersję zarówno powłoki MongoDB, jak i serwera MongoDB.
mongoshWskazówka
Aby odczytać tylko wersję serwera MongoDB zainstalowaną w systemie, zamknij i otwórz ponownie powłokę MongoDB i użyj następującego polecenia:
mongosh --quiet --exec 'db.version()'W niektórych konfiguracjach można również bezpośrednio wywołać demona MongoDB w powłoce bash.
mongod --version
Zmodyfikuj plik mongod.cfg w
\MongoDB\Server\8.0\binfolderze i dodaj lokalny adres IP komputera dobindIPklucza.Klucz
bindipw pliku konfiguracji MongoD definiuje nazwy hostów i adresy IP, na które MongoDB nasłuchuje w celu połączeń klientów. Dodaj bieżący adres IP lokalnego komputera programistycznego. Przykładowa aplikacja internetowa w języku Python działająca lokalnie w kontenerze platformy Docker komunikuje się z komputerem hosta przy użyciu tego adresu.Na przykład część pliku konfiguracji powinna wyglądać następująco:
net: port: 27017 bindIp: 127.0.0.1,<local-ip-address>Zapisz zmiany w tym pliku konfiguracji.
Ważne
Aby zapisać zmiany wprowadzone w tym pliku konfiguracji, potrzebne są uprawnienia administracyjne.
Uruchom ponownie bazę danych MongoDB, aby pobrać zmiany w pliku konfiguracji.
Otwórz powłokę MongoDB i uruchom następujące polecenie, aby ustawić nazwę bazy danych na "restaurants_reviews" i nazwę kolekcji na "restaurants_reviews". Bazę danych i kolekcję można również utworzyć za pomocą rozszerzenia MongoDB programu VS Code lub dowolnego innego narzędzia obsługującego bazę danych MongoDB.
> help > use restaurants_reviews > db.restaurants_reviews.insertOne({}) > show dbs > exit
Po wykonaniu poprzedniego kroku lokalny ciąg połączenia MongoDB to "mongodb://127.0.0.1:27017/", nazwa bazy danych to "restaurants_reviews", a nazwa kolekcji to "restaurants_reviews".
Usługa Azure Cosmos DB dla bazy danych MongoDB
Teraz utwórzmy również instancję Azure Cosmos DB dla MongoDB za pomocą Azure CLI.
Uwaga
W części czwartej tej serii samouczków używasz instancji Azure Cosmos DB dla MongoDB, aby uruchomić aplikację internetową w usłudze Azure App Service.
Przed uruchomieniem następującego skryptu zastąp lokalizację, grupę zasobów i nazwę konta usługi Azure Cosmos DB dla bazy danych MongoDB odpowiednimi wartościami (opcjonalnie). Zalecamy używanie tej samej grupy zasobów dla wszystkich zasobów platformy Azure utworzonych w tym samouczku, aby ułatwić ich usuwanie po zakończeniu pracy.
Uruchomienie skryptu trwa kilka 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 zakończeniu działania skryptu skopiuj podstawowe parametry połączenia bazy danych MongoDB z danych wyjściowych ostatniego polecenia do schowka lub innej lokalizacji.
{
"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 wykonaniu poprzedniego kroku, masz ciąg połączenia Azure Cosmos DB dla MongoDB w formie mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>, bazę danych o nazwie restaurants_reviews i kolekcję o nazwie restaurants_reviews.
Aby uzyskać więcej informacji na temat tworzenia konta usługi Cosmos DB dla bazy danych MongoDB przy użyciu interfejsu wiersza polecenia platformy Azure oraz tworzenia baz danych i kolekcji, zobacz Tworzenie bazy danych i kolekcji dla bazy danych MongoDB dla usługi Azure Cosmos DB przy użyciu interfejsu wiersza polecenia platformy Azure. Możesz również użyć programu PowerShell, rozszerzenia Azure Databases do VS Code i portalu Azure.
Wskazówka
W rozszerzeniu VS Code Azure Databases możesz kliknąć prawym przyciskiem myszy serwer MongoDB i pobrać parametry połączenia.
Uruchamianie obrazu lokalnie w kontenerze
Teraz możesz uruchomić kontener Docker lokalnie, korzystając z lokalnego wystąpienia MongoDB lub wystąpienia usługi Cosmos DB dla MongoDB. W tej sekcji samouczka dowiesz się, jak używać programu VS Code lub interfejsu wiersza polecenia platformy Azure do lokalnego uruchamiania obrazu. Przykładowa aplikacja oczekuje przekazania do niej informacji o połączeniu z bazą danych MongoDB ze zmiennymi środowiskowymi. Istnieje kilka sposobów przekazywania zmiennych środowiskowych do kontenera lokalnie. Każda z nich ma zalety i wady pod względem bezpieczeństwa. Należy unikać ewidencjonowania poufnych informacji lub pozostawiania poufnych informacji w kodzie w kontenerze.
Uwaga
Po wdrożeniu aplikacji internetowej na platformie Azure aplikacja internetowa pobiera informacje o połączeniu z wartości środowiska ustawionych jako ustawienia konfiguracji usługi App Service i żadne modyfikacje scenariusza lokalnego środowiska deweloperskiego nie mają zastosowania.
Lokalna baza danych MongoDB
Użyj następujących poleceń z lokalną instancją MongoDB, aby lokalnie uruchomić obraz Docker.
Uruchom najnowszą wersję 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:latestUpewnij się, że kontener jest uruchomiony. W innym oknie konsoli uruchom polecenie docker container ls.
docker container lsZobacz swój kontener "msdocspythoncontainerwebapp:latest:latest" na liście kontenerów. Zwróć uwagę na kolumnę
NAMESdanych wyjściowych i kolumnęPORTS. Użyj nazwy kontenera, aby zatrzymać kontener.Przetestuj aplikację internetową.
Przejdź do "http://127.0.0.1:8000" dla Django i "http://127.0.0.1:5000/" dla Flask.
Zamknij kontener.
docker container stop <container-name>
Usługa Azure Cosmos DB dla bazy danych MongoDB
Użyj następujących poleceń z wystąpieniem Azure Cosmos DB dla MongoDB, aby uruchomić obraz Docker na platformie Azure.
Uruchom najnowszą wersję 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:latestPrzekazywanie poufnych informacji jest wyświetlane tylko w celach demonstracyjnych. Informacje o parametrach połączenia można wyświetlić, sprawdzając kontener za pomocą polecenia docker container inspect. Innym sposobem obsługi tajemnic jest użycie funkcjonalności BuildKit Docker.
Otwórz nowe okno konsoli, uruchom następujące polecenie ls kontenera platformy Docker , aby potwierdzić, że kontener jest uruchomiony.
docker container lsZobacz swój kontener "msdocspythoncontainerwebapp:latest:latest" na liście kontenerów. Zwróć uwagę na kolumnę
NAMESdanych wyjściowych i kolumnęPORTS. Użyj nazwy kontenera, aby zatrzymać kontener.Przetestuj aplikację internetową.
Przejdź do "http://127.0.0.1:8000" dla Django i "http://127.0.0.1:5000/" dla Flask.
Zamknij kontener.
docker container stop <container-name>
Kontener można również uruchomić z obrazu i zatrzymać go za pomocą aplikacji docker Desktop .