Delen via


Lokaal een in een container geplaatste Python-web-app bouwen en uitvoeren

In dit artikel leert u hoe u een in een container geplaatste Django - of Flask Python-web-app bouwt en uitvoert op uw lokale computer. Als u gegevens voor deze app wilt opslaan, kunt u een lokaal MongoDB-exemplaar of Azure Cosmos DB voor MongoDB gebruiken. Dit artikel is deel 2 van een 5-delige reeks zelfstudies. U wordt aangeraden deel 1 te voltooien voordat u aan dit artikel begint.

Hint

De stappen in dit artikel zijn optioneel en zijn niet vereist om de resterende artikelen in deze reeks zelfstudies te voltooien. U kunt altijd terugkeren naar dit artikel nadat u de volgende artikelen in deze reeks hebt voltooid.

In het volgende servicediagram worden de lokale onderdelen beschreven die in dit artikel aan bod komen. In dit artikel leert u ook hoe u Azure Cosmos DB voor MongoDB gebruikt met een lokale Docker-image in plaats van een lokale instantie van MongoDB.

Een schermopname van de zelfstudie : In containers geplaatste Python-app in Azure met een lokaal onderdeel gemarkeerd.

De Python-voorbeeld-app klonen of downloaden

In deze sectie kloont of downloadt u de voorbeeld Python-app die u gebruikt om een Docker-image te bouwen. U kunt kiezen tussen een Django- of Flask Python-web-app. Als u uw eigen Python-web-app hebt, kunt u dat gebruiken. Als u uw eigen Python-web-app gebruikt, moet u ervoor zorgen dat uw app een Dockerfile in de hoofdmap heeft en verbinding kan maken met een MongoDB-database.

Belangrijk

De opdrachten in dit artikel zijn opgemaakt voor Bash-shell. Als u PowerShell, opdrachtprompt of een andere shell gebruikt, moet u mogelijk de indeling voor regelvervolging en omgevingsvariabele dienovereenkomstig aanpassen. Deze en volgende opdrachten gebruiken het regelvervolgteken voor Bash.

  1. Open een bash-shell (zoals Bash op Linux/macOS of Git Bash in Windows) en kloon de Django- of Flask-opslagplaats naar een lokale map met behulp van een van de volgende opdrachten:

    # Django
    git clone https://github.com/Azure-Samples/msdocs-python-django-container-web-app.git
    
    # Flask
    git clone https://github.com/Azure-Samples/msdocs-python-flask-container-web-app.git
    
  2. Navigeer naar de hoofdmap voor de gekloonde opslagplaats.

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

Een Docker-image bouwen

In deze sectie bouwt u een Docker-image voor de Python-web-app met Visual Studio Code of de Azure CLI. De Docker-installatiekopieën bevatten de Python-web-app, de bijbehorende afhankelijkheden en de Python-runtime. De Docker-installatiekopie is gebouwd op basis van een Dockerfile waarmee de inhoud en het gedrag van de installatiekopie worden gedefinieerd. Het Dockerfile bevindt zich in de hoofdmap van de voorbeeld-app die u hebt gekloond of gedownload (of uzelf hebt opgegeven).

Visual Studio Code en de Docker-extensie zijn vereist voor het bouwen van de Docker-installatiekopieën met behulp van Visual Studio Code. Installeer Visual Studio Code en de Docker-extensie voordat u doorgaat. Zodra Visual Studio Code en de Docker-extensie zijn geïnstalleerd, gaat u naar de voorbeeldmap die u hebt gekloond of gedownload en opent u VS Code met de opdracht code ..

Notitie

Voor de stappen in deze sectie moet de Docker-daemon worden uitgevoerd. In sommige installaties, bijvoorbeeld in Windows, moet u Docker Desktop openen om de daemon te starten voordat u doorgaat.

  1. Open in VS Code de Docker-extensie en selecteer vervolgens de Docker-extensie op de activiteitenbalk.

    Een schermopname die laat zien hoe u de Docker-extensie opent in Visual Studio Code.

    Als de Docker-extensie een fout 'Kan geen verbinding maken' meldt, controleert u of Docker is geïnstalleerd en wordt uitgevoerd.

  2. Als u de Docker-installatiekopieën wilt bouwen, klikt u met de rechtermuisknop op de Dockerfile en selecteert u Vervolgens Build Image....

    Zie de dockerfile-verwijzing voor meer informatie over de syntaxis van Dockerfile.

  3. Als u wilt controleren of de installatiekopie is gemaakt, vouwt u de sectie IMAGES van de Docker-extensie uit en zoekt u naar de onlangs gebouwde installatiekopie. De naam van deze containerinstallatiekopie is 'msdocspythoncontainerwebapp' (deze waarde is ingesteld in het bestand .vscode/tasks.json ).

    Een schermopname die laat zien hoe u de ingebouwde installatiekopie in Visual Studio Code kunt bevestigen.

Op dit moment hebt u een lokale Docker-installatiekopie met de naam 'msdocspythoncontainerwebapp' met de tag 'latest'. Tags helpen bij het definiëren van versiedetails, het beoogde gebruik, de stabiliteit en andere relevante informatie. Zie Aanbevelingen voor het taggen en versiebeheer van containerinstallatiekopieën voor meer informatie.

Notitie

Afbeeldingen die zijn gebouwd vanuit VS Code of door de Docker CLI rechtstreeks te gebruiken, kunnen ook worden bekeken met de Docker Desktop-toepassing.

MongoDB instellen

Uw Python-web-app vereist een MongoDB-database met de naam restaurants_reviews en een verzameling met de naam restaurants_reviews zijn vereist voor het opslaan van gegevens. U kunt een lokale installatie van MongoDB of Azure Cosmos DB voor MongoDB gebruiken om de database en verzameling te maken en te openen.

Belangrijk

Gebruik geen MongoDB-database die u in productie gebruikt. In deze zelfstudie slaat u de MongoDB-verbindingsreeks op in een omgevingsvariabele (die kan worden waargenomen door iedereen die uw container kan inspecteren, zoals met behulp van docker inspect).

  1. Installeer MongoDB (als deze nog niet is geïnstalleerd).

    U kunt controleren op de installatie van MongoDB met behulp van de MongoDB-shell (mongosh).> Als de volgende opdrachten niet werken, moet u mogelijk mongosh expliciet installeren of mongosh verbinden met uw MongoDB-server.

    • Gebruik de volgende opdracht om de MongoDB-shell te openen en de versie van zowel de MongoDB-shell als de MongoDB-server op te halen:

      mongosh
      

    Hint

    Als u alleen de versie van de MongoDB-server wilt retourneren die op uw systeem is geïnstalleerd, sluit u de MongoDB-shell en opent u deze opnieuw en gebruikt u de volgende opdracht: mongosh --quiet --exec 'db.version()'

    In sommige setups kunt u de Mongo-daemon ook rechtstreeks aanroepen in uw bash-shell.

    mongod --version
    
  2. Bewerk het bestand mongod.cfg in de \MongoDB\Server\8.0\bin map en voeg het lokale IP-adres van uw computer toe aan de bindIP sleutel.

    De bindip sleutel in het MongoD-configuratiebestand definieert de hostnamen en IP-adressen die MongoDB luistert naar clientverbindingen. Voeg het huidige IP-adres van uw lokale ontwikkelcomputer toe. De Python-voorbeeldweb-app die lokaal in een Docker-container wordt uitgevoerd, communiceert met dit adres naar de hostcomputer.

    Een deel van het configuratiebestand moet er bijvoorbeeld als volgt uitzien:

    net:
      port: 27017
      bindIp: 127.0.0.1,<local-ip-address>
    
  3. Sla uw wijzigingen op in dit configuratiebestand.

    Belangrijk

    U hebt beheerdersbevoegdheden nodig om de wijzigingen die u aanbrengt in dit configuratiebestand op te slaan.

  4. Start MongoDB opnieuw om wijzigingen in het configuratiebestand op te halen.

  5. Open een MongoDB-shell en voer de volgende opdracht uit om de databasenaam in te stellen op 'restaurants_reviews' en de naam van de verzameling op 'restaurants_reviews'. U kunt ook een database en verzameling maken met de VS Code MongoDB-extensie of een ander mongoDB-hulpprogramma.

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

Nadat u de vorige stap hebt voltooid, is de lokale MongoDB-verbindingsreeks 'mongodb://127.0.0.1:27017/', de databasenaam 'restaurants_reviews' en is de verzamelingsnaam 'restaurants_reviews'.

De image lokaal uitvoeren in een container

U bent nu klaar om de Docker-container lokaal uit te voeren. In de voorbeeld-app wordt verwacht dat MongoDB-verbindingsgegevens worden doorgegeven in omgevingsvariabelen. Er zijn verschillende manieren om omgevingsvariabelen lokaal door te geven aan de container. Elk heeft voor- en nadelen in termen van beveiliging. Vermijd het inchecken van gevoelige informatie of het achterlaten van gevoelige informatie in code in de container.

Notitie

Wanneer de web-app wordt geïmplementeerd in Azure, haalt de web-app verbindingsgegevens op uit omgevingswaarden die zijn ingesteld als App Service-configuratie-instellingen en zijn geen van de wijzigingen voor het scenario van de lokale ontwikkelomgeving van toepassing.

  1. In de map .vscode van de voorbeeld-app definieert het settings.json bestand wat er gebeurt wanneer u de Docker-extensie gebruikt en Uitvoereninteractief selecteert in het contextmenu van een tag. Het bestandsettings.json bevat twee sjablonen voor de (MongoDB local) en (MongoDB Azure) scenario's.

    Een schermopname van het settings.json-bestand in Visual Studio Code.

    Als u een lokale MongoDB-database gebruikt:

    • Vervang <YOUR_IP_ADDRESS> in beide gevallen door uw IP-adres.

    • Vervang beide voorbeelden van <CONNECTION_STRING> door de verbindingsreeks voor uw MongoDB-database.

    Als u een Azure Cosmos DB voor MongoDB-database gebruikt:

    • Vervang beide keren <CONNECTION_STRING> door de verbindingsreeks van Azure Cosmos DB voor MongoDB.

    Stel de docker.dockerPath configuratie-instelling in die door de sjablonen wordt gebruikt. Als u dit wilt instellen docker.dockerPath, opent u het opdrachtenpalet van VS Code (Ctrl+Shift+P), voert u 'Voorkeuren: Werkruimte-instellingen openen' in en voert u vervolgens docker.dockerPath in het vak Zoekinstellingen in. Voer docker (zonder aanhalingstekens) in voor de waarde van de instelling.

    Notitie

    Zowel de databasenaam als de verzamelingsnaam wordt verondersteld restaurants_reviews te zijn.

  2. Voer de afbeelding uit.

    1. In de sectie IMAGES van de Docker-extensie vind je de gebouwde image.

    2. Vouw de afbeelding uit om de meest recente tag te vinden, klik met de rechtermuisknop en selecteer Interactief uitvoeren.

    3. U wordt gevraagd om de taak te selecteren die geschikt is voor uw scenario: 'Configuratie van interactieve uitvoering (lokaal MongoDB)' of 'Configuratie van interactieve uitvoering (MongoDB Azure)'.

    Met een interactieve uitvoering ziet u eventuele afdrukinstructies in de code, wat handig kan zijn voor foutopsporing. U kunt ook Uitvoeren selecteren. Dit is niet-interactief en houdt standaardinvoer niet open.

    Een schermopname van het uitvoeren van een Docker-container in Visual Studio Code.

    Belangrijk

    Deze stap mislukt als het standaardterminalprofiel is ingesteld op de opdrachtprompt (Windows). Als u het standaardprofiel wilt wijzigen, opent u het OPDRACHTENpalet van VS Code (Ctrl+Shift+P), voert u 'Terminal: Standaardprofiel selecteren' in en selecteert u vervolgens een ander profiel in de vervolgkeuzelijst, zoals Git Bash of PowerShell.

  3. Controleer of de Docker-container draait.

    1. Zoek de container in de sectie CONTAINERS van de Docker-extensie.

    2. Vouw het knooppunt Afzonderlijke containers uit en controleer of de container msdocspythoncontainerwebapp wordt uitgevoerd. Zoek naar een groen driehoeksymbool naast de containernaam.

    Een schermopname die laat zien hoe u kunt bevestigen dat een Docker-container wordt uitgevoerd in Visual Studio Code.

  4. Test de web-app door met de rechtermuisknop op de containernaam te klikken en Openen in browser te selecteren.

    Een schermopname die laat zien hoe u door het eindpunt van een Docker-container in Visual Studio Code bladert.

    De browser wordt geopend in uw standaardbrowser als "http://127.0.0.1:8000" voor Django of "http://127.0.0.1:5000/" voor Flask.

  5. Stop de container.

    1. Zoek in de sectie CONTAINERS van de Docker-extensie de actieve container.

    2. Klik met de rechtermuisknop op de container en selecteer Stoppen.

    Een schermopname die laat zien hoe u een actieve Docker-container stopt in Visual Studio Code.

Hint

U kunt ook de container uitvoeren die een uitvoerings- of foutopsporingsconfiguratie selecteert. De Docker-extensietaken in tasks.json worden aangeroepen wanneer u uitvoert of debugt. De aangeroepen taak is afhankelijk van de startconfiguratie die u selecteert. Geef <voor de taak Docker: Python (MongoDB local)' UW-IP-ADRES> op. Geef voor de taak "Docker: Python (MongoDB Azure)" de <CONNECTION-STRING> op.

U kunt ook een container starten vanuit een image en stoppen met Docker Desktop-toepassing.

Volgende stap