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:
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 erstelltSie können jetzt die laufenden Container mit dem folgenden Befehl auflisten:
docker-psSie 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.