Hoe een Python Flask API-toepassing implementeren op Docker

Als je nieuw bent met Docker en containers, is het leren implementeren van een Python Flask API-applicatie op Docker een geweldige manier om te beginnen. Docker stelt je in staat om applicaties te containeriseren met lichtgewicht technologie en beveiliging voor snelle implementatie van de applicatie.

In deze tutorial leer je om je eigen meester te worden in het opzetten en implementeren van Python Flask API-applicaties op Docker-containers.

Maak je klaar en begin met implementeren!

Vereisten

Als je stap voor stap wilt volgen, moet je het volgende geïnstalleerd hebben:

  • Een Ubuntu-machine met Docker geïnstalleerd. Deze tutorial maakt gebruik van Ubuntu 18.04.5 LTS met Docker v19.03.8.
  • Python v3.9 of later geïnstalleerd op de Ubuntu-machine. Deze tutorial zal Python v3.9.2 gebruiken op een Ubuntu-machine.
  • Elinks-pakket geïnstalleerd op de Ubuntu-machine die wordt gebruikt om de API in deze tutorial te testen.

Het creëren van een Python Flask API-toepassing (GET- en POST-API)

Start deze tutorial door een Python Flask-toepassing te maken. Flask is een lichtgewicht micro web applicatiekader geschreven in Python, dat werkt als een WSGI. Flask biedt handige tools en functies voor het maken van webapplicaties in Python.

Voordat je een Python Flask-toepassing maakt, installeer je een Python Flask en een Python virtuele omgeving waarin Flask de toepassing zal uitvoeren.

1. Log in op je Ubuntu-machine met je favoriete SSH-client.

2. Voer vervolgens de volgende commando’s uit om een map met de naam ~/docker_python_flask_demo te maken en daarnaar te schakelen. Deze map bevat alle bestanden die nodig zijn om een toepassing uit te voeren met Python en Docker.

mkdir ~/docker_python_flask_demo
cd ~/docker_python_flask_demo

3. Voer het pip-commando hieronder uit om een Python virtuele omgeving (virtualenv) te installeren, die nodig is voor Flask om de toepassingen uit te voeren. Een Python virtuele omgeving biedt zijn eigen Python-binair en per-toepassing geïnstalleerde pakketten om conflicten met andere toepassingen te voorkomen.

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

4. Voer het virtualenv-commando hieronder uit om een virtuele omgeving te creëren en activeren met behulp van de venv-module.

virtualenv venv
Creating the virtual environment for Python

5. Voer nu het onderstaande commando uit om het Python flask-pakket te installeren met de pip-pakketbeheerder.

pip install flask

6. Voer de volgende opdracht uit om pakketten te activeren in je virtuele omgeving voordat je ze installeert of gebruikt. Dit wijzigt de omgevingsvariabele VIRTUAL_ENV zodat deze naar je virtuele omgeving wijst en voegt het Python-binair van de virtuele omgeving toe aan het pad, zodat je het juiste binair kunt uitvoeren.

source venv/bin/activate

7. Maak nog een bestand aan met de naam requirements.txt en definieer de afhankelijkheid van de Flask-toepassing zoals hieronder weergegeven.

Flask==2.0.2

8. Maak een tekstbestand ~/docker_python_flask_demo/app.py aan en vul het bestand met de onderstaande Python-code.

De onderstaande Python-code importeert de Python flask klasse en maakt een instantie van de klasse met de naam app. De instantie van de klasse app bevat twee functies login() die worden uitgevoerd wanneer gebruikers verzoeken sturen naar de pagina /login.

De functie success() wordt vervolgens uitgevoerd en toont de welkomstboodschap “naam-van-de-gebruiker” in de browser.


from flask import Flask , redirect , url_for , request # Het importeren van de klasse flask
# app is het object of de instantie van Flask
app = Flask(__name__)
# app.route informeert Flask over de URL die door de functie moet worden gebruikt
@app.route('/success/<name>')
# Het creëren van een functie genaamd success
def success(name):
    return 'welcome %s' % name

@app.route('/login', methods = ['GET','POST'])
# Het creëren van een functie genaamd login 
def login():
    if request.method == 'POST':
       user = request.form['adamlistek']
       return redirect(url_for('success', name = user)) 
    else:
       return "INVALID"
# Programma wordt hier uitgevoerd op een ontwikkelingsserver (lokaal op je systeem) 
# met ingeschakelde foutopsporing. 
  
if __name__ == '__main__':
   app.run(debug = True)

9. Maak nog een bestand genaamd ~/docker_python_flask_demo/form.html en kopieer/plak de onderstaande code.

Het uitvoeren van de onderstaande HTML-code maakt een formulier met twee invoervelden; een is tekst om je naam op te geven, en de andere is een verzendknop.

Zodra je een gebruikersnaam opgeeft en op de verzendknop drukt, wordt een postverzoek verzonden en voert Flask een andere functie uit en opent een nieuwe webpagina op http://localhost:5000/success/<gebruikersnaam>.

<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. Voer tot slot de Python-opdracht hieronder uit om de toepassing (app.py) lokaal op je systeem te verifiëren.

Python app.py

Zoals je hieronder kunt zien, wordt de toepassing met succes uitgevoerd op de Ubuntu-machine maar niet op Docker. Je zult dezelfde toepassing starten op Docker in de volgende secties.

Running the Python application on the ubuntu machine.

Het maken van een Dockerfile om de Python Flask API-toepassing te implementeren

Je hebt zojuist de Python Flask-toepassing gemaakt en geverifieerd dat deze lokaal op je machine werkt. Maar voordat je de toepassing op Docker implementeert, maak je eerst een Dockerfile om alle sets instructies te definiëren om het Docker-image te bouwen.

Maak een bestand genaamd Dockerfile in de ~/docker_python_flask_demo directory, en kopieer/plak de inhoud hieronder in de Dockerfile.

Docker zal deze Dockerfile gebruiken om alle instructies of commando’s uit te voeren die nodig zijn om een nieuwe Docker-image te bouwen boven op de basisimage (ubuntu:18.04).

# Stelt de basisimage in voor volgende instructies
FROM ubuntu:18.04
# Stelt de werkdirectory in de container in
WORKDIR /app
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev
# Kopieert de bestanden naar de werkdirectory
COPY form.html /app/form.html
# Kopieert de afhankelijkheidsbestanden naar de werkdirectory
COPY requirements.txt /app/requirements.txt
# Installeert afhankelijkheden
RUN pip install -r requirements.txt
# Kopieert alles naar de werkdirectory
COPY . /app
# Commando om uit te voeren bij het starten van de container
CMD [ "python" , "./app.py" ]

Voer nu het tree-commando hieronder uit om te controleren of alle vereiste bestanden om de Python Flask-toepassing uit te voeren, zich bevinden in de werkdirectory (~/docker_python_flask_demo).

tree  
Verifying all Required Files to Run the Flask Application Exist

Het bouwen van een Docker-image voor Python Flask API-toepassing

Je hebt nu de vereiste bestanden om een Python Flask-toepassing te implementeren, maar deze bestanden zullen niets doen tenzij je een image bouwt. Je zult het docker build-commando uitvoeren om een Docker-image te bouwen op basis van de instructies die je hebt ingesteld in de Dockerfile.

Voer de onderstaande docker build-opdracht uit om een Docker-image te bouwen in de werkmap (.). Deze opdracht geeft een tag (-t) aan het image als flask-image versie 1 (:v1).

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

Voer nu de onderstaande docker-opdracht uit om alle beschikbare images weer te geven.

sudo docker images

Hieronder zie je verschillende teruggegeven eigenschappen, zoals REPOSITORY. Let op dat de naam van het REPOSITORY flask-image is en is getagd met een versie (v1), zoals hieronder weergegeven.

Verifying the New Docker Image (flask-image)

Het uitvoeren van de Python Flask-applicatie in een Docker-container

Na het maken van een Docker-image kun je nu de Python Flask-toepassing uitvoeren in een Docker-container. Een Docker-container verpakt code en de bijbehorende afhankelijkheden om toepassingen snel uit te voeren.

1. Voer de onderstaande docker run-opdracht uit om het volgende te doen:

  • Start de container in detaché-modus (-d), zodat deze als een achtergrondproces wordt uitgevoerd en de console-uitvoer retourneert bij creatie.
  • Maakt de poort van de Docker-host (-p 5000:5000) overeen met de poort van de container.
  • Start de Docker-container (flask-image:v1)
sudo docker run -d -p 5000:5000 flask-image:v1

2. Voer vervolgens de docker opdracht hieronder uit om alle containers in de Docker-engine op te sommen. Controleer of Docker de container succesvol heeft aangemaakt.

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

3. Voer tot slot de onderstaande opdracht uit om je webbrowser te openen in de Ubuntu-machine met behulp van elinks.

elinks form.html

De opdracht opent de webbrowser in de terminal en vraagt om een naam, zoals hieronder weergegeven.

Voer je naam in en druk op de knop Verzenden.

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

4. Zoals je hieronder kunt zien, na het indrukken van de Verzenden knop, wordt de inlogfunctie doorgestuurd naar de succesfunctie in de Flask-toepassing.

Displaying the welcome message in the web browser

Conclusie

Deze tutorial had als doel je te begeleiden bij het opzetten van een Python Flask API Docker-container met behulp van Docker-images. Je hebt ook geleerd hoe je Python Flask-containers kunt starten met behulp van Dockerfiles, waarmee je aangepaste containers naar wens kunt bewerken en bouwen.

Dus, welke andere toepassingen heb je in gedachten om in een Docker-container te implementeren? Misschien een Docker MongoDB-container?

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