Kompilowanie i uruchamianie konteneryzowanej aplikacji internetowej w języku Python lokalnie przy użyciu bazy danych MongoDB
Artykuł
Ten artykuł jest częścią samouczka dotyczącego konteneryzowania i wdrażania konteneryzowanej aplikacji internetowej w języku Python w celu aplikacja systemu Azure Service. Usługa App Service umożliwia uruchamianie konteneryzowanych aplikacji internetowych i wdrażanie za pomocą funkcji ciągłej integracji/ciągłego wdrażania (CI/CD) za pomocą usług Docker Hub, Azure Container Registry i Visual Studio Team Services. W tej części samouczka dowiesz się, jak utworzyć i uruchomić konteneryzowaną aplikację internetową w języku Python lokalnie. Ten krok jest opcjonalny i nie jest wymagany do wdrożenia przykładowej aplikacji na platformie Azure.
Uruchamianie obrazu platformy Docker lokalnie w środowisku projektowym wymaga skonfigurowania poza wdrożeniem na platformie Azure. Pomyśl o tym jako inwestycję, która może ułatwić przyszłe cykle programowania, zwłaszcza gdy przejdziesz poza przykładowe aplikacje i zaczniesz tworzyć własne aplikacje internetowe. Aby wdrożyć przykładowe aplikacje dla platform Django i Flask, możesz pominąć ten krok i przejść do następnego kroku w tym samouczku. Zawsze możesz wrócić po wdrożeniu na platformie Azure i wykonać te kroki.
Poniższy diagram usługi przedstawia składniki omówione w tym artykule.
Wybierz pozycję Kod, a następnie wybierz pozycję Pobierz plik ZIP.
Rozpakuj plik ZIP do folderu, a następnie otwórz okno terminalu w tym folderze.
2. Kompilowanie obrazu platformy Docker
Jeśli używasz jednej z przykładowych aplikacji platformy dostępnych dla platform Django i Flask, możesz przejść. Jeśli pracujesz z własną przykładową aplikacją, zobacz, jak skonfigurować przykładowe aplikacje, w szczególności plik Dockerfile w katalogu głównym.
Te instrukcje wymagają programu Visual Studio Code i rozszerzenia platformy Docker. Przejdź do folderu przykładowego sklonowanego lub pobranego i otwórz program VS Code za pomocą polecenia code ..
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.
Instrukcje
Zrzut ekranu
Otwórz rozszerzenie platformy Docker.
Jeśli rozszerzenie platformy Docker zgłasza błąd "Nie można nawiązać połączenia", upewnij się, że platforma Docker jest zainstalowana i uruchomiona. Jeśli po raz pierwszy pracujesz z platformą Docker, prawdopodobnie nie będziesz mieć żadnych kontenerów, obrazów ani połączonych rejestrów.
Skompiluj obraz.
W Eksploratorze projektów przedstawiającym pliki projektu kliknij prawym przyciskiem myszy plik Dockerfile i wybierz polecenie Skompiluj obraz....
Alternatywnie możesz użyć palety poleceń (F1 lub Ctrl+Shift+P) i wpisać "Obrazy platformy Docker: Tworzenie obrazów", aby wywołać polecenie .
Aby uzyskać więcej informacji na temat składni pliku Dockerfile, zobacz dokumentację pliku Dockerfile.
Upewnij się, że obraz został skompilowany.
Przejdź do sekcji IMAGES rozszerzenia platformy Docker.
Poszukaj niedawno utworzonego obrazu. Nazwa obrazu kontenera to "msdocspythoncontainerwebapp", która jest ustawiona w pliku .vscode/tasks.json .
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.
Zacznij od katalogu głównego sklonowanej lub pobranej przykładowej aplikacji.
Krok 1. Po wyświetleniu monitu powłoki upewnij się, że platforma Docker jest dostępna.
docker
Jeśli po uruchomieniu tego polecenia zobaczysz pomoc dotyczącą interfejsu wiersza polecenia platformy Docker, a następnie kontynuuj. W przeciwnym razie upewnij się, że platforma Docker jest zainstalowana lub powłoka ma dostęp do interfejsu wiersza polecenia platformy Docker.
Krok 2. Skompiluj obraz.
Ogólną formą polecenia kompilacji platformy Docker 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 na przykład jesteś w katalogu głównym katalogu projektu, możesz użyć polecenia w następujący sposób, aby utworzyć obraz:
Zanotuj kropkę (".") na końcu polecenia odwołującego się do bieżącego bezpośrednio, w którym jest uruchamiane polecenie. Możesz dodać --no-cache polecenie , aby wymusić ponowną kompilację.
Krok 3. Upewnij się, że obraz został skompilowany.
Użyj polecenia docker images, aby zwrócić listę obrazów.
docker images
Wśród innych cech obrazu powinny zostać wyświetlone obrazy wymienione według nazwy repozytorium, tagu i daty UTWORZENIA.
W tym momencie utworzono obraz lokalnie. Utworzony obraz ma nazwę "msdocspythoncontainerwebapp" i tag "latest". Tagi to sposób definiowania informacji o wersji, zamierzonego użycia, stabilności lub innych informacji. Aby uzyskać więcej informacji, zobacz Rekomendacje na potrzeby tagowania i przechowywania wersji obrazów kontenerów.
Na potrzeby tego samouczka potrzebna jest baza danych MongoDB o nazwie restaurants_reviews i kolekcja o nazwie restaurants_reviews. W krokach w tej sekcji pokazano, jak utworzyć bazę danych i kolekcję przy użyciu lokalnej instalacji bazy danych MongoDB lub usługi Azure Cosmos DB dla bazy danych MongoDB .
Ważne
Nie używaj bazy danych MongoDB, której będziesz używać w środowisku produkcyjnym. W tym samouczku zapiszesz parametry połączenia bazy danych MongoDB w zmiennej środowiskowej. Dzięki temu każda osoba może sprawdzić kontener (na przykład przy użyciu metody docker inspect).
Alternatywą w niektórych instalacjach jest bezpośrednie wywołanie demona Mongo.
mongod --version
Krok 2. Edytowanie pliku mongod.cfg w celu dodania adresu IP komputera.
Plik konfiguracji mongod ma bindIp klucz, który definiuje nazwy hostów i adresy IP, na których baza MongoDB nasłuchuje połączeń klienta. Dodaj bieżący adres IP lokalnego komputera programistycznego. Przykładowa aplikacja uruchomiona lokalnie w kontenerze platformy Docker komunikuje się z maszyną hosta przy użyciu tego adresu.
Na przykład część pliku konfiguracji powinna wyglądać następująco:
Uruchom ponownie bazę danych MongoDB, aby pobrać zmiany w pliku konfiguracji.
Krok 3. Tworzenie bazy danych i kolekcji w lokalnej bazie danych MongoDB.
Ustaw nazwę bazy danych na "restaurants_reviews" i nazwę kolekcji na "restaurants_reviews". Bazę danych i kolekcję można utworzyć za pomocą rozszerzenia MongoDB programu VS Code, powłoki MongoDB (mongosh) lub dowolnego innego narzędzia obsługującego bazę danych MondoDB.
W przypadku powłoki bazy danych MongoDB poniżej przedstawiono przykładowe polecenia służące do tworzenia bazy danych i kolekcji:
> help
> use restaurants_reviews
> db.restaurants_reviews.insertOne({})
> show dbs
> exit
W tym momencie lokalna parametry połączenia mongoDB to "mongodb://127.0.0.1:27017/", nazwa bazy danych to "restaurants_reviews", a nazwa kolekcji to "restaurants_reviews".
Polecenia interfejsu wiersza polecenia platformy Azure umożliwiają utworzenie konta usługi Azure Cosmos DB dla bazy danych MongoDB, a następnie utworzenie wymaganej bazy danych i kolekcji na potrzeby tego samouczka. Jeśli wcześniej nie używasz 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.
Przed uruchomieniem następującego skryptu zastąp lokalizację i nazwę konta usługi Azure Cosmos DB dla bazy danych MongoDB odpowiednimi wartościami. Możesz użyć nazwy grupy zasobów określonej w skrycie lub zmienić ją. Tak czy inaczej zalecamy użycie tej samej grupy zasobów dla wszystkich zasobów platformy Azure utworzonych w różnych artykułach tego samouczka. Ułatwia to ich usuwanie po zakończeniu pracy z samouczkiem. Jeśli przybyłeś tutaj z części 4. Wdróż usługę App Service kontenera, użyj nazwy grupy zasobów i lokalizacji, której już używasz dla zasobów.
Skrypt zakłada, że używasz powłoki Bash. Jeśli chcesz użyć innej powłoki, musisz zmienić deklarację zmiennej i składnię podstawienia. Uruchomienie skryptu może potrwać kilka 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 restaraunts_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 ciąg podstawowej bazy danych MongoDB Połączenie ion z danych wyjściowych ostatniego polecenia.
W tym momencie należy mieć parametry połączenia formularza mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>usługi Azure Cosmos DB dla bazy danych MongoDB o nazwie i kolekcji o nazwie restaurants_reviewsrestaurants_reviews.
W rozszerzeniu VS Code Azure Databases możesz kliknąć prawym przyciskiem myszy serwer MongoDB i pobrać parametry połączenia.
4. Uruchamianie obrazu lokalnie w kontenerze
Dzięki informacjom na temat nawiązywania połączenia z bazą danych MongoDB możesz uruchomić kontener lokalnie. Przykładowa aplikacja oczekuje przekazania informacji o połączeniu z bazą danych MongoDB w zmiennych środowiskowych. 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 na platformie Azure aplikacja internetowa będzie 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.
W folderze .vscode przykładowej aplikacji plik settings.json definiuje, co się stanie, gdy używasz rozszerzenia platformy Docker, a następnie wybierz polecenie Uruchom lub Uruchom interakcyjne z menu kontekstowego tagu. Plik settings.json zawiera dwa szablony dla scenariuszy (MongoDB local) i (MongoDB Azure) .
Jeśli używasz lokalnej bazy danych MongoDB:
Zastąp oba wystąpienia <YOUR_IP_ADDRESS> adresem IP.
Zastąp oba wystąpienia <CONNECTION_STRING> parametry połączenia dla bazy danych MongoDB.
Jeśli używasz bazy danych Usługi Azure Cosmos DB dla bazy danych MongoDB:
Zastąp oba wystąpienia usługą <CONNECTION_STRING> Azure Cosmos DB for MongoDB parametry połączenia.
docker.dockerPath Ustaw ustawienie konfiguracji używane przez szablony. Aby ustawić docker.dockerPath, otwórz paletę poleceń programu VS Code (Ctrl+Shift+P), wprowadź ciąg "Preferencje: Otwórz Ustawienia obszaru roboczego", a następnie wprowadź ciąg "docker.dockerPath" w polu Ustawienia wyszukiwania. Wprowadź wartość "docker" (bez cudzysłowów).
Uwaga
Przyjmuje się, że zarówno nazwa bazy danych, jak i nazwa kolekcji to restaurants_reviews.
Uruchom obraz.
W sekcji IMAGES rozszerzenia platformy Docker znajdź utworzony obraz.
Rozwiń obraz, aby znaleźć najnowszy tag, kliknij prawym przyciskiem myszy i wybierz polecenie Uruchom interakcyjne.
Zostanie wyświetlony monit o wybranie zadania odpowiedniego dla danego scenariusza : "Interaktywna konfiguracja uruchamiania (lokalna baza danych MongoDB)" lub "Interaktywna konfiguracja uruchamiania (MongoDB Azure)".
Po uruchomieniu interaktywnym zobaczysz wszystkie instrukcje drukowania w kodzie, które mogą być przydatne do debugowania. Możesz również wybrać pozycję Uruchom , która nie jest interaktywna i nie przechowuje standardowych danych wejściowych.
Ważne
Ten krok kończy się niepowodzeniem, jeśli domyślny profil terminalu jest ustawiony na wiersz polecenia (Windows). Aby zmienić profil domyślny, otwórz paletę poleceń programu VS Code (Ctrl+Shift+P), wprowadź ciąg "Terminal: wybierz profil domyślny", a następnie wybierz inny profil z menu rozwijanego, na przykład Git Bash lub PowerShell.
Upewnij się, że kontener jest uruchomiony.
W sekcji KONTENERY rozszerzenia platformy Docker znajdź kontener.
Rozwiń węzeł Pojedyncze kontenery i upewnij się, że aplikacja "msdocspythoncontainerwebapp" jest uruchomiona. Jeśli jest uruchomiony, obok nazwy kontenera powinien zostać wyświetlony zielony symbol trójkąta.
Przetestuj aplikację internetową, klikając prawym przyciskiem myszy nazwę kontenera i wybierając polecenie Otwórz w przeglądarce.
Przeglądarka zostanie otwarta w domyślnej przeglądarce jako "http://127.0.0.1:8000" dla Django lub "http://127.0.0.1:5000/" dla platformy Flask.
Zatrzymaj kontener.
W sekcji CONTAINERS rozszerzenia platformy Docker znajdź uruchomiony kontener.
Kliknij prawym przyciskiem myszy kontener i wybierz polecenie Zatrzymaj.
Napiwek
Możesz również uruchomić kontener, wybierając konfigurację przebiegu lub debugowania. Zadania rozszerzenia platformy Docker w pliku tasks.json są wywoływane podczas uruchamiania lub debugowania. Zadanie o nazwie zależy od wybranej konfiguracji uruchamiania. W przypadku zadania "Docker: Python (mongoDB local)" określ <YOUR-IP-ADDRESS>. W przypadku zadania "Docker: Python (MongoDB Azure)" określ <parametry> POŁĄCZENIA.
# 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
Powyższe polecenie jest sformatowane dla powłoki Bash. Jeśli używasz programu PowerShell, wiersza polecenia lub innej powłoki, może być konieczne odpowiednie dostosowanie formatu kontynuacji wiersza i zmiennej środowiskowej.
# 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
Powyższe polecenie jest sformatowane dla powłoki Bash. Jeśli używasz programu PowerShell, wiersza polecenia lub innej powłoki, może być konieczne odpowiednie dostosowanie formatu kontynuacji wiersza i zmiennej środowiskowej.
Przekazywanie poufnych informacji, jak pokazano poniżej, służy do celów demonstracyjnych. Informacje o parametry połączenia można wyświetlić, sprawdzając kontener za pomocą polecenia docker container inspect. Innym sposobem obsługi wpisów tajnych jest użycie funkcji BuildKit platformy Docker.
Krok 2. Upewnij się, że kontener jest uruchomiony.
Otwórz drugą powłokę i uruchom polecenie ls kontenera platformy Docker.
docker container ls
Na liście powinien zostać wyświetlony kontener "msdocspythoncontainerwebapp:latest:latest". Zanotuj kolumnę NAMES danych wyjściowych i kolumnę PORTS . Możesz użyć nazwy , aby zatrzymać kontener.
Krok 3. Przetestuj aplikację internetową.
Przejdź do "http://127.0.0.1:8000" dla Django i "http://127.0.0.1:5000/" dla platformy Flask podczas uruchamiania z lokalną bazą danych MongoDB.