Entwickeln und Bereitstellen von Python-APIs mit Kubernetes und Docker

image.png

Einführung

Docker ist eine der beliebtesten Containerisierungstechnologien. Es ist ein benutzerfreundliches und benutzerfreundliches Tool für Entwickler. Es ist außerdem reibungslos und benutzerfreundlich und damit beliebter als andere ähnliche Technologien. Seit seiner ersten Open Source-Version im März 2013 hat Docker die Aufmerksamkeit von Entwicklern und Betriebsingenieuren auf sich gezogen. Laut Docker Inc. haben Docker-Benutzer über 105 Milliarden Container und 5,8 Millionen Container auf Docker Hub heruntergeladen. Angedockt. Der Github des Projekts hat über 32.000 Sterne.

Heute ist Docker so Mainstream geworden. Über 100.000 Projekte von Drittanbietern mit dieser Technologie- Es ist auch wahr, dass es eine wachsende Nachfrage nach Entwicklern mit Containerisierungsfähigkeiten gibt, die diese verwenden.

In diesem Artikel wird zunächst beschrieben, wie Sie Ihre Anwendung mit Docker containerisieren und anschließend mit Docker Compose in einer Entwicklungsumgebung ausführen. Verwenden Sie die Python-API als Haupt-App.

Unter MetricFire Kann Ihnen helfen, Ihr Python-Setup zu überwachen. Um zu sehen, wie es helfen kann, buchen Sie bitte eine Demo [https://www.metricfire.com/demo/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Develop%20and%20Deploy%20a%20Python] % 20API% 20with% 20Kubernetes% 20und% 20Docker) Bitte.

Einrichtung der Entwicklungsumgebung

Bevor wir beginnen, werden wir einige Anforderungen installieren. Wir werden die in Flask entwickelte Mini Python API verwenden. Flask ist ein Python-Framework und eine gute Wahl für das schnelle Prototyping von APIs. Unsere Anwendungen werden mit Flask entwickelt. Wenn Sie Python noch nicht kennen, führen Sie die folgenden Schritte aus, um diese API zu erstellen.

Erstellen Sie zunächst eine virtuelle Python-Umgebung, um die Abhängigkeiten von den übrigen Systemabhängigkeiten zu trennen. Zuvor benötigen Sie PIP, den beliebten Python-Paketmanager.

Die Installation ist sehr einfach. Versuchen Sie, die folgenden zwei Befehle auszuführen.

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

Als Referenz muss Python 3 installiert sein. Um dies zu überprüfen, geben Sie Folgendes ein:

​python --version​

Verwenden Sie nach der Installation des PIP den folgenden Befehl, um die virtuelle Umgebung zu installieren.

​pip install virtualenv​

Weitere Installationsmethoden finden Sie in der offiziellen Anleitung. Erstellen und aktivieren Sie dann das Projekt für den Ordner, in dem Sie die virtuelle Umgebung erstellen möchten. Außerdem werden ein App-Ordner und eine Datei mit dem Namen app.py erstellt.

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

Erstellen Sie eine einfache API, um das Wetter für eine bestimmte Stadt anzuzeigen. Angenommen, Sie möchten das Wetter in London anzeigen. Muss über die Route angefordert werden:

/london/uk

Sie müssen PIP verwenden, um Python-Abhängigkeiten zu installieren, die als "flask" und "request" bezeichnet werden. Wir werden sie später verwenden:

pip install flask requests​

Vergessen Sie nicht, die Abhängigkeiten in einer Datei namens require.txt "einzufrieren". Diese Datei wird später verwendet, um die App-Abhängigkeiten im Container zu installieren.

pip freeze > requirements.txt​

Die Anforderungsdatei sieht folgendermaßen aus:

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

Der Anfangscode der API lautet

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)

Zum Testen müssen Sie python app.py ausführen und auf http: //127.0.0.1:5000/ zugreifen. "AppWorks!" Wird angezeigt. Auf der Webseite. Stellen Sie sicher, dass Sie ein Konto auf derselben Website erstellen und einen API-Schlüssel generieren, da wir Daten von openweathermap.org verwenden.

Als nächstes müssen wir der API nützlichen Code hinzufügen, um die Wetterdaten für eine bestimmte Stadt anzuzeigen.

@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

Und der ganze Code sieht so aus:

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
  },
...

Die Mini-API funktioniert. Lassen Sie es uns mit Docker containerisieren.

Erstellen Sie einen App-Container mit Docker

Lassen Sie uns einen API-Container erstellen. Der erste Schritt besteht darin, eine Docker-Datei zu erstellen. Eine Docker-Datei ist eine beschreibende Textdatei, die verschiedene Schritte und Anweisungen enthält, die der Docker-Dämon befolgen muss, um ein Image zu erstellen. Nach dem Erstellen des Images können Sie den Container ausführen.

Dockerfile beginnt immer mit einer FROM-Anweisung.

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" ]

In der obigen Datei habe ich Folgendes getan:

  1. Verwenden Sie das Basis-Image "Python: 3".
  2. Setzen Sie PYTHONUNBUFFERED auf 1. Wenn Sie PYTHONUNBUFFERED auf 1 setzen, können Protokollnachrichten ohne Pufferung in einen Stream geschrieben werden.
  3. Erstellen Sie einen Ordner / eine App und legen Sie sie als Arbeitsverzeichnis fest.
  4. Kopieren Sie die Anforderungen und installieren Sie damit alle Abhängigkeiten.
  5. Kopieren Sie alle Dateien, aus denen die Anwendung besteht, die Datei app.py, nach workdir.
  6. Da die App diesen Port verwendet, machen Sie schließlich Port 5000 verfügbar und starten Sie den Python-Befehl mit app.py als Argument. Dadurch wird die API gestartet, wenn der Container gestartet wird.

Nach dem Erstellen der Docker-Datei müssen Sie die Docker-Datei mit dem Bildnamen und den von Ihnen ausgewählten Tags erstellen. In diesem Beispiel verwenden wir "Wetter" als Namen und "v1" als Tag.

docker build -t weather:v1 .

Stellen Sie sicher, dass Sie aus dem Ordner erstellen, der die Dateien Dockerfile und app.py enthält.

Nach dem Erstellen des Containers können Sie ihn ausführen mit:

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

Der Container wird im Hintergrund ausgeführt, da er die Option -d verwendet. Der Container heißt "Wetter" (-name Wetter). Wir haben auch Host-Port 5000 dem exponierten Container-Port 5000 zugeordnet, sodass Port 5000 ebenfalls erreichbar ist.

Wenn Sie möchten, dass der Container erstellt wird, können Sie Folgendes verwenden:

docker ps

Sie sollten eine Ausgabe sehen, die der folgenden Ausgabe sehr ähnlich ist.

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

Sie sollten nun in der Lage sein, die API abzufragen. Lassen Sie uns mit CURL testen.

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

Wenn der letzte Befehl JSON zurückgeben muss:

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

Verwenden von Docker Compose für die Entwicklung

Docker Compose ist eine Docker Inc zum Definieren und Ausführen von Docker-Anwendungen mit mehreren Containern. Ein Open Source Tool von. Docker Compose ist auch ein Tool zur Verwendung in Entwicklungsumgebungen. Auf diese Weise können Sie den Container automatisch neu laden, wenn Ihr Code aktualisiert wird, ohne den Container manuell neu starten oder das Image bei jeder Änderung neu erstellen zu müssen. Ohne Compose wäre es frustrierend, nur Docker-Container zu verwenden.

Der Implementierungsteil verwendet die Datei "docker-compose.yaml".

Dies ist die von der API verwendete Datei "docker-compose.yaml".

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

In der obigen Datei sehen Sie, dass der Dienst "Wetter" für die Verwendung des Bildes "Wetter: v1" konfiguriert wurde. Ordnen Sie den Host-Port 5000 dem Container-Port 5000 zu und hängen Sie den aktuellen Ordner im Ordner "/ app" im Container an.

Sie können auch eine Docker-Datei anstelle eines Bildes verwenden. Ich habe bereits eine Docker-Datei, daher empfehle ich diese in diesem Fall.

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

Führen Sie dann "docker-compose up" aus, um den Dienst auszuführen, oder führen Sie "docker-compose up --build" aus, um ihn zu erstellen, und führen Sie ihn dann aus.

Zusammenfassung

In diesem Beitrag habe ich gelernt, wie ein Docker-Container für die Mini Python-API erstellt wird, und mit Docker Compose eine Entwicklungsumgebung erstellt. Wenn Sie eine andere Programmiersprache wie Go oder Rails verwenden, führen Sie normalerweise dieselben Schritte aus, mit einigen geringfügigen Unterschieden. MetricFire Reservierung](https://www.metricfire.com/demo/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Develop%20and%20Deploy%20a%20Python%20API%20with%20Kubernetes%20and%20Docker) Bitte kontaktieren Sie uns, wenn es zu Ihrer Umgebung passt.

Recommended Posts

Entwickeln und Bereitstellen von Python-APIs mit Kubernetes und Docker
Python-Entwicklungsablauf mit Poetry, Git und Docker
Entwickeln, Ausführen und Bereitstellen von AWS Lambda remote mit dem Lambda-Uploader
Versuchen Sie es mit Kubernetes Client -Python-
Authentifizierung mit Tweepy-User-Authentifizierung und Anwendungsauthentifizierung (Python)
Clustering und Visualisierung mit Python und CytoScape
Erstellen und testen Sie mit Docker in wenigen Minuten eine OpenCV- und Python-Umgebung
Von Python bis zur Verwendung von MeCab (und CaboCha)
Verwenden von venv in der Windows + Docker-Umgebung [Python]
Hinter dem Flyer: Docker mit Python verwenden
Verwenden von Python und MeCab mit Azure Databricks
[FX] Hit oanda-API mit Python mit Docker
Entwicklung eines Slack Bot mit Python mit chat.postMessage
Ich verwende Tox und Python 3.3 mit Travis-CI
Ich habe versucht, den Google-Kalender mit CSV-Terminen mithilfe von Python und Google API zu aktualisieren
Drei Dinge, von denen ich süchtig war, als ich Python und MySQL mit Docker verwendete
Schätzung der Kopforientierung mit Python und OpenCV + dlib
Ich habe versucht, Web-Scraping mit Python und Selen
Hinweise zur Installation von Python3 und zur Verwendung von pip unter Windows7
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Erstellen Sie eine Webmap mit Python und GDAL
[Python3] Automatische Texterzeugung mit janome und markovify
Versuchen Sie es mit Tensorflow. ① Erstellen Sie eine Python-Umgebung und führen Sie Tensorflow ein
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Starten Sie Python
Python bei Docker
Scraping mit Python
Grundeinstellungen für die Verwendung von Python3.8 und pip unter CentOS8
Durchsuchen von Pixiv-Tags und Speichern von Illustrationen mit Python
Erweiterbare Skelette für Vim mit Python, Click und Jinja2
Versuchen Sie, eine komprimierte Datei mit Python und zlib zu erstellen
Aggregieren Sie Git-Protokolle mit Git Python und analysieren Sie Assoziationen mit Orange
Erstellen einer R- und Python Docker-Arbeitsumgebung
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
Senden und empfangen Sie Google Mail über die Google Mail-API mit Python
Implementieren eines Generators mit Python> Link> Yield und next ()> Yield
Entwickelt durch Installation von Git, VSCode, Docker unter Chrome OS
Holen Sie sich die ASP Datepicker-Steuerung mit Python und Selen und automatisieren Sie sie
Lesen und schreiben Sie NFC-Tags mit Python mit PaSoRi
Sprachtranskriptionsverfahren mit Python und Google Cloud Speech API
Holen Sie sich Dateien von Linux mit paramiko und scp [Python]
HTTP-Server und HTTP-Client mit Socket (+ Webbrowser) - Python3