1. Docker installieren Installieren Sie Docker in WSL2 https://www.jb51.net/article/223179.htm Meldet einen Fehler:
Gehen Sie zum Herunterladen und Installieren von Docker unter Windows 2. Code schreibenEin 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 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 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 hochDocker-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 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:
|
<<: Beschreibung des Meta-Viewport-Attributs in der HTML-Webseite
Laden Sie die Windows-Version von Nginx von der o...
Screenshots der Effekte: Implementierungscode: Cod...
Vorwort Nachdem das Projekt auf .net Core migrier...
Heute ist mir plötzlich aufgefallen, dass die Stil...
Die in diesem Beispiel verwendete MySQL-Version i...
Inhaltsverzeichnis Frage 1. Installieren Sie webp...
Implementierungsmethode für die MySQL5.7-Master-S...
Indexdefinition: Es handelt sich um eine separate...
Inhaltsverzeichnis HTTP-Hijacking, DNS-Hijacking ...
Inhaltsverzeichnis 1. Trigger-Einführung 1. Was i...
Als ich kürzlich an einem Projekt arbeitete, stel...
Inhaltsverzeichnis Merkmale Erhaltungsstrategie B...
Einführung in den Linux-Top-Befehl Der Befehl top...
Welche Informationen möchten Sie erhalten, wenn S...
Mit dem Laufschriftelement können Sie einfache Gle...