[PYTHON] Verwendung von Docker zum Containerisieren Ihrer Anwendung und Verwenden von Docker Compose zum Ausführen Ihrer Anwendung in einer Entwicklungsumgebung

image.png

Einführung

Docker ist eine der beliebtesten Containerisierungstechnologien. Es ist ein benutzerfreundliches und benutzerfreundliches Tool für Entwickler und hat den Vorteil, dass es flüssiger und benutzerfreundlicher ist als andere ähnliche Technologien. Seit seiner ersten Open Source-Veröffentlichung im März 2013 steht Docker im Mittelpunkt der Aufmerksamkeit von Entwicklern und Betriebsingenieuren. Laut Docker Inc. haben Docker-Benutzer über 105 Milliarden Container auf Docker Hub heruntergeladen und 5,8 Millionen Container angedockt. Dieses Projekt hat mehr als 32.000 Sterne auf Github.

Seitdem hat sich Docker zum Mainstream entwickelt und mehr als 100.000 Projekte von Drittanbietern haben diese Technologie verwendet, was die Nachfrage nach Entwicklern mit Containerisierungsfähigkeiten erhöht.

In diesem Blogbeitrag wird beschrieben, wie Sie Docker zum Containerisieren Ihrer Anwendung und Docker Compose zum Ausführen Ihrer Anwendung in einer Entwicklungsumgebung verwenden. Verwenden Sie die Python-API als Haupt-App.

MetricFire Reservierung](https://www.metricfire.com/demo-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Develop%20and%20Deploy%20a%20Python%20API%20with%20Kubernetes%20and%D) Erfahren Sie, wie Sie Ihr Kubernetes, Python-Setup überwachen.

Einrichtung der Entwicklungsumgebung

Bevor wir beginnen, installieren Sie einige Anforderungen. Hier verwenden wir die in Flask entwickelte Mini-Python-API. Flask ist ein Python-Framework und eine gute Wahl für das schnelle Prototyping von APIs. Unsere Anwendung wird 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 und trennen Sie die Abhängigkeiten von anderen Systemabhängigkeiten. Zuvor benötigen Sie PIP, den beliebten Python-Paketmanager.

Die Installation ist sehr einfach. Sie müssen zwei Befehle ausführen:

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

Als Referenz muss Python 3 installiert sein. Sie können dies überprüfen, indem Sie Folgendes eingeben:

​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 Sie dann ein Projekt in dem Ordner, in dem Sie eine virtuelle Umgebung erstellen und aktivieren müssen. Außerdem wird ein Ordner für die App 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​

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

Dies ist der Anfangscode für die API.

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

Der Gesamtcode sieht folgendermaßen 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 nützliche Textdatei, die verschiedene Schritte und Anweisungen enthält, die der Docker-Dämon befolgen muss, um ein Image zu erstellen. Nachdem Sie das Image erstellt haben, 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 außerdem PYTHONUNBUFFERED auf 1. Wenn Sie PYTHONUNBUFFERED auf 1 setzen, können Sie Protokollnachrichten in einem Stream speichern, anstatt sie zu puffern.
  3. Erstellen Sie außerdem 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. Verwenden Sie in diesem Fall "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). Da der Host-Port 5000 dem exponierten Container-Port 5000 zugeordnet ist, ist er auch über den Port 5000 erreichbar.

Wenn Sie die Erstellung des Containers bestätigen möchten, 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 können jetzt die API abfragen. 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 kann der Container automatisch neu geladen werden, wenn der Code aktualisiert wird, ohne dass der Container bei jeder Änderung manuell neu gestartet oder das Image neu erstellt werden muss. Ohne Compose wäre es frustrierend, nur mit Docker-Containern zu entwickeln.

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 nun "docker-compose up" aus, um den Dienst auszuführen, oder führen Sie "docker-compose up --build" aus, um ihn zu erstellen und dann auszuführen.

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-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Develop%20and%20Deploy%20a%20Python%20API%20with%20Kubernetes%20and%D) MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Develop%20and%20Deploy%20a%20Python%20API%20with%20Kubernetes%20 und Bitte überprüfen Sie, ob.

Recommended Posts

Verwendung von Docker zum Containerisieren Ihrer Anwendung und Verwenden von Docker Compose zum Ausführen Ihrer Anwendung in einer Entwicklungsumgebung
So führen Sie eine Django-Anwendung auf einem Docker-Container aus (Entwicklungs- und Produktionsumgebung)
Flutter in Docker - Erstellen und Verwenden einer Flutter-Entwicklungsumgebung in einem Docker-Container
Wie Sie pyenv und pyenv-virtualenv auf Ihre eigene Weise verwenden
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
So verwenden Sie das Jupyter-Notebook, ohne Ihre Umgebung mit Docker zu verschmutzen
Erfahren Sie, wie Sie Docker verwenden, indem Sie eine Umgebung für Django + MySQL erstellen
Verwendung ist und == in Python
Verwenden Sie WebDAV in einer Portable Docker-Umgebung
So machen Sie den Containernamen in Docker als Subdomain zugänglich
[Hinweis] So erstellen Sie eine Ruby-Entwicklungsumgebung
[Hinweis] So erstellen Sie eine Mac-Entwicklungsumgebung
Verwenden Sie eine kostenlose GPU in Ihrer Lieblingsumgebung
So führen Sie AutoGluon in einer Google Colab-GPU-Umgebung aus
Ein Memorandum zur Verwendung von Keras 'keras.preprocessing.image
So erstellen Sie eine Django (Python) -Umgebung auf Docker
Verwendung der Template-Engine in einer Dateianwendung von Pyramid
So erstellen Sie eine Entwicklungsumgebung für TensorFlow (1.0.0) (Mac)
So richten Sie die Cython-Umgebung ein und kompilieren sie
[Linux] Wie Sie Ihre IP in eine Variable einfügen
[Django] Verwenden Sie VS Code + Remote-Container, um schnell eine Entwicklungsumgebung für Django-Container (Docker) zu erstellen.
Erstellen Sie eine Docker-Umgebung, die PyTorch und JupyterLab verwenden kann
Vor- und Nachteile der Konvertierung der Entwicklungsumgebung von Django in Docker
Verwendung der Methode __call__ in der Python-Klasse
Verwendung von VS-Code in einer venv-Umgebung mit Windows
Erstellen und Verwenden von statischen / dynamischen Bibliotheken in C-Sprache
So entwickeln Sie in einer virtuellen Python-Umgebung [Memo]
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
Verwenden Sie Mitmproxy, um die API Ihrer App in eine Entwicklungsumgebung zu zwingen
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
Hinweise zum Erstellen einer LAMP-Umgebung mit Vagrant und VirtulBox
So installieren Sie OpenCV in Cloud9 und führen es in Python aus
Führen Sie Eclipse in einer Docker-Umgebung (noVNC) aus.
So vergleichen Sie Listen und rufen allgemeine Elemente in einer Liste ab
Verwendung von Klassen in Theano
Lernverlauf zur Teilnahme an der Entwicklung von Teamanwendungen mit Python ~ Build Docker / Django / Nginx / MariaDB-Umgebung ~
So debuggen Sie Dash (Flask) in der Docker + VSCode + Remote-Verbindungsumgebung
Verwendung von Funktionen in separaten Dateien Perl-Version und Python-Version
Verwendung von Umgebungsvariablen für Serverless Framework und Python und Verwaltung von Phasen
Verwendung von .bash_profile und .bashrc
So installieren und verwenden Sie Graphviz
Wie man MySQL mit Python benutzt
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
Ich möchte eine Pipfile erstellen und im Docker wiedergeben
So löschen Sie einen Docker-Container
So führen Sie TensorFlow 1.0-Code in 2.0 aus
Eine Geschichte über alles von der Datenerfassung über die KI-Entwicklung bis hin zur Veröffentlichung von Webanwendungen in Python (3. KI-Entwicklung)
So melden Sie sich bei Docker + NGINX an
[DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django
Debuggen eines Python-Programms durch Remoteverbindung mit einem Docker-Container in einer WSL2-Umgebung mit VS-Code
Erstellen Sie eine Entwicklungsumgebung mit Jupyter und Flask mit Python in Docker (unterstützt sowohl VS Code als auch Code-Server).
Erstellen Sie Verknüpfungen, um Python-Dateien auf dem Terminal mit VScode auszuführen
Ich wollte ein Jupyter-Notebook mit Docker in einer Pip-Umgebung (Opticspy) verwenden.
So erhalten Sie mit pandas DataFrame einen bestimmten Spaltennamen und Indexnamen
So installieren Sie das Python-Paket in einer lokalen Umgebung als allgemeiner Benutzer
Verwendung von PyCharm mit Glue-Entwicklungsendpunkten, die in VPC ausgeführt werden