GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Dockerisieren der Flask-Anwendung mit Docker unter Debian 10

Docker ist ein Open-Source-Tool, das entwickelt wurde, um das Erstellen, Bereitstellen und Ausführen von Anwendungen mithilfe von Containern zu vereinfachen. Ein Container ist ein Softwarepaket, das Code und alle seine Abhängigkeiten verpackt, sodass die Anwendung schnell und zuverlässig von einer Computerumgebung in eine andere ausgeführt werden kann.

Flask ist ein beliebtes Python-Webframework. Es wird als Mikroframework klassifiziert, da es keine speziellen Tools oder Bibliotheken erfordert. Im Vergleich zu anderen Frameworks ist es leicht und stark strukturiert.

In diesem Tutorial erklären wir, wie man eine Flask-Anwendung mit Docker auf einem Debian 10-Server bereitstellt.

Voraussetzungen

  • Ein Server mit Debian 10.
  • Auf Ihrem Server ist ein Root-Passwort konfiguriert.

Erste Schritte

Bevor Sie beginnen, sollten Sie das Paket Ihres Systems auf die neueste Version aktualisieren. Sie können alle Pakete mit dem folgenden Befehl aktualisieren:

apt-get update -y
apt-get upgrade -y

Sobald alle Pakete aktualisiert sind, starten Sie Ihr System neu, um die Änderungen zu übernehmen.

Erforderliche Abhängigkeiten installieren

Als nächstes müssen Sie den Nginx-Webserver und andere Abhängigkeiten in Ihrem System installieren. Sie können alle mit dem folgenden Befehl installieren:

apt-get install nginx apt-transport-https ca-certificates curl gnupg2 software-properties-common curl -y

Sobald alle Pakete installiert sind, können Sie mit dem nächsten Schritt fortfahren.

Installieren Sie Docker

Standardmäßig ist die neueste Version von Docker nicht im Debian 10-Repository verfügbar. Daher ist es eine gute Idee, es aus dem offiziellen Docker-Repository zu installieren.

Laden Sie zuerst den GPG-Schlüssel herunter und fügen Sie ihn mit dem folgenden Befehl hinzu:

wget https://download.docker.com/linux/debian/gpg apt-key add gpg

Fügen Sie als Nächstes das Docker-Repository mit dem folgenden Befehl hinzu:

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian buster stable"

Aktualisieren Sie als Nächstes das Repository und installieren Sie Docker mit dem folgenden Befehl:

apt-get update -y
apt-get install docker-ce -y

Überprüfen Sie nach erfolgreicher Installation den Status des Dockers mit folgendem Befehl:

Systemctl-Status-Docker

Sie sollten die folgende Ausgabe erhalten:

? docker.service – Container-Engine der Docker-Anwendung Geladen:geladen (/lib/systemd/system/docker.service; aktiviert; Herstellervoreinstellung:aktiviert) Aktiv:aktiv (läuft) seit So. 2020-04-19 06:26:25 UTC; Vor 1min 8s Dokumente:https://docs.docker.com Haupt-PID:8883 (dockerd) Aufgaben:10 Arbeitsspeicher:46,6 MB CGroup:/system.slice/docker.service ??8883 /usr/bin/dockerd -H fd :// --containerd=/run/containerd/containerd.sockApr 19 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.413828757Z" level=warning msg="Your kernel does unterstützt kein Swap-Speicherlimit 19. April 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.413876690Z" level=warning msg="Ihr Kernel unterstützt cgroup rt period nicht"19. April 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.413889604Z" level=warning msg="Ihr Kernel unterstützt cgroup rt runtime nicht Apr 19 06:26:24 debian10 dockerd[8883]:time ="2020-04-19T06:26:24.414115814Z" level=info msg="Loading container:start."Apr 19 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.788332166 Z" level=info msg="Standardbrücke (docker0) wird eine IP zugewiesen aApr 19 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.972022325Z" lev el=info msg="Container werden geladen:fertig."Apr 19 06:26:25 debian10 dockerd[8883]:time="2020-04-19T06:26:25.010940205Z" level=info msg="Docker-Daemon" commit=afacb8b7f0 graphdriver(s)=oApr 19 06:26:25 debian10 dockerd[8883]:time="2020-04-19T06:26:25.011145541Z" level=info msg="Daemon hat Initialisierung abgeschlossen"19.Apr 06:26:25 debian10 systemd[1]:Docker Application Container Engine gestartet. 19. April 06:26:25 debian10 dockerd[8883]:time="2020-04-19T06:26:25.074603639Z" level=info msg="API listen on / var/run/docker.sock"

Zu diesem Zeitpunkt ist Docker installiert und wird ausgeführt. Sie können jetzt mit dem nächsten Schritt fortfahren.

Setup Flask-Verzeichnisstruktur

Als Nächstes müssen Sie eine Verzeichnisstruktur für Ihre Flask-Anwendung erstellen.

Lassen Sie uns ein Verzeichnis namens Flask im Verzeichnis /var/www/ erstellen:

mkdir -p /var/www/flask

Als nächstes ändern Sie das Verzeichnis in eine Flasche und erstellen die Verzeichnisstruktur für Flasche:

cd /var/www/flask
mkdir -p app/static
mkdir -p app/templates

Das statische Verzeichnis wird zum Speichern von Bildern, CSS- und JavaScript-Dateien verwendet, während das Vorlagenverzeichnis zum Speichern der HTML-Vorlagen für Ihr Projekt verwendet wird.

Als nächstes müssen Sie eine __init__.py-Datei im App-Verzeichnis erstellen:

nano-app/__init__.py

Fügen Sie den folgenden Inhalt hinzu, um eine Flask-Instanz zu erstellen, und importieren Sie die Logik aus der Datei views.py:

von Flaschenimport Flaskapp =Flask(__name__)von App-Importansichten

Speichern und schließen Sie die Datei und erstellen Sie dann die Datei views.py in Ihrem App-Verzeichnis.

nano-app/views.py

Fügen Sie die folgenden Zeilen hinzu

from app import [email protected]('/')def home():gibt "hello world!" zurück.

Speichern und schließen Sie die Datei und erstellen Sie dann die Datei uwsgi.ini mit dem folgenden Befehl:

nano uwsgi.ini

Diese Datei enthält die uWSGI-Konfigurationen für unsere Anwendung, wie unten gezeigt:

[uwsgi]module =maincallable =appmaster =true

Speichern und schließen Sie die Datei, wenn Sie fertig sind. uWSGI ist eine Bereitstellungsoption für Nginx, die sowohl ein Protokoll als auch ein Anwendungsserver ist.

Als Nächstes müssen Sie die Datei main.py erstellen, um die Flask-Instanz namens app aus dem Anwendungspaket zu importieren. Sie können es mit dem folgenden Befehl erstellen:

nano main.py

Fügen Sie die folgende Zeile hinzu:

aus App-Import-App

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Erstellen Sie als Nächstes eine requirements.txt-Datei zum Angeben der Abhängigkeiten, die der Pip-Paketmanager in Ihrer Docker-Bereitstellung installiert:

nano-Anforderungen.txt

Fügen Sie die folgende Zeile hinzu, die mit der neuesten Version von Flask übereinstimmt:

Flask==1.1.2

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Zu diesem Zeitpunkt wurde Ihre Flask-Anwendung erfolgreich konfiguriert. Sie können jetzt mit dem nächsten Schritt fortfahren.

Konfigurieren Sie Docker zum Bereitstellen von Flask

Als Nächstes müssen Sie eine Docker-Datei erstellen, um eine Flask-Anwendung zu erstellen und bereitzustellen.

Erstellen Sie zunächst ein Dockerfile mit dem folgenden Befehl:

cd /var/www/flask
nano Dockerfile

Fügen Sie die folgenden Zeilen hinzu:

FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7RUN apk --update add bash nanoENV STATIC_URL /staticENV STATIC_PATH /var/www/app/staticCOPY ./requirements.txt /var/www/requirements. txtRUN pip install -r /var/www/requirements.txt

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Erstellen Sie als Nächstes ein start.sh-Skript, um ein Image aus der Docker-Datei zu erstellen, und erstellen Sie einen Container aus dem resultierenden Docker-Image.

nanostart.sh

Fügen Sie die folgende Zeile hinzu:

#!/bin/bashapp="docker.test"docker build -t ${app} .docker run -d -p 56733:80 \ --name=${app} \ -v $PWD:/app ${app}

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Hinweis :Stellen Sie sicher, dass der Port 56733 frei und nutzbar ist.

Führen Sie schließlich das Skript mit dem folgenden Befehl aus:

bash start.sh

Dadurch wird das Docker-Image erstellt und ein Container aus dem resultierenden Image erstellt, wie unten gezeigt:

Build-Kontext an Docker-Daemon senden 9.728kBSchritt 1/6:FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7python3.6-alpine3.7:Pull von tiangolo/uwsgi-nginx-flask48ecbb6b270e:Pull abgeschlossen 692f29ee68fa:Pull abgeschlossen f75fc7ac1098:Pull abgeschlossen c30e40bb471c:Pull abgeschlossen Erfolgreich erstellt 

Sie können jetzt die laufenden Container mit dem folgenden Befehl auflisten:

docker-ps

Sie sollten die folgende Ausgabe erhalten:

CONTAINER ID IMAGE BEFEHL ERSTELLT STATUS PORTS NAMEN22cd2bd23c91 docker.test "/entrypoint.sh /sta…" Vor ungefähr einer Minute Nach oben Ungefähr eine Minute 443/tcp, 0.0.0.0:56733->80/tcp docker.test 

Sie können den Docker-Container auch überprüfen, indem Sie die URL http://your-server-ip:56733 besuchen. Sie sollten den folgenden Bildschirm sehen:

Vorlagendateien bereitstellen

Sie können auch Vorlagendateien bereitstellen, um statische und dynamische Inhalte bereitzustellen. Mit dem folgenden Befehl können Sie eine Homepage-Vorlage für Ihre Anwendung erstellen:

nano-app/templates/home.html

Fügen Sie die folgenden Codes hinzu:

    Willkommen Flask   

Startseite

Dies ist die Startseite unserer Flask-Anwendung.

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Als Nächstes müssen Sie die Datei views.py ändern, um die neu erstellte Datei bereitzustellen:

nano-app/views.py

Aktualisieren Sie die Datei wie unten gezeigt:

from Flask import render_templatefrom app import [email protected]('/')def home():return "hello world!"@app.route('/template')def template():return render_template('home .html')

Speichern und schließen Sie die Datei. Anschließend müssen Sie die Docker-Container neu starten, um die Änderungen zu übernehmen.

Sie können den Docker-Container namens docker.test mit dem folgenden Befehl neu starten:

docker stop docker.test
docker starte docker.test

Öffnen Sie nun Ihren Webbrowser und geben Sie die URL http://your-server-ip:56733/template ein. Sie sollten Ihre neu erstellte Vorlage auf dem folgenden Bildschirm sehen:

Schlussfolgerung

Herzliche Glückwünsche! Sie haben erfolgreich eine Flask-Anwendung mit Docker auf einem Debian 10-Server bereitgestellt. Sie können die Anwendung jetzt mit minimaler Neukonfiguration auf verschiedene Server replizieren. Fühlen Sie sich frei, mich zu fragen, wenn Sie irgendwelche Fragen haben.


Debian
  1. So installieren Sie Docker auf Debian 10 Buster

  2. So installieren Sie die Docker-Engine unter Debian 11

  3. Debian – Verwenden von zwei Displays unter Debian?

  4. Debian – Live-Helper offline verwenden?

  5. Installieren und Verwenden von Docker unter Ubuntu und Debian

Installieren Sie Navidrome mit Docker

Installieren Sie Debian 11 Bullseye auf Docker CE, um es zu testen

So installieren Sie Docker auf Debian 9 Stretch

So installieren Sie Bitwarden unter Debian 11

So stellen Sie eine Python Flask-API-Anwendung auf Docker bereit

So installieren Sie Docker CE unter Debian 11