Udostępnij za pomocą


Kompilowanie i uruchamianie konteneryzowanej aplikacji internetowej w języku Python lokalnie

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.

Zrzut ekranu przedstawiający samouczek — konteneryzowaną aplikację python na platformie Azure z wyróżnioną częścią lokalną.

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.

  1. Sklonuj repozytorium Django lub Flask do folderu lokalnego przy użyciu jednego z następujących poleceń:

    # Django
    git clone https://github.com/Azure-Samples/msdocs-python-django-container-web-app.git
    
  2. Przejdź do katalogu głównego sklonowanego repozytorium.

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

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.

  1. Upewnij się, że platforma Docker jest dostępna, uruchamiając następujące polecenie w folderze głównym przykładowej aplikacji.

    docker
    

    Jeś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.

  2. 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" \
        .
    
  3. Upewnij się, że obraz został pomyślnie skompilowany przy użyciu polecenia Obrazy platformy Docker .

    docker images
    

    Polecenie 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.

  1. 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.

      mongosh
      

      Wskazó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
      
  2. Zmodyfikuj plik mongod.cfg w \MongoDB\Server\8.0\bin folderze i dodaj lokalny adres IP komputera do bindIP klucza.

    Klucz bindip w 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>
    
  3. Zapisz zmiany w tym pliku konfiguracji.

    Ważne

    Aby zapisać zmiany wprowadzone w tym pliku konfiguracji, potrzebne są uprawnienia administracyjne.

  4. Uruchom ponownie bazę danych MongoDB, aby pobrać zmiany w pliku konfiguracji.

  5. 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.

  1. 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:latest
    
  2. Upewnij się, że kontener jest uruchomiony. W innym oknie konsoli uruchom polecenie docker container ls.

    docker container ls
    

    Zobacz swój kontener "msdocspythoncontainerwebapp:latest:latest" na liście kontenerów. Zwróć uwagę na kolumnę NAMES danych wyjściowych i kolumnę PORTS . Użyj nazwy kontenera, aby zatrzymać kontener.

  3. Przetestuj aplikację internetową.

    Przejdź do "http://127.0.0.1:8000" dla Django i "http://127.0.0.1:5000/" dla Flask.

  4. 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.

  1. 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:latest
    

    Przekazywanie 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.

  2. Otwórz nowe okno konsoli, uruchom następujące polecenie ls kontenera platformy Docker , aby potwierdzić, że kontener jest uruchomiony.

    docker container ls
    

    Zobacz swój kontener "msdocspythoncontainerwebapp:latest:latest" na liście kontenerów. Zwróć uwagę na kolumnę NAMES danych wyjściowych i kolumnę PORTS . Użyj nazwy kontenera, aby zatrzymać kontener.

  3. Przetestuj aplikację internetową.

    Przejdź do "http://127.0.0.1:8000" dla Django i "http://127.0.0.1:5000/" dla Flask.

  4. Zamknij kontener.

    docker container stop <container-name>
    

Kontener można również uruchomić z obrazu i zatrzymać go za pomocą aplikacji docker Desktop .

Następny krok