Come distribuire un’applicazione API Python Flask su Docker

Se sei nuovo in Docker e nei container, imparare a distribuire un’applicazione API Python Flask su Docker è un ottimo punto di partenza. Docker ti permette di containerizzare applicazioni con tecnologia leggera e sicurezza per una distribuzione rapida delle applicazioni.

In questo tutorial, imparerai a diventare il tuo padrone nell’impostare e distribuire applicazioni API Python Flask su contenitori Docker.

Preparati e inizia a distribuire!

Prerequisiti

Se desideri seguire passo dopo passo, avrai bisogno dell’installazione dei seguenti componenti:

  • Macchina Ubuntu con Docker installato. Questo tutorial utilizza Ubuntu 18.04.5 LTS con Docker v19.03.8.
  • Python v3.9 o successivo installato sulla macchina Ubuntu. Questo tutorial utilizzerà Python v3.9.2 su una macchina Ubuntu.
  • Pacchetto Elinks installato sulla macchina Ubuntu utilizzato per testare l’API in questo tutorial.

Creazione di un’applicazione API Python Flask (API GET e POST)

Inizia questo tutorial creando un’applicazione Python Flask. Flask è un leggero framework di applicazioni web micro WSGI scritto in Python. Flask fornisce strumenti utili e funzionalità per la creazione di applicazioni web in Python.

Prima di creare un’applicazione Python Flask, installerai Python Flask e l’ambiente virtuale Python dove Flask eseguirà un’applicazione.

1. Accedi alla tua macchina Ubuntu utilizzando il tuo client SSH preferito.

2. Successivamente, esegui i seguenti comandi per creare una directory chiamata ~/docker_python_flask_demo e passa a quella. Questa directory conterrà tutti i file richiesti da Python e Docker per eseguire un’applicazione.

mkdir ~/docker_python_flask_demo
cd ~/docker_python_flask_demo

3. Esegui il comando pip di seguito per installare un ambiente virtuale Python (virtualenv) necessario per Flask per eseguire le applicazioni. Un ambiente virtuale Python offre il proprio binario Python e pacchetti installati per applicazione per evitare conflitti con altre applicazioni.

pip install virtualenv
Installing the environment needed by Flask to execute the applications

4. Esegui il comando virtualenv sottostante per creare e attivare un ambiente virtuale utilizzando il modulo venv.

virtualenv venv
Creating the virtual environment for Python

5. Ora, esegui il comando sottostante per installare il pacchetto Python flask con il gestore di pacchetti pip.

pip install flask

6. Esegui il seguente comando per attivare i pacchetti nel tuo ambiente virtuale prima di poter iniziare a installarli o utilizzarli. Questo modifica la variabile d’ambiente VIRTUAL_ENV per puntare al tuo ambiente virtuale e premette il binario Python dell’ambiente virtuale al percorso in modo da eseguire il binario corretto.

source venv/bin/activate

7. Crea un altro file chiamato requirements.txt e definisci la dipendenza dell’applicazione Flask, come mostrato di seguito.

Flask==2.0.2

8. Crea un file di testo ~/docker_python_flask_demo/app.py e popolalo con il codice Python riportato di seguito.

Il codice Python sottostante importa la classe flask di Python e crea un’istanza della classe chiamata app. L’istanza della classe app contiene due funzioni login() eseguite quando gli utenti inviano richieste sulla pagina /login.

La funzione success() viene quindi eseguita, mostrando il messaggio di benvenuto “nome-dell’utente” sul browser.


from flask import Flask , redirect , url_for , request # Importazione della classe flask
# app è l'oggetto o l'istanza di Flask
app = Flask(__name__)
# app.route informa Flask sull'URL da utilizzare per la funzione
@app.route('/success/<name>')
# Creazione di una funzione chiamata success
def success(name):
    return 'welcome %s' % name

@app.route('/login', methods = ['GET','POST'])
# Creazione di una funzione chiamata login 
def login():
    if request.method == 'POST':
       user = request.form['adamlistek']
       return redirect(url_for('success', name = user)) 
    else:
       return "INVALID"
# I programmi si eseguono da qui in un server di sviluppo (localmente sul tuo sistema) 
# con il debug abilitato. 
  
if __name__ == '__main__':
   app.run(debug = True)

9. Crea un altro file chiamato ~/docker_python_flask_demo/form.html e copia/incolla il codice qui sotto.

Eseguendo il codice HTML qui sotto si crea un modulo con due input; uno è per inserire il tuo nome e l’altro è un pulsante di invio.

Appena inserisci un nome utente e premi il pulsante di invio, viene inviata una richiesta post e Flask esegue un’altra funzione e apre una nuova pagina web su http://localhost:5000/success/<username>.

<html>
  <body>
    <form action="http://localhost:5000/login" method="post">
      <p>Please Enter your name</p>
      <p><input type="text" name="adamlistek" /></p>
      <p><input type="submit" value="Submit" /></p>
    </form>
  </body>
</html>

10. Infine, esegui il comando Python qui sotto per verificare che l’applicazione (app.py) funzioni localmente sul tuo sistema.

Python app.py

Come puoi vedere di seguito, l’applicazione è in esecuzione correttamente sulla macchina Ubuntu ma non su Docker. Avvierai la stessa applicazione su Docker nelle sezioni seguenti.

Running the Python application on the ubuntu machine.

Creazione di un Dockerfile per Distribuire l’Applicazione API Python Flask

Hai appena creato e verificato che l’applicazione Python Flask funzioni localmente sulla tua macchina. Ma prima di distribuire l’applicazione su Docker, creerai prima un Dockerfile per definire tutti i set di istruzioni per la creazione dell’immagine Docker.

Crea un file chiamato Dockerfile nella directory ~/docker_python_flask_demo e copia/incolla il contenuto sottostante nel Dockerfile.

Docker utilizzerà questo Dockerfile per eseguire tutte le istruzioni o comandi necessari per creare una nuova immagine Docker sopra l’immagine di base (ubuntu:18.04).

# Imposta l'immagine di base per le istruzioni successive
FROM ubuntu:18.04
# Imposta la directory di lavoro nel container
WORKDIR /app
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev
# Copia i file nella directory di lavoro
COPY form.html /app/form.html
# Copia i file di dipendenza nella directory di lavoro
COPY requirements.txt /app/requirements.txt
# Installa le dipendenze
RUN pip install -r requirements.txt
# Copia tutto nella directory di lavoro
COPY . /app
# Comando da eseguire all'avvio del container
CMD [ "python" , "./app.py" ]

Ora, esegui il comando tree di seguito per verificare che tutti i file necessari per eseguire l’applicazione Python Flask siano contenuti nella directory di lavoro (~/docker_python_flask_demo).

tree  
Verifying all Required Files to Run the Flask Application Exist

Creazione di un’immagine Docker per l’applicazione API Python Flask

Ora hai i file necessari per distribuire un’applicazione Python Flask, ma quei file non faranno nulla a meno che non crei un’immagine. Eseguirai il comando docker build per creare un’immagine Docker basata sulle istruzioni che hai impostato nel Dockerfile.

Esegui il comando docker build qui sotto per creare un’immagine Docker nella directory di lavoro (.). Questo comando etichetta (-t) l’immagine come flask-image versione 1 (:v1).

sudo docker build -t flask-image:v1 .
Building the Docker Image

Ora, esegui il comando docker qui sotto per elencare tutte le immagini disponibili.

sudo docker images

In basso, puoi vedere vari attributi restituiti, come REPOSITORY. Nota che il nome del REPOSITORY è flask-image e ha un’etichetta con una versione (v1), come mostrato di seguito.

Verifying the New Docker Image (flask-image)

Esecuzione dell’applicazione Python Flask in un contenitore Docker

Dopo aver creato un’immagine Docker, puoi ora eseguire l’applicazione flash Python in un contenitore Docker. Un contenitore Docker raggruppa il codice e le sue dipendenze per eseguire rapidamente le applicazioni.

1. Esegui il comando docker run qui sotto per eseguire le seguenti operazioni:

  • Avvia il contenitore in modalità distaccata (-d), in modo che venga eseguito come processo in background e restituisca l’output della console alla creazione.
  • Mappa la porta host Docker (-p 5000:5000) con la porta del contenitore.
  • Avvia il contenitore Docker (flask-image:v1)
sudo docker run -d -p 5000:5000 flask-image:v1

2. Successivamente, esegui il comando docker di seguito per elencare tutti i contenitori nell’engine Docker. Verifica se Docker ha creato con successo il contenitore.

sudo docker ps -a
Verifying the Docker container in the Docker engine

3. Infine, esegui il comando di seguito per aprire il tuo browser web nella macchina Ubuntu usando elinks.

elinks form.html

Il comando apre il browser web nel terminale e chiede un nome, come mostrato di seguito.

Inserisci il tuo nome e premi il pulsante Invia.

Accessing the login web page with the form to enter your name

4. Come puoi vedere di seguito, dopo aver premuto il pulsante Invia, la funzione di accesso si redireziona alla funzione di successo nell’applicazione Flask.

Displaying the welcome message in the web browser

Conclusione

Questo tutorial mirava ad aiutarti nel processo di configurazione di un contenitore Docker API Python Flask utilizzando immagini Docker. Hai anche toccato come avviare contenitori Python Flask utilizzando i Dockerfile, il che ti consente di modificare e creare contenitori personalizzati a tua scelta.

Quale altre applicazioni hai in mente di distribuire su un contenitore Docker? Forse un contenitore Docker MongoDB?

Source:
https://adamtheautomator.com/python-flask-api/