Développer et déployer des API Python à l'aide de Kubernetes et Docker

image.png

introduction

Docker est l'une des technologies de conteneurisation les plus populaires. C'est un outil facile à utiliser et facile à utiliser pour les développeurs, et il est également fluide et facile à utiliser, ce qui le rend plus populaire que d'autres technologies similaires. Depuis sa première version open source en mars 2013, Docker a attiré l'attention des développeurs et des ingénieurs d'exploitation, et selon Docker Inc., les utilisateurs de Docker ont téléchargé plus de 105 milliards de conteneurs et 5,8 millions de conteneurs sur Docker Hub. Amarré. Le Github du projet compte plus de 32 000 étoiles.

Aujourd'hui, Docker est devenu tellement courant. Plus de 100 000 projets tiers avec cette technologie Il est également vrai qu'il existe une demande croissante de développeurs ayant des compétences en conteneurisation qui utilisent.

Cet article explique d'abord comment utiliser Docker pour conteneuriser votre application, puis comment utiliser Docker Compose pour l'exécuter dans un environnement de développement. Utilisez l'API Python comme application principale.

Dans MetricFire , Peut vous aider à surveiller votre configuration Python. Pour voir comment cela peut vous aider, veuillez réserver une démo [https://www.metricfire.com/demo/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Develop%20and%20Deploy%20a%20Python] % 20API% 20 avec% 20Kubernetes% 20 et% 20Docker) S'il vous plaît.

Configuration de l'environnement de développement

Avant de commencer, nous allons installer certaines exigences. Nous utiliserons l'API Mini Python développée dans Flask. Flask est un framework Python et un excellent choix pour le prototypage rapide d'API, et nos applications sont développées à l'aide de Flask. Si vous êtes nouveau dans Python, voici les étapes pour créer cette API.

Tout d'abord, créez un environnement virtuel Python pour séparer les dépendances du reste des dépendances système. Avant cela, vous avez besoin de PIP, le célèbre gestionnaire de packages Python.

L'installation est très simple. Essayez d'exécuter les deux commandes suivantes.

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

Pour référence, Python 3 doit être installé. Pour vérifier cela, tapez:

​python --version​

Après avoir installé le PIP, utilisez la commande suivante pour installer l'environnement virtuel.

​pip install virtualenv​

Vous pouvez trouver d'autres méthodes d'installation en suivant le guide officiel. Ensuite, créez et activez le projet pour le dossier dans lequel vous souhaitez créer l'environnement virtuel. Il crée également un dossier d'application et un fichier appelé app.py.

mkdir app
cd app
python3 -m venv venv
. venv/bin/activate
mkdir code
cd code
touch app.py

Créez une API simple pour afficher la météo d'une ville particulière. Par exemple, supposons que vous souhaitiez afficher la météo à Londres. Doit être demandé en utilisant l'itinéraire:

/london/uk

Vous devez utiliser PIP pour installer les dépendances Python appelées "flask" et "requests". Nous les utiliserons plus tard:

pip install flask requests​

N'oubliez pas de "figer" les dépendances dans un fichier appelé requirements.txt. Ce fichier sera utilisé ultérieurement pour installer les dépendances d'application dans le conteneur.

pip freeze > requirements.txt​

Le fichier des exigences ressemble à ceci:

certifi==2019.9.11
chardet==3.0.4
Click==7.0
Flask==1.1.1
idna==2.8
itsdangerous==1.1.0
Jinja2==2.10.3
MarkupSafe==1.1.1
requests==2.22.0
urllib3==1.25.7
Werkzeug==0.16.0

Le code initial de l'API est

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'App Works!'

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000)

Pour tester, vous devez exécuter python app.py et accéder à http: //127.0.0.1:5000/. "AppWorks!" S'affiche. Sur la page Web. Assurez-vous de créer un compte sur le même site Web et de générer une clé API car nous utiliserons les données d'openweathermap.org.

Ensuite, nous devons ajouter du code utile à l'API pour afficher les données météorologiques d'une ville particulière.

@app.route('/<string:city>/<string:country>/')
def weather_by_city(country, city):
    url = 'https://samples.openweathermap.org/data/2.5/weather'
    params = dict(
        q=city + "," + country,
        appid= API_KEY,
    )
    response = requests.get(url=url, params=params)
    data = response.json()
    return data

Et tout le code ressemble à ceci:

from flask import Flask
import requests

app = Flask(__name__)

API_KEY = "b6907d289e10d714a6e88b30761fae22"

@app.route('/')
def index():
    return 'App Works!'

@app.route('/<string:city>/<string:country>/')
def weather_by_city(country, city):

    url = 'https://samples.openweathermap.org/data/2.5/weather'
    params = dict(
        q=city + "," + country,
        appid= API_KEY,
    )

    response = requests.get(url=url, params=params)
    data = response.json()
    return data

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000)

127.0.0.1:5000/london/ukにアクセスすると、次のようなJSONが表示されるはずです。

{
  "base": "stations",
  "clouds": {
    "all": 90
  },
  "cod": 200,
  "coord": {
    "lat": 51.51,
    "lon": -0.13
  },
...

La mini API fonctionne. Conteneurisons-le en utilisant Docker.

Créer un conteneur d'application à l'aide de Docker

Créons un conteneur API. La première étape consiste à créer un Dockerfile. Un Dockerfile est un fichier texte descriptif qui contient diverses étapes et instructions que le démon Docker doit suivre pour créer une image. Après avoir créé l'image, vous pouvez exécuter le conteneur.

Dockerfile commence toujours par une instruction FROM.

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /app
COPY requirements.txt /app
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
COPY . /app
EXPOSE 5000
CMD [ "python", "app.py" ]

Dans le fichier ci-dessus, j'ai fait ce qui suit:

  1. Utilisez l'image de base "python: 3"
  2. Réglez PYTHONUNBUFFERED sur 1. La définition de PYTHONUNBUFFERED sur 1 permet aux messages de journal d'être vidés dans un flux sans mise en mémoire tampon.
  3. Créez un dossier / application et définissez-le comme répertoire de travail.
  4. Copiez la configuration requise et utilisez-la pour installer toutes les dépendances.
  5. Copiez tous les fichiers qui composent l'application, le fichier app.py, dans workdir.
  6. Puisque l'application utilise ce port, exposez enfin le port 5000 et lancez la commande python avec app.py comme argument. Cela démarrera l'API au démarrage du conteneur.

Après avoir créé le Dockerfile, vous devez créer le Dockerfile avec le nom de l'image et les balises que vous choisissez. Dans cet exemple, nous utiliserons "météo" comme nom et "v1" comme balise.

docker build -t weather:v1 .

Assurez-vous que vous créez à partir du dossier contenant les fichiers Dockerfile et app.py.

Après avoir créé le conteneur, vous pouvez l'exécuter en utilisant:

docker run -dit --rm -p 5000:5000 --name weather weather:v1

Le conteneur s'exécute en arrière-plan car il utilise l'option -d. Le conteneur s'appelle "météo" (-nom météo). Nous avons également mappé le port hôte 5000 au port de conteneur exposé 5000, de sorte que le port 5000 est également accessible.

Si vous souhaitez voir le conteneur créé, vous pouvez utiliser:

docker ps

Vous devriez voir une sortie qui est très similaire à la sortie suivante.

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                    NAMES
0e659e41d475        weather:v1          "python app.py"     About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp   weather

Vous devriez maintenant pouvoir interroger l'API. Testons en utilisant CURL.

curl http://0.0.0.0:5000/london/uk/

Si la dernière commande doit renvoyer JSON:

{
  "base": "stations",
  "clouds": {
    "all": 90
  },
  "cod": 200,
  "coord": {
    "lat": 51.51,
    "lon": -0.13
...
}

Utilisation de Docker Compose pour le développement

Docker Compose est un Docker Inc pour la définition et l'exécution d'applications Docker multi-conteneurs. Un outil open source développé par. Docker Compose est également un outil destiné à être utilisé dans les environnements de développement. Cela vous permet de recharger automatiquement le conteneur lorsque votre code est mis à jour, sans avoir à redémarrer manuellement le conteneur ou à reconstruire l'image à chaque modification. Sans Compose, il serait frustrant de développer en utilisant uniquement des conteneurs Docker.

La partie implémentation utilise le fichier "docker-compose.yaml".

Il s'agit du fichier "docker-compose.yaml" utilisé par l'API.

version: '3.6'
services:
  weather:
    image: weather:v1
    ports:
      - "5000:5000"
    volumes:
      - .:/app

Dans le fichier ci-dessus, vous pouvez voir que le service "météo" a été configuré pour utiliser l'image "météo: v1". Mappez le port hôte 5000 au port conteneur 5000 et montez le dossier actuel dans le dossier «/ app» à l'intérieur du conteneur.

Vous pouvez également utiliser un Dockerfile au lieu d'une image. J'ai déjà un Dockerfile, je le recommande donc dans ce cas.

version: '3.6'
services:
  weather:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/app

Ensuite, exécutez "docker-compose up" pour démarrer l'exécution du service, ou exécutez "docker-compose up --build" pour générer et ensuite exécuter.

Résumé

Dans cet article, j'ai appris à créer un conteneur Docker pour l'API Mini Python et j'ai utilisé Docker Compose pour créer un environnement de développement. Si vous utilisez un autre langage de programmation tel que Go ou Rails, vous suivez généralement les mêmes étapes, avec quelques différences mineures. MetricFire Free Réservation Veuillez nous contacter si cela convient à votre environnement.

Recommended Posts

Développer et déployer des API Python à l'aide de Kubernetes et Docker
Flux de développement Python avec Poetry, Git et Docker
Développer, exécuter et déployer AWS Lambda à distance à l'aide de lambda-uploader
Essayez d'utiliser Kubernetes Client -Python-
Authentification à l'aide de l'authentification des utilisateurs tweepy et de l'authentification d'application (Python)
Clustering et visualisation à l'aide de Python et CytoScape
Créez et essayez un environnement OpenCV et Python en quelques minutes à l'aide de Docker
De Python à l'utilisation de MeCab (et CaboCha)
Utilisation de venv dans un environnement Windows + Docker [Python]
Derrière le flyer: utiliser Docker avec Python
Utilisation de Python et MeCab avec Azure Databricks
[FX] Hit oanda-API avec Python en utilisant Docker
Développement de slack bot avec python en utilisant chat.postMessage
J'utilise tox et Python 3.3 avec Travis-CI
J'ai essayé de mettre à jour le calendrier Google avec des rendez-vous CSV à l'aide de Python et de l'API Google
Trois choses auxquelles j'étais accro lors de l'utilisation de Python et MySQL avec Docker
Estimation de l'orientation de la tête avec Python et OpenCV + dlib
J'ai essayé le web scraping en utilisant python et sélénium
Remarques sur l'installation de Python3 et l'utilisation de pip sous Windows7
J'ai essayé la détection d'objets en utilisant Python et OpenCV
Créer une carte Web en utilisant Python et GDAL
[Python3] Génération automatique de texte avec janome et markovify
Essayez d'utiliser tensorflow ① Créez un environnement python et introduisez tensorflow
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Commencez à utiliser Python
python chez docker
Scraping à l'aide de Python
Paramètres initiaux pour l'utilisation de Python3.8 et pip sur CentOS8
Recherche de balises pixiv et enregistrement d'illustrations à l'aide de Python
Squelettes extensibles pour Vim utilisant Python, Click et Jinja2
Essayez de créer un fichier compressé en utilisant Python et zlib
Agréger les journaux Git à l'aide de Git Python et analyser les associations à l'aide d'Orange
Création d'un environnement de travail Docker R et Python
(Python) Essayez de développer une application Web en utilisant Django
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
Implémentation d'un générateur en utilisant Python> link> yield et next ()> yield
Développé en installant Git, VSCode, Docker sur Chrome OS
Obtenez et automatisez le contrôle ASP Datepicker à l'aide de Python et Selenium
Lire et écrire des balises NFC avec python en utilisant PaSoRi
Procédure de transcription vocale à l'aide de Python et de l'API Google Cloud Speech
Récupérer des fichiers depuis Linux en utilisant paramiko et scp [Python]
Serveur HTTP et client HTTP utilisant Socket (+ navigateur Web) --Python3