1. Einleitung Wenn Sie früher mit dem Schreiben von Python-Anwendungen beginnen wollten, bestand der erste Schritt darin, die Python-Laufzeitumgebung auf Ihrem Computer zu installieren. Die installierte Umgebung musste mit der Online-Umgebung übereinstimmen, was ziemlich mühsam war. Mit Docker können Sie ohne Installation ein portables Image einer Python-Laufzeitumgebung aus dem offiziellen Docker-Verzeichnis oder anderen Repositories abrufen. Sie können Ihre Anwendung dann auf der Grundlage dieses Images entwickeln, wodurch sichergestellt wird, dass Ihre Anwendung, Abhängigkeiten und Laufzeit zusammen ausgeführt werden. 2. Erstellen Sie ein Python-Image 2.1. Um Ihr eigenes Image zu erstellen, müssen Sie zunächst eine Datei mit dem Namen „Dockerfile“ erstellen, um die erforderlichen Schritte zum Erstellen eines Images und Ausführen eines Containers zu definieren. Jede Anweisung in einer Docker-Datei erstellt eine Ebene im Image. Wenn Sie Ihr Docker-File ändern und das Image neu erstellen, werden nur die Ebenen neu erstellt, die geändert wurden. Dies ist einer der Gründe, warum Images im Vergleich zu anderen Virtualisierungstechnologien leicht, klein und schnell sind. Erstellen Sie ein leeres Verzeichnis, erstellen Sie eine Datei mit dem Namen Dockerfile, kopieren Sie den folgenden Inhalt, fügen Sie ihn in die Datei ein und speichern Sie ihn. # Verwenden Sie eine offizielle Python-Laufzeit als übergeordnetes Image VON python:2.7-slim # Stellen Sie das Arbeitsverzeichnis auf /app ein ARBEITSVERZEICHNIS /app # Kopieren Sie den aktuellen Verzeichnisinhalt in den Container unter /app HINZUFÜGEN ./app # Installieren Sie alle benötigten Pakete, die in requirements.txt angegeben sind Führen Sie den Befehl pip install --trusted-host pypi.python.org -r requirements.txt aus. # Port 80 für die Welt außerhalb dieses Containers verfügbar machen AUSSETZEN 80 # Umgebungsvariable definieren ENV NAME Welt # Führen Sie app.py aus, wenn der Container gestartet wird CMD ["python", "app.py"] 2.2 Erstellen Sie die Dateien requirements.txt und app.py im selben Verzeichnis wie die Dockerfile-Datei. Aufgrund des ADD-Befehls in der Dockerfile-Datei werden die beiden oben genannten Dateien zum endgültigen Image hinzugefügt. Aufgrund des EXPOSE-Befehls kann auf den Inhalt von app.py zugegriffen werden, indem Port 80 des Containers aufgerufen wird. Hinweis: Port 80 bezieht sich hier auf den vom Container freigegebenen Port, nicht auf den Port der tatsächlichen Maschine.
app.py aus Flasche importieren Flasche von Redis importieren Redis, RedisError Betriebssystem importieren Socket importieren # Mit Redis verbinden redis = Redis(Host="redis", db=0, Socket-Verbindungstimeout=2, Socket-Timeout=2) App = Flask(__name__) @app.route("/") def hallo(): versuchen: Besuche = redis.incr("Zähler") außer RedisError: Besuche = "<i>Verbindung zu Redis nicht möglich, Zähler deaktiviert</i>" html = "<h3>Hallo {name}!</h3>" \ "<b>Hostname:</b> {Hostname}<br/>" \ "<b>Besuche:</b> {Besuche}" return html.format(name=os.getenv("NAME", "Welt"), hostname=socket.gethostname(), Besuche=Besuche) wenn __name__ == "__main__": app.run(Host='0.0.0.0', Port=80) 2.3 Packen Sie unsere Anwendung in einen Spiegel und führen Sie sie im DockerFile-Verzeichnis aus. Dadurch wird ein Docker-Image erstellt, das wir mit -t taggen, damit das Image einen aussagekräftigen Namen hat. Docker-Build -t freundliches Hallo 3. Ausführen des Images Führen Sie die Anwendung aus, indem Sie mit -p den Port 4000 auf Ihrem Computer dem vom Container freigegebenen Port 80 zuordnen: docker run -p 4000:80 freundliches Hallo Sie können auch den Curl-Befehl in der Shell verwenden, um denselben Inhalt anzuzeigen. $ curl http://localhost:4000 <h3>Hallo Welt!</h3><b>Hostname:</b> 8fc990912a14<br/><b>Besuche:</b> <i>Verbindung zu Redis nicht möglich, Zähler deaktiviert</i> Drücken Sie Strg+C, um die Anwendung zu beenden Lassen Sie uns nun die Anwendung im Hintergrund ausführen: docker run -d -p 4000:80 freundliches Hallo Alle Containerinformationen anzeigen
Verwenden Sie nun „Docker Container Stop“, um den Prozess unter Verwendung der CONTAINER-ID zu beenden, wie unten gezeigt: Docker-Container stoppen 1fa4ab2cf395 4. Bild freigeben 4.1. Ich verwende das Docker-Register von Alibaba Cloud, das meiner Meinung nach schneller sein sollte. Zunächst benötigen Sie ein Alibaba Cloud-Konto. Melden Sie sich dann an, um ein neues Lager zu erstellen und den Namespace und andere Informationen festzulegen. 4.2 Melden Sie sich beim Docker-Register von Alibaba Cloud an. Für nachfolgende Vorgänge ist eine Anmeldung erforderlich. sudo docker login --username=admin registry.cn-hangzhou.aliyuncs.com 4.3 Markieren Sie das Bild. Das Tag ist optional. Wenn nicht, ist der Standardwert „latest“. Format: Docker-Tag Image-Name Registry-URL/Namespace/Repository-Name:[Tag] Zum Beispiel Docker-Tag-freundlichHallo registry.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest Anzeigen der Liste lokaler Spiegel Docker-Image ls 4.4 Bild freigeben Docker-Push-Registrierung.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest 4.5 Jetzt können Sie den folgenden Befehl auf jeder Maschine ausführen, um das Image auszuführen docker run -p 4000:80 registry.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest 4.6 Ziehen Sie das Bild Docker-Pull-Registrierung.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an Das könnte Sie auch interessieren:
|
<<: Mysql löscht doppelte Daten, um die kleinste ID-Lösung beizubehalten
>>: Zwei Möglichkeiten zum Schreiben gespeicherter Prozeduren in MySQL mit und ohne Rückgabewerte
Inhaltsverzeichnis 1. Verwenden von Set()+Array.f...
Die Webseite zeigt 403 Forbidden an Nginx (Yum-In...
Schritte zur Annotation von Metadeklarationen: 1. ...
Meine MySQL-Version ist MySQL V5.7.9, bitte verwe...
MySQL ist einfach zu installieren, schnell und ve...
vuex-persistenter Zustand Kernprinzip: Alle Vuex-...
Inhaltsverzeichnis 1. setTimeout()-Timer 2. Stopp...
Wenn die Position absolut ist, wird der Prozentsa...
Inhaltsverzeichnis Was ist Routing Grundlegende V...
Inhaltsverzeichnis 1. Warenkorb-Beispiel 2. Code-...
1. Einleitung Beim Filtern unbekannter oder teilw...
Kürzlich habe ich bei der Arbeit an einem Projekt...
Inhaltsverzeichnis Dokumentobjektmodell (DOM) DOM...
Isolationsebene für Datenbanktransaktionen Es gib...
Die endgültige Lösung ist im letzten Bild Wenn Si...