Compilare ed eseguire un'app Web Python in contenitori in locale con MongoDB

Questo articolo fa parte di un'esercitazione su come inserire e distribuire un'app Web Python in contenitori in app Azure Servizio. servizio app consente di eseguire app Web in contenitori e di distribuire tramite funzionalità di integrazione continua/distribuzione continua (CI/CD) con Docker Hub, Registro Azure Container e Visual Studio Team Services. In questa parte dell'esercitazione si apprenderà come compilare ed eseguire l'app Web Python in contenitori in locale. Questo passaggio è facoltativo e non è necessario distribuire l'app di esempio in Azure.

L'esecuzione di un'immagine Docker in locale nell'ambiente di sviluppo richiede la configurazione oltre la distribuzione in Azure. Si consideri un investimento che può semplificare i cicli di sviluppo futuri, soprattutto quando si passa oltre le app di esempio e si inizia a creare app Web personalizzate. Per distribuire le app di esempio per Django e Flask, è possibile ignorare questo passaggio e passare al passaggio successivo di questa esercitazione. È sempre possibile tornare dopo la distribuzione in Azure e seguire questa procedura.

Il diagramma dei servizi seguente illustra i componenti trattati in questo articolo.

A screenshot of the Tutorial - Containerized Python App on Azure with local part highlighted.

1. Clonare o scaricare l'app di esempio

Clonare il repository:

# 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

Quindi passare a tale cartella:

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

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

2. Creare un'immagine Docker

Se si usa una delle app di esempio del framework disponibili per Django e Flask, è possibile procedere. Se si usa la propria app di esempio, vedere come vengono configurate le app di esempio, in particolare il Dockerfile nella directory radice.

Queste istruzioni richiedono Visual Studio Code e l'estensione Docker. Passare alla cartella di esempio clonata o scaricata e aprire VS Code con il comando code ..

Nota

I passaggi descritti in questa sezione richiedono l'esecuzione del daemon Docker. In alcune installazioni, ad esempio in Windows, è necessario aprire Docker Desktop, che avvia il daemon, prima di procedere.

Istruzioni Schermata
Aprire l'estensione Docker.

Se l'estensione Docker segnala un errore "Failed to connect", assicurarsi che Docker sia installato ed eseguito. Se questa è la prima volta che si lavora con Docker, è probabile che non siano presenti contenitori, immagini o registri connessi.
A screenshot showing how to open the Docker extension in Visual Studio Code.
Compilare l'immagine.
  • In Esplora progetti che mostra i file di progetto fare clic con il pulsante destro del mouse sul Dockerfile e scegliere Compila immagine....

  • In alternativa, è possibile usare il riquadro comandi (F1 o CTRL+MAIUSC+P) e digitare "Docker Images: Build Images" per richiamare il comando.

Per altre informazioni sulla sintassi dockerfile, vedere le informazioni di riferimento sul Dockerfile.
A screenshot showing how to build the Docker image in Visual Studio Code.
Verificare che l'immagine sia stata compilata.
  • Passare alla sezione IMAGES dell'estensione Docker.

  • Cercare l'immagine compilata di recente. Il nome dell'immagine del contenitore è "msdocspythoncontainerwebapp", impostato nel file .vscode/tasks.json .

A screenshot showing how to confirm the built image in Visual Studio Code.

A questo punto, è stata creata un'immagine in locale. L'immagine creata ha il nome "msdocspythoncontainerwebapp" e il tag "latest". I tag sono un modo per definire le informazioni sulla versione, l'uso previsto, la stabilità o altre informazioni. Per altre informazioni, vedere Consigli per l'assegnazione di tag e il controllo delle versioni delle immagini del contenitore.

Le immagini compilate da VS Code o dall'uso diretto dell'interfaccia della riga di comando di Docker possono essere visualizzate anche con l'applicazione Docker Desktop .

3. Configurare MongoDB

Per questa esercitazione è necessario un database MongoDB denominato restaurants_reviews e una raccolta denominata restaurants_reviews. I passaggi descritti in questa sezione illustrano come usare un'installazione locale di MongoDB o Azure Cosmos DB per MongoDB per creare e accedere al database e alla raccolta.

Importante

Non usare un database MongoDB che verrà usato nell'ambiente di produzione. In questa esercitazione si archivieranno i stringa di connessione MongoDB in una variabile di ambiente. Ciò rende osservabile da chiunque sia in grado di ispezionare il contenitore , ad esempio usando docker inspect.

Passaggio 1: Installare MongoDB , se non lo è già.

È possibile verificare l'installazione di MongoDB usando mongoDB Shell (mongosh).

  • Il comando seguente immette la shell e offre la versione del server mongosh e mongoDB installato nel sistema:

    mongosh
    
  • Il comando seguente offre solo la versione del server MongoDB installato nel sistema:

    mongosh --quiet --exec 'db.version()'
    

Se questi comandi non funzionano, potrebbe essere necessario installare in modo esplicito mongosh o connettere mongosh al server MongoDB.

Un'alternativa in alcune installazioni consiste nell'richiamare direttamente il daemon Mongo.

mongod --version

Passaggio 2: Modificare il file mongod.cfg per aggiungere l'indirizzo IP del computer.

Il file di configurazione mongod ha una bindIp chiave che definisce nomi host e indirizzi IP in ascolto delle connessioni client di MongoDB. Aggiungere l'indirizzo IP corrente del computer di sviluppo locale. L'app di esempio in esecuzione in locale in un contenitore Docker comunicherà al computer host con questo indirizzo.

Ad esempio, una parte del file di configurazione dovrebbe essere simile alla seguente:

net:
  port: 27017
  bindIp: 127.0.0.1,<local-ip-address>

Riavviare MongoDB per selezionare le modifiche apportate al file di configurazione.

Passaggio 3: Creare un database e una raccolta nel database MongoDB locale.

Impostare il nome del database su "restaurants_reviews" e il nome della raccolta su "restaurants_reviews". È possibile creare un database e una raccolta con l'estensione MongoDB di VS Code, mongoDB Shell (mongosh) o qualsiasi altro strumento compatibile con MondoDB.

Per la shell MongoDB, ecco i comandi di esempio per creare il database e la raccolta:

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

A questo punto, il stringa di connessione MongoDB locale è "mongodb://127.0.0.1:27017/", il nome del database è "restaurants_reviews" e il nome della raccolta è "restaurants_reviews".

4. Eseguire l'immagine in locale in un contenitore

Con informazioni su come connettersi a mongoDB, è possibile eseguire il contenitore in locale. L'app di esempio prevede che le informazioni di connessione di MongoDB vengano passate nelle variabili di ambiente. Esistono diversi modi per passare le variabili di ambiente al contenitore in locale. Ognuno presenta vantaggi e svantaggi in termini di sicurezza. È consigliabile evitare di controllare eventuali informazioni riservate o di lasciare informazioni riservate nel codice nel contenitore.

Nota

Quando viene distribuita in Azure, l'app Web otterrà informazioni di connessione dai valori dell'ambiente impostati come servizio app impostazioni di configurazione e nessuna delle modifiche per lo scenario dell'ambiente di sviluppo locale si applica.

Istruzioni Schermata
Nella cartella vscode dell'app di esempio il file settings.json definisce cosa accade quando si usa l'estensione Docker e selezionare Esegui o Esegui interattivo dal menu di scelta rapida di un tag. Il file settings.json contiene due modelli ciascuno per gli (MongoDB local) scenari e (MongoDB Azure) .

Se si usa un database MongoDB locale:
  • Sostituire entrambe le istanze di <YOUR_IP_ADDRESS> con l'indirizzo IP.

  • Sostituire entrambe le istanze di <CONNECTION_STRING> con il stringa di connessione per il database MongoDB.

Se si usa un database Azure Cosmos DB per MongoDB:
  • Sostituire entrambe le istanze di <CONNECTION_STRING> con l'stringa di connessione di Azure Cosmos DB per MongoDB.
Impostare l'impostazione docker.dockerPath di configurazione usata dai modelli. Per impostare docker.dockerPath, aprire il riquadro comandi di VS Code (CTRL+MAIUSC+P), immettere "Preferenze: Apri area di lavoro Impostazioni", quindi immettere "docker.dockerPath" nella casella Impostazioni di ricerca. Immettere "docker" (senza le virgolette) per il valore dell'impostazione.

Nota

Si presuppone che sia il nome del database che il nome della raccolta siano restaurants_reviews.

A screenshot showing the settings.json file Visual Studio Code.
Eseguire l'immagine.
  • Nella sezione IMAGES dell'estensione Docker trovare l'immagine compilata.

  • Espandere l'immagine per trovare il tag più recente, fare clic con il pulsante destro del mouse e selezionare Esegui interattivo.

  • Verrà richiesto di selezionare l'attività appropriata per lo scenario, ovvero "Configurazione di esecuzione interattiva (mongoDB locale)" o "Configurazione di esecuzione interattiva (Azure MongoDB)".

Con l'esecuzione interattiva, nel codice verranno visualizzate tutte le istruzioni di stampa, che possono essere utili per il debug. È anche possibile selezionare Esegui che non è interattivo e non mantiene aperto l'input standard.

Importante

Questo passaggio ha esito negativo se il profilo del terminale predefinito è impostato su (Windows) Prompt dei comandi. Per modificare il profilo predefinito, aprire il riquadro comandi di VS Code (CTRL+MAIUSC+P), immettere "Terminale: Seleziona profilo predefinito" e quindi selezionare un profilo diverso dal menu a discesa, ad esempio Git Bash o PowerShell.

A screenshot showing how to run a Docker container in Visual Studio Code.
Verificare che il contenitore sia in esecuzione.
  • Nella sezione CONTENITORi dell'estensione Docker trovare il contenitore.

  • Espandere il nodo Singoli contenitori e verificare che "msdocspythoncontainerwebapp" sia in esecuzione. Se è in esecuzione, verrà visualizzato un simbolo di triangolo verde accanto al nome del contenitore.

A screenshot showing how to confirm a Docker container is running in Visual Studio Code.
Testare l'app Web facendo clic con il pulsante destro del mouse sul nome del contenitore e scegliendo Apri nel browser.

Il browser si aprirà nel browser predefinito come "http://127.0.0.1:8000" per Django o "http://127.0.0.1:5000/" per Flask.
A screenshot showing how to browse the endpoint of a Docker container in Visual Studio Code.
Arrestare il contenitore.
  • Nella sezione CONTENITORi dell'estensione Docker trovare il contenitore in esecuzione.

  • Fare clic con il pulsante destro del mouse sul contenitore e scegliere Arresta.

A screenshot showing how to stop a running Docker container in Visual Studio Code.

Suggerimento

È anche possibile eseguire il contenitore selezionando una configurazione di esecuzione o debug. Le attività di estensione Docker in tasks.json vengono chiamate quando si esegue o si esegue il debug. L'attività chiamata dipende dalla configurazione di avvio selezionata. Per l'attività "Docker: Python (MongoDB locale)", specificare <YOUR-IP-ADDRESS>. Per l'attività "Docker: Python (MongoDB Azure)", specificare <CONNECTION-STRING>.

È anche possibile avviare un contenitore da un'immagine e arrestarlo con l'applicazione Docker Desktop .

Passaggio successivo