Inhaltsverzeichnis
DEBIAN_FRONTEND
requirements.txt
Dateireihenfolge
Anwendungsschlüssel
Gunicorn
supervisord
学到的东西以及未来的目标
Heim Backend-Entwicklung Python-Tutorial Zusammenfassung der Methoden zum Bereitstellen von Python-Anwendungen mit Docker

Zusammenfassung der Methoden zum Bereitstellen von Python-Anwendungen mit Docker

Mar 23, 2017 pm 04:10 PM
docker

Dieser Artikel basiert auf den wertvollen Erfahrungen, die das Autorenteam während des langfristigen Entwicklungsprozesses gesammelt hat. Gunicorn und Nginx sind die am häufigsten verwendeten Softwareprogramme für die Entwicklung von Webanwendungen Planen Sie, Docker zum Bereitstellen von Python-Anwendungen zu verwenden. Diese Best Practices sind von großem Referenzwert. Gleichzeitig hoffe ich, dass Sie in Ihrer täglichen Praxis auch die „Gruben“, auf die Sie gestoßen sind, und Ihre wertvollen Erfahrungen teilen können, damit alle gemeinsam Fortschritte machen können!

Mit Docker können wir Python-Anwendungen einfach und effizient bereitstellen. Gleichzeitig gibt es einige Best Practices, die uns helfen, die Bereitstellung reibungslos abzuschließen. Das heißt natürlich nicht, dass diese Best Practices die einzige Möglichkeit zur Implementierung darstellen, aber unser Team hat festgestellt, dass sie hochverfügbar und einfach zu warten sind. Beachten Sie, dass der Großteil des Inhalts in diesem Artikel nur meine Position darstellt. Es gibt viele Implementierungen, die auf Docker basieren und die Sie nach Belieben auswählen können. Ich werde in diesem Artikel nicht zu viel auf Volume eingehen, da es möglicherweise ein separates Thema zur Erklärung erfordert. Normalerweise verwenden wir Volumes, um den Quellcode in den Container zu kopieren, anstatt ihn bei jeder Ausführung neu zu erstellen.

DEBIAN_FRONTEND

Docker-Benutzer sollten mit dieser Umgebungsvariablen vertraut sein, die dem Betriebssystem mitteilt, wo Benutzereingaben eingehen sollen. Wenn es auf „nicht interaktiv“ eingestellt ist, können Sie Befehle direkt ausführen, ohne eine Eingabe vom Benutzer anzufordern (Anmerkung des Übersetzers: Alle Vorgänge sind nicht interaktiv). Dies ist besonders nützlich, wenn der Befehl apt-get ausgeführt wird, da der Benutzer ständig gefragt wird, zu welchem ​​Schritt er fortgeschritten ist, und eine ständige Bestätigung erforderlich ist. Im nicht interaktiven Modus werden die Standardoptionen ausgewählt und der Build so schnell wie möglich abgeschlossen.

Bitte stellen Sie sicher, dass Sie diese Option nur im RUN-Befehl festlegen, der in der Docker-Datei aufgerufen wird, und nicht den ENV-Befehl verwenden, um sie global festzulegen, da der ENV-Befehl während des gesamten Container-Laufvorgangs wirksam wird, also wann Sie übergeben BASH. Bei der Interaktion mit Containern kann es zu Problemen kommen, wenn globale Einstellungen vorgenommen werden. Ein Beispiel lautet wie folgt:

# 正确的做法 - 只为这个命令设置ENV变量
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y python3
# 错误地做法 - 为接下来的任何命令都设置ENV变量,包括正在运行地容器
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get install -y python3
Nach dem Login kopieren

requirements.txt

Im Vergleich zum Basiscode (Codebasis) ändern sich Anwendungsabhängigkeiten selten, sodass wir Projektabhängigkeiten in der Docker-Datei installieren können kann auch nachfolgende Builds beschleunigen (nachfolgende Builds müssen nur den geänderten Code erstellen). Der hierarchische Aufbau von Docker-Containern kann den Abhängigkeitsinstallationsprozess zwischenspeichern, sodass nachfolgende Builds sehr schnell erfolgen, da kein erneutes Herunterladen und Erstellen von Abhängigkeiten erforderlich ist.

Dateireihenfolge

Gemäß der oben genannten Idee (unter Verwendung des Caches) zur Schlussfolgerung ist die Reihenfolge, in der Dateien dem Container hinzugefügt werden, entscheidend. Wir sollten häufig geänderte Dateien unterhalb der Docker-Datei platzieren, um den Cache voll auszunutzen und den Docker-Build-Prozess zu beschleunigen. Wenn sich beispielsweise Anwendungskonfiguration, Systemkonfiguration und Abhängigkeiten selten ändern, können wir sie oben in der Docker-Datei platzieren. Quelldateien wie Routingdateien, Ansichten und Datenbankcode ändern sich häufig, sodass wir sie unterhalb der Docker-Datei platzieren können. Beachten Sie, dass sie sich unterhalb der Docker-Konfigurationsbefehle (EXPOSE, ENV usw.) befindet.

Denken Sie auch nicht darüber nach, wie Sie Ihre Dateien nach Docker kopieren, da dies Ihren Build nicht beschleunigt, da die meisten Dateien, z. B. Anwendungsquelldateien, überhaupt nicht verwendet werden.

Anwendungsschlüssel

Wir wussten vorher nicht, wie wir den Anwendungsschlüssel sicher an die Anwendung übergeben, aber später stellten wir fest, dass wir den Parameter docker run im Befehl env-file verwenden können . Wir werden alle Schlüssel und Konfigurationen in die Datei app_config.list einfügen und sie dann über diese Datei an die Anwendung übermitteln. Konkret:

docker run -d -t -—env-file app_config.list <image:tag>
Nach dem Login kopieren

Mit dieser Methode können wir Anwendungseinstellungen und Schlüssel einfach ändern, ohne einen Container neu erstellen zu müssen.

Hinweis: Bitte stellen Sie sicher, dass app_config.list im Datensatz der .gitignore-Datei enthalten ist, andernfalls wird es nicht in die Quelldatei eingecheckt.

Gunicorn

Wir verwenden Gunicorn als Anwendungsserver im Container, der sehr stabil ist und eine sehr gute Leistung erbringt. Er verfügt über viele Konfigurationsoptionen, z. B. die Angabe der Anzahl und Art der Worker (grüne Threads, Gevent usw.) können Sie Ihre Anwendung je nach Auslastung optimieren, um eine optimale Leistung zu erzielen.

Gunicorn zu starten ist einfach:

# 安装
pip3 install gunicorn

# 运行服务器
gunicorn api:app -w 4 -b 127.0.0.1:5000
Nach dem Login kopieren

Der letzte Schritt besteht darin, Ihren Anwendungsserver hinter Nginx auszuführen, damit Sie Lastenausgleich durchführen können.

supervisord

Haben Sie jemals darüber nachgedacht, mehrere Prozesse in einem Container auszuführen? Ich denke, Supervisord ist definitiv Ihr bestes Hilfstool. Angenommen, wir möchten einen Container bereitstellen, der einen Nginx-Reverse-Proxy und eine Gunicorn-Anwendung enthält. Sie könnten es wahrscheinlich mit einem BASH-Skript machen, aber machen wir es etwas einfacher.

Supervisor ist „ein Prozesskontrollsystem, das Benutzer dabei unterstützt, einige Prozesse auf UNIX-ähnlichen Betriebssystemen zu überwachen und zu steuern.“ Klingt perfekt! Sie müssen Supervisor zuerst in Ihrem Docker-Container installieren.

RUN DEBIAN_FRONTEND=noninteractive apt-get install -y
supervisor
Nach dem Login kopieren

Damit Supervisor weiß, was ausgeführt werden soll und wie der Prozess verwaltet werden soll, müssen wir als Nächstes eine Konfigurationsdatei dafür schreiben.

[supervisord]
nodaemon = true  # 这个会让supervisord运行在前端

[program:nginx]  # 你想运行的第一个程序的命名
command = /usr/sbin/nginx  # nginx可执行程序的路径
startsecs = 5  # 如果nginx保持开启5s,我们视为启动成功

[program:app-gunicorn]
command = gunicorn api -w 4 -b 127.0.0.1:5000
startsecs = 5
Nach dem Login kopieren

Dies ist eine sehr einfache Konfiguration. Sie enthält auch viele Konfigurationselemente, wie z. B. Steuerprotokolle, stdout/stderr-Umleitung, Neustartstrategie usw. Dieses Tool ist wirklich schön.

Sobald Sie die Konfiguration abgeschlossen haben, stellen Sie sicher, dass Docker sie in den Container kopiert.

ADD supervisord.conf /etc/supervisord.conf
Nach dem Login kopieren

Lassen Sie Supervisor als Selbststartbefehl für den Container dienen.

CMD supervisord -c /etc/supervisord.conf
Nach dem Login kopieren

它将会在容器启动的时候,运行Gunicorn和Nginx。如果已经配置过了,那将会按需重启它们。

学到的东西以及未来的目标

我们已经花了很长时间在Docker中部署代码,并且接下来会投入更多的时间。在使用Docker的过程中,我们学到的最重要经验就是如何最小化思考(think minimally)。在一个容器中运行你的整个系统真的很诱人,但是在应用各自的容器中运行应用进程却更容易维护。一般情况下,我们会在容器中运行Nignx和Web服务器,并且在一些场景中,使用单独的容器来运行Nginx却没有任何优势,它可能只会增加复杂度。我们发现对于大多数情况,它在容器中的开销是可接受的。

我希望这些信息对各位有价值!当我们团队学到更多最佳实践时,我会更新这篇文章。

Das obige ist der detaillierte Inhalt vonZusammenfassung der Methoden zum Bereitstellen von Python-Anwendungen mit Docker. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verpacken Sie ein Projekt mit Pycharm So verpacken Sie ein Projekt mit Pycharm Apr 25, 2024 am 03:54 AM

Es gibt vier Möglichkeiten, ein Projekt in PyCharm zu verpacken: Als separate ausführbare Datei verpacken: In das EXE-Einzeldateiformat exportieren. Als Installationsprogramm verpackt: Setuptools-Makefile generieren und erstellen. Als Docker-Image verpacken: Geben Sie einen Image-Namen an, passen Sie die Build-Optionen an und erstellen Sie. Als Container verpacken: Geben Sie das zu erstellende Image an, passen Sie die Laufzeitoptionen an und starten Sie den Container.

PI -Knotenunterricht: Was ist ein PI -Knoten? Wie installiere und richte ich einen PI -Knoten ein? PI -Knotenunterricht: Was ist ein PI -Knoten? Wie installiere und richte ich einen PI -Knoten ein? Mar 05, 2025 pm 05:57 PM

Detaillierte Erläuterungs- und Installationshandbuch für Pinetwork -Knoten In diesem Artikel wird das Pinetwork -Ökosystem im Detail vorgestellt - PI -Knoten, eine Schlüsselrolle im Pinetwork -Ökosystem und vollständige Schritte für die Installation und Konfiguration. Nach dem Start des Pinetwork -Blockchain -Testnetzes sind PI -Knoten zu einem wichtigen Bestandteil vieler Pioniere geworden, die aktiv an den Tests teilnehmen und sich auf die bevorstehende Hauptnetzwerkveröffentlichung vorbereiten. Wenn Sie Pinetwork noch nicht kennen, wenden Sie sich bitte an was Picoin ist? Was ist der Preis für die Auflistung? PI -Nutzung, Bergbau und Sicherheitsanalyse. Was ist Pinetwork? Das Pinetwork -Projekt begann 2019 und besitzt seine exklusive Kryptowährung PI -Münze. Das Projekt zielt darauf ab, eine zu erstellen, an der jeder teilnehmen kann

Agile Entwicklung und Betrieb der PHP-Microservice-Containerisierung Agile Entwicklung und Betrieb der PHP-Microservice-Containerisierung May 08, 2024 pm 02:21 PM

Antwort: PHP-Microservices werden mit HelmCharts für eine agile Entwicklung bereitgestellt und mit DockerContainer für Isolation und Skalierbarkeit in Containern verpackt. Detaillierte Beschreibung: Verwenden Sie HelmCharts, um PHP-Microservices automatisch bereitzustellen, um eine agile Entwicklung zu erreichen. Docker-Images ermöglichen eine schnelle Iteration und Versionskontrolle von Microservices. Der DockerContainer-Standard isoliert Microservices und Kubernetes verwaltet die Verfügbarkeit und Skalierbarkeit der Container. Verwenden Sie Prometheus und Grafana, um die Leistung und den Zustand von Microservices zu überwachen und Alarme und automatische Reparaturmechanismen zu erstellen.

So starten Sie das Golang-Programm So starten Sie das Golang-Programm Apr 21, 2024 am 12:47 AM

Es gibt vier Möglichkeiten, ein Go-Programm zu starten: Über die Befehlszeile: go run main.go Starten über das „Ausführen“- oder „Debug“-Menü der IDE Starten eines Containers mit einem Container-Orchestrierungstool (z. B. Docker oder Kubernetes) Verwenden von systemd oder Supervisor auf Unix-Systemen. Wird als Systemdienst ausgeführt

Docker schließt die lokale Bereitstellung des großen Open-Source-Modells LLama3 in drei Minuten ab Docker schließt die lokale Bereitstellung des großen Open-Source-Modells LLama3 in drei Minuten ab Apr 26, 2024 am 10:19 AM

Übersicht LLaMA-3 (LargeLanguageModelMetaAI3) ist ein groß angelegtes Open-Source-Modell für generative künstliche Intelligenz, das von Meta Company entwickelt wurde. Im Vergleich zur Vorgängergeneration LLaMA-2 gibt es keine wesentlichen Änderungen in der Modellstruktur. Das LLaMA-3-Modell ist in verschiedene Maßstabsversionen unterteilt, darunter kleine, mittlere und große, um unterschiedlichen Anwendungsanforderungen und Rechenressourcen gerecht zu werden. Die Parametergröße kleiner Modelle beträgt 8 B, die Parametergröße mittlerer Modelle beträgt 70 B und die Parametergröße großer Modelle erreicht 400 B. Beim Training besteht das Ziel jedoch darin, multimodale und mehrsprachige Funktionalität zu erreichen, und die Ergebnisse werden voraussichtlich mit GPT4/GPT4V vergleichbar sein. Ollama installierenOllama ist ein Open-Source-Großsprachenmodell (LL

So installieren Sie Deepseek So installieren Sie Deepseek Feb 19, 2025 pm 05:48 PM

Es gibt viele Möglichkeiten, Deepseek zu installieren, einschließlich: kompilieren Sie von Quelle (für erfahrene Entwickler) mit vorberechtigten Paketen (für Windows -Benutzer) mit Docker -Containern (für bequem am besten, um die Kompatibilität nicht zu sorgen), unabhängig von der Methode, die Sie auswählen, bitte lesen Die offiziellen Dokumente vorbereiten sie sorgfältig und bereiten sie voll und ganz vor, um unnötige Schwierigkeiten zu vermeiden.

Architektur und Praxis verteilter PHP-Systeme Architektur und Praxis verteilter PHP-Systeme May 04, 2024 am 10:33 AM

Die verteilte PHP-Systemarchitektur erreicht Skalierbarkeit, Leistung und Fehlertoleranz durch die Verteilung verschiedener Komponenten auf mit dem Netzwerk verbundene Maschinen. Die Architektur umfasst Anwendungsserver, Nachrichtenwarteschlangen, Datenbanken, Caches und Load Balancer. Zu den Schritten zur Migration von PHP-Anwendungen auf eine verteilte Architektur gehören: Identifizieren von Dienstgrenzen, Auswählen eines Nachrichtenwarteschlangensystems, Einführung eines Microservices-Frameworks, Bereitstellung für die Containerverwaltung, Diensterkennung

Wie kann die Leistung von Java-Funktionen durch Containerisierung optimiert werden? Wie kann die Leistung von Java-Funktionen durch Containerisierung optimiert werden? Apr 29, 2024 pm 03:09 PM

Die Containerisierung verbessert die Leistung von Java-Funktionen auf folgende Weise: Ressourcenisolation – Gewährleistung einer isolierten Computerumgebung und Vermeidung von Ressourcenkonflikten. Leicht – beansprucht weniger Systemressourcen und verbessert die Laufzeitleistung. Schneller Start – reduziert Verzögerungen bei der Funktionsausführung. Konsistenz – Entkoppeln Sie Anwendungen und Infrastruktur, um ein konsistentes Verhalten in allen Umgebungen sicherzustellen.

See all articles