Praxis der Bereitstellung von in Python geschriebenen Webanwendungen mit Docker

Praxis der Bereitstellung von in Python geschriebenen Webanwendungen mit Docker

1. Docker installieren

Installieren Sie Docker in WSL2 https://www.jb51.net/article/223179.htm

Meldet einen Fehler:

# Docker-Installationsskript ausführen, Commit: 93d2499759296ac1f9c510605fef85052a2c32be

WSL ERKANNT: Wir empfehlen die Verwendung von Docker Desktop für Windows.
Bitte laden Sie Docker Desktop von https://www.docker.com/products/docker-desktop herunter.


Sie können jetzt Strg+C drücken, um dieses Skript abzubrechen.
+ 20 Schlafplätze

Gehen Sie zum Herunterladen und Installieren von Docker unter Windows

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

2. Code schreiben

Ein Webserver wird mithilfe des Flask-Frameworks gestartet und seine einzige Funktion besteht darin, dass er, wenn in der aktuellen Umgebung eine Umgebungsvariable „NAME“ vorhanden ist, diese nach „Hallo“ ausgibt, andernfalls „Hallo Welt“ und schließlich den Hostnamen der aktuellen Umgebung ausgibt.

Betriebssystem importieren
aus Flasche importieren Flasche 
Socket importieren 
von gevent importiere pywsgi
App = Flask(__name__) 

@app.route('/') 
def hallo(): 
    html = "<h3>Hallo {name}!</h3>" \
    „<b>Hostname:</b> {Hostname}<br/>“ 
    gibt html.format zurück (Name = os.getenv ("NAME", "Welt"), Hostname = Socket.gethostname ()) 

wenn __name__ == "__main__": 
    Server = pywsgi.WSGIServer(('0.0.0.0', 12345), App)
    server.serve_forever()

Exportieren von Abhängigkeitspaketen

pip freeze > Anforderungen.txt
Flasche == 2.0.1
gevent==21.8.0
greenlet==1.1.1
es ist gefährlich == 2.0.1
Jinja2==3.0.1
MarkupSafe==2.0.1
Werkzeug==2.0.1
zope.event==4.5.0
zope.interface==5.4.0

3. Schreiben Sie ein Dockerfile

# Verwenden Sie das offizielle Python-Entwicklungsimage als Basisimage FROM python:3.8-slim 

# Ändern Sie das Arbeitsverzeichnis in /app 
ARBEITSVERZEICHNIS /app 

#Kopieren Sie den gesamten Inhalt des aktuellen Verzeichnisses nach /app ADD . /app

# Verwenden Sie pip, um die von dieser Anwendung benötigten Abhängigkeiten zu installieren. # RUN pip install --trusted-host pypi.python.org -r requirements.txt 
Führen Sie den Befehl pip install --trusted-host https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt aus. 
# Inländische Quellen sind schneller# Erlauben Sie externen Zugriff auf den Port 12345 des Containers EXPOSE 12345 

# Umgebungsvariable ENV NAME World festlegen 

# Stellen Sie den Containerprozess auf: python app.py ein, das heißt: den Startbefehl dieser Python-Anwendung CMD ["python", "app.py"]
# CMD schließt implizit ENTRYPOINT ein, /bin/sh -c

Bildbeschreibung hier einfügen

In WSL:

Lassen Sie Docker ein Image erstellen, das Tag -t hinzufügen, die Docker-Datei automatisch laden und die darin enthaltenen Anweisungen ausführen

Docker Build -t Hallo Welt.
[+] Gebäude 17.4s (10/10) FERTIG
 => [intern] Build-Definition aus Dockerfile laden 0,1 s
 => => Docker-Datei wird übertragen: 757 B 0,0 s
 => [intern] lade .dockerignore 0,1 s
 => =>Kontext wird übertragen: 2B 0,0 s
 => [intern] Metadaten für docker.io/library/python:3.8-slim 2.9s laden
 => [auth] library/python:pull token for registry-1.docker.io 0.0s
 => [1/4] VON docker.io/library/python:3.8-slim@sha256:4dd66d1ccaddaa0587851cb92b365bf3090dccb41393c6f8b 0,0 s
 => [intern] Build-Kontext laden 0,1 s
 => => Kontext wird übertragen: 813B 0,0 s
 => CACHED [2/4] WORKDIR /app 0.0s
 => [3/4] HINZUFÜGEN ./app 0,1s
 => [4/4] FÜHREN Sie pip install --trusted-host https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt 13.6s aus.
 => Exportieren in Bild 0,6 s
 => => Ebenen exportieren 0,6 s
 => => Bild wird geschrieben sha256:390d32b9f7a20ccd347361bd31450807d3e63d052e334865cf8460968ffceff4 0,0 s
 => => Benennung in docker.io/library/helloworld 0,0 s

Verwenden Sie „Docker Scan“, um Snyk-Tests für Bilder auszuführen, um Schwachstellen zu finden und zu erfahren, wie Sie diese beheben können.

Spiegel anzeigen

(k8s)PC:/mnt/d/gitcode/k8s$ Docker-Image ls
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
hallowelt aktuell 390d32b9f7a2 Vor etwa einer Minute 169MB

Starten des Containers

docker run -p 4000:12345 Hallo Welt

Weil CMD im Dockerfile angegeben wurde. Andernfalls müssen Sie am Ende den Prozessstartbefehl python app.py hinzufügen

Containerstart anzeigen

(Basis) $ Docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
f6e051d1af6b hallo Welt „python app.py“ vor 2 Minuten Vor 2 Minuten 0.0.0.0:4000->12345/tcp, :::4000->12345/tcp upbeat_elion

-p 4000:12345 weist Docker an, Port 12345 im Container dem Port 4000 auf dem Hostcomputer zuzuordnen.

Der Zweck besteht darin, auf Port 4000 des Hostcomputers zuzugreifen, um die von der Anwendung im Container zurückgegebenen Ergebnisse anzuzeigen.

locken http://localhost:4000
# <h3>Hallo Welt!</h3><b>Hostname:</b> dc1c1343e366<br/>

Entwicklung und Test einer Anwendung mithilfe von Containern abgeschlossen

4. Laden Sie das Bild hoch

Docker-Hub registrieren, mit dem Docker-Login-Befehl anmelden

Docker-Tag Hallo Welt kobe24o/Hallo Welt:v0

kobe24o ist der Kontoname (Bild-Repository), helloworld ist der Bildname und v0 ist die von ihm selbst zugewiesene Versionsnummer

Docker Push Kobe24o/Hallo Welt:v0
(k8s) $ Docker Push Kobe24o / Hallo Welt: v0
Der Push bezieht sich auf das Repository [docker.io/kobe24o/helloworld]
931022d457d6: Pushen [=================> ] 16,07 MB/47,27 MB
c76dc68917fc: Geschoben
047ca6dfe9ab: Gedrückt
d82f4c466b47: Aus Bibliothek/Python gemountet
5aa75f4e55e7: Aus Bibliothek/Python gemountet
74d6903a940b: Aus Bibliothek/Python gemountet
2f9c2b8e82bd: Aus Bibliothek/Python gemountet
ba5a5fe43301: Aus Bibliothek/Python gemountet

5. Ändern Sie das Bild

(Basis) $ Docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS
           NAMEN
dd3bf057cb09 hallo Welt „python app.py“ vor 7 Sekunden Vor 5 Sekunden aktiv 0.0.0.0:4000->12345/tcp, :::4000->12345/tcp compassionate_carver

(Basis) $ docker exec -it dd3bf057cb09 /bin/sh
# Passwort
/app
# berühren Sie newfile.txt
# ls
Docker-Datei app.py neue Datei.txt Anforderungen.txt
# Ausfahrt

(Basis) $ Docker-Commit dd3bf057cb09 kobe24o/helloworld:v1
sha256:ca8880f84040f9bdd7ef13763b9c64f8bd4a513a74bc2b095be06aae5b60268a

Der obige Vorgang fügt dem Bild eine neue Datei hinzu und speichert sie.

Docker-Inspektion --Format '{{ .State.Pid}}' dd3bf057cb09
1763
# Zeigen Sie die Prozess-ID (PID) des laufenden Containers an 

Indem Sie die Proc-Datei des Hostcomputers anzeigen, können Sie die Dateien sehen, die allen Namespaces dieses Prozesses entsprechen.

root:/# ls -l /proc/{PID}/ns/
gesamt 0
lrwxrwxrwx 1 root root 0 14. September 11:15 cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx 1 root root 0 14. September 11:15 ipc -> 'ipc:[4026532220]'
lrwxrwxrwx 1 root root 0 14. September 09:49 mnt -> 'mnt:[4026532218]'
lrwxrwxrwx 1 root root 0 14. September 11:15 net -> 'net:[4026531992]'
lrwxrwxrwx 1 root root 0 14. September 11:15 pid -> 'pid:[4026532221]'
lrwxrwxrwx 1 root root 0 14. September 11:15 pid_for_children -> 'pid:[4026532221]'
lrwxrwxrwx 1 root root 0 Sep 14 11:15 Benutzer -> 'Benutzer:[4026531837]'
lrwxrwxrwx 1 root root 0 14. September 11:15 uts -> 'uts:[4026532219]'

Ein Prozess kann sich dem Namespace eines bestimmten Prozesses anschließen , um so den Container zu „betreten“, in dem sich der Prozess befindet. Dies ist genau das Implementierungsprinzip von docker exec .

Zum Hub schieben

(Basis) $ Docker Push kobe24o/Hallo Welt:v1
Der Push bezieht sich auf das Repository [docker.io/kobe24o/helloworld]
dfee38b42dbb: Gedrängt
931022d457d6: Ebene existiert bereits
c76dc68917fc: Ebene existiert bereits
047ca6dfe9ab: Ebene existiert bereits
d82f4c466b47: Ebene existiert bereits
5aa75f4e55e7: Ebene existiert bereits
74d6903a940b: Ebene existiert bereits
2f9c2b8e82bd: Ebene existiert bereits
ba5a5fe43301: Ebene existiert bereits
v1: Digest: sha256:7af7ff571ea9fd70d48abeaa2b38a1ed1c1a4e5a933b722d82af25d3e889f84e Größe: 2206

Dies ist das Ende dieses Artikels über die Docker-Bereitstellung von in Python geschriebenen Webanwendungen. Weitere relevante Inhalte zur Docker-Bereitstellung von Python-Webanwendungen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Entwickeln von Python-Webanwendungen mit Docker

<<:  Beschreibung des Meta-Viewport-Attributs in der HTML-Webseite

>>:  Verbesserung der Erfahrung und gemeinsame Nutzung des interaktiven Designs von 163 Mailbox-Anmeldefeldern

Artikel empfehlen

Farbverlauf für HTML-Hintergrund durch CSS erreicht

Screenshots der Effekte: Implementierungscode: Cod...

Verwenden von System.Drawing.Common in Linux/Docker

Vorwort Nachdem das Projekt auf .net Core migrier...

MySQL5.7 Master-Slave-Konfigurationsbeispielanalyse

Implementierungsmethode für die MySQL5.7-Master-S...

Verwendung von MySQL-Triggern

Inhaltsverzeichnis 1. Trigger-Einführung 1. Was i...

CSS verwendet die BEM-Namenskonvention

Welche Informationen möchten Sie erhalten, wenn S...

Das Laufschriftelement implementiert Effekte wie scrollende Schriften und Bilder

Mit dem Laufschriftelement können Sie einfache Gle...