[PYTHON] [Mit Bilddiagramm] Nginx + Gunicorn + Flask konvertiert zu Docker [Teil 2]

Zusammenfassung dieses Artikels

Annahme

Teil 1 Dies ist eine Fortsetzung des Artikels.

Endprodukt

Bilddiagramm

Flask_Nginx_unicorn_diagramdrawio-Step3-docker-compose (1).png

Quellcode

Siehe Github Repository.

Kurzer Kommentar

Im ersten Teil haben wir eine Docker-Datei erstellt, um den Webserver und den App-Server in jedem Container zu starten. Um die Kosten für das Starten dieser Container (in Bezug auf Startbefehle) zu reduzieren, starten Sie zwei Container mit einem Befehl "Docker-Compose". Die wichtigsten Änderungen sind wie folgt.

docker-compose.yml Datei

In diesem Fall muss Folgendes als Beziehung zwischen Containern und Beziehung zwischen Container-Hosts angegeben werden.

--App Server

docker-compose.yml


version: "3.7"  #Geben Sie die Version der Erstellungsdatei an
services:       #Fügen Sie eine Beschreibung für jeden Container unter dieser Ebene hinzu
###########App Server Einstellungen von hier###########
    app-server:              #Kann Dienstname, Hostname sein
        container_name: app-server  #Der Name des Containers
        build:                      #Blöcke erforderlich, wenn Sie mit einer von Ihnen selbst erstellten Docker-Datei erstellen
            context: ../../         #Geben Sie den Pfad für die Docker-Erstellung an, den relativen Pfad, von dem aus sich die yml-Datei befindet
            dockerfile: deployment/dockerfiles/app-server/Dockerfile #Dockerfile zu verwenden. Wird aus dem Kontextpfad angegeben
        networks:                   #Einstellungen für das Netzwerk, zu dem dieser Dienst gehört
            my_host_network:        #Siehe unten meine_host_Gehören zum Netzwerk
                aliases:
                    - uwsgi-server  # my_host_Es ist möglich, diesen Namen im Netzwerk zu unterscheiden
        expose:
            - 9876                  #Versetzen Sie diesen Port in den Status LISTEN
        restart: always             #Richtlinie zum Neustart des Dienstes
###########Bis zu diesem Punkt App Server Einstellungen###########
###########Webserver-Einstellungen von hier###########
    web-server:
        container_name: web-server
        build:
            context: ../../
            dockerfile: deployment/dockerfiles/web-server/Dockerfile
        networks:
            my_host_network:
                aliases:
                    - nginx-server
        ports:
            - 9090:9123     #Portweiterleitung von 9090 auf dem Host-PC an 9123 auf dem Container
        depends_on:         #Geben Sie die Abhängigkeit an. Netz-App vor dem Start des Servers-Startet den Server
            - app-server
        restart: always
###########Webserver-Einstellungen bisher###########

###########Netzwerkeinstellungen von hier###########
networks:
    my_host_network:            #Aliasname bei Verwendung in den oberen Servereinstellungen
        name: my-nginx-network  #Netzwerkname
        driver: bridge          #Fahrertyp, Brücke oder Überlagerung

Für das Netzwerk wird "Bridge" verwendet, da mehrere Container auf einem Host-PC bereitgestellt werden. Verwenden Sie "Overlay", wenn Sie mehrere Hosts haben.

Datei nginx.conf

Bis jetzt wurden beide Server (direkt) auf dem Host-PC ausgeführt, daher habe ich "localhost" als Reverse-Proxy-Ziel angegeben. In diesem Schritt muss das Verbindungsziel zum App-Server-Container geändert werden.

nginx.conf


http {
	server {
        # 「uwsgi-Server "ist Docker-compose.mein set mit yml_host_Netzwerk-Aliasname des App-Servers im Netzwerk
    		location / {
        		proxy_pass http://uwsgi-server:9876;
        		# before: proxy_pass http://127.0.0.1:9876;
    		}

		location /health {
        		proxy_pass http://uwsgi-server:9876/health;
        		# before: proxy_pass http://127.0.0.1:9876/health;
    		}
    	}
}

Container starten / löschen

Terminal


docker-compose -f deployment/docker-compose/docker-compose.yml up
# -Geben Sie die Einstellungsdatei mit der Option f an

Mit up wird das Image gemäß den Einstellungen der yml-Datei erstellt und der Container erstellt. Bild von build + start. Es kann auch im Hintergrund ausgeführt werden, indem die Option -d hinzugefügt wird.

Strg + C, wenn im Vordergrund ausgeführt wird Wenn Sie es im Hintergrund ausführen, können Sie den Container mit "Docker-Compose -f Deployment / Docker-Compose / Docker-Compose.yml Stop" stoppen.

Terminal


docker-compose -f deployment/docker-compose/docker-compose.yml down

Durch Hinzufügen der Option "--rmi all" werden auch alle Originalbilder gelöscht.

About docker-compose

Praktische Punkte

Grob gesagt sind zwei Punkte wie folgt.

  1. Sie können mehrere Container mit einem Befehl starten und stoppen.
  2. Die Beziehung zwischen Containern kann in der Einstellungsdatei angegeben werden.

Angenommen, Sie müssen für 1 10 Container starten. Die zehnmalige Eingabe von "Docker Run {Container}" ist ein angemessener Preis, nicht wahr? Sie können vergessen, eine zu starten. Es wird mit einem Befehl von "Docker-Compose Up" abgeschlossen, so dass der Start nicht ausgelassen wird, und vor allem ist es einfach. (Wenn Sie sich nur hier konzentrieren, können Sie eine Shell schreiben)

In Bezug auf 2 nehmen wir diesen Schritt als Beispiel. Es war nicht möglich, jeden Container in "Dockerfile" zu beschreiben, und im Fall von "Docker Run" gab es einige Startbedingungen, die als Startoptionen angegeben werden mussten.

Durch die Verwendung von "Docker-Compose" können die oben genannten Einstellungen in einer yml-Datei definiert werden, sodass die Konstruktionsschwierigkeiten einschließlich der Beziehung zwischen Containern und Container-Hosts verringert werden können. .. Insbesondere ist der Nutzwert in den folgenden Fällen hoch.

Ist Docker-Compose in der Produktion verfügbar?

Es ist meine persönliche Meinung, aber ich denke, die meisten von ihnen werden nicht oder lokal verwendet. Wenn Sie einen Container erstellen und die Beziehungen zwischen den Containern definieren können, ist dies nicht das Ende der Produktion. Um den Service in einer Produktions- (und Staging-) Umgebung bereitzustellen, müssen wir zusätzlich zu den bisherigen Schritten Katakana-Begriffe wie "Skalierbarkeit, Lastausgleich, Netzwerk, Laufzeit" usw. berücksichtigen. Es gibt einige Bereiche, die mit "Docker-Compose" gelöst werden können, aber es scheint schwierig, alles zu tun. Die für die Orchestrierung verwendete wird weiterhin "kubernetes" sein. Wenn die Bereitstellung eines "Kubernetes" -Clusters in einer lokalen Umgebung hinsichtlich der Spezifikationen streng ist oder einfach das Verhalten einer Anwendung überprüft wird, kann "Docker-Compose" einfacher verwendet werden.

Recommended Posts

[Mit Bilddiagramm] Nginx + Gunicorn + Flask konvertiert zu Docker [Teil 2]
[Mit Bilddiagramm] Nginx + Gunicorn + Flask konvertiert zu Docker [Teil 1]
Ausgabeprotokoll an die Konsole mit Flask + Nginx auf Docker
Bis die von Flask + MySQL erstellte API in Docker konvertiert wird
Zusammenfassung der Nginx-Einstellungen (Flask + Docker + Gunicorn Edition)
Konvertieren der Django-Umgebung in Docker (Docker + Django + Gunicorn + Nginx) Teil 2
Führen Sie Flask unter CentOS mit Python3.4, Gunicorn + Nginx aus.
Verwenden der Flasche mit Nginx + Gunicorn-Konfiguration [Lokale Umgebung]
Konvertieren der Django-Umgebung in Docker (Docker + Django + Gunicorn + Nginx) Teil 3
Hochladen mit Heroku, Flask, Python, Git (Teil 3)
Starten Sie mit Docker eine Python-Webanwendung auf Nginx + Gunicorn
Hochladen mit Heroku, Flask, Python, Git (Teil 1)
Hochladen mit Heroku, Flask, Python, Git (Teil 2)
Bildverarbeitung mit Python (Teil 2)
API mit Flask + uWSGI + Nginx
Vom Umgebungsaufbau bis zum Einsatz für Kolben + Heroku mit Docker
Bildverarbeitung mit Python (Teil 1)
Ich habe es beim Versuch bemerkt, Ninix-Aya mit Docker auszuführen (Teil 3).
Bildverarbeitung mit Python (3)
(Hinweis) Hinweise zum Erstellen einer TensorFlow + Flask + Nginx-Umgebung mit Docker Compose
Erstellen eines Flask-Servers mit Docker
So schreiben Sie ein Docker-Basis-Image
Konvertieren Sie PDF in Image mit ImageMagick
Anwendungsentwicklung mit Docker + Python + Flask
So melden Sie sich bei Docker + NGINX an
Bild-Upload-Funktion mit Vue.js + Flask
So schneiden Sie den unteren rechten Teil des Bildes mit Python OpenCV
Ich habe ein Systemkonfigurationsdiagramm mit Diagrams on Docker geschrieben
HTML-Mail mit Bild zum Senden mit Python
Bildklassifizierung mit Keras-Von der Vorverarbeitung zum Klassifizierungstest-
Einführung in das Auffüllen von Python-Bildern Auffüllen von Bildern mit ImageDataGenerator
Senden Sie CSS mit Flask komprimiert an Gzip
Stellen Sie mit Python in Docker eine Verbindung zu MySQL her
Verwenden Sie die Verschlüsselung der Verschlüsselungsbibliothek mit dem Python-Image von Docker
Erstellen Sie mit Docker eine Python + uWSGI + Nginx-Umgebung
[Teil1] Scraping mit Python → Organisieren Sie bis zu CSV!
[Golang] Erstellen Sie ein Docker-Image mit Github-Aktionen
Erstellen Sie einen Webdienst mit Docker + Flask
Starten Sie die Flask-Anwendung mit Docker auf Heroku
Versuchen Sie, ein Bild mit Entfremdung zu erzeugen
Erstellen Sie mit Docker eine Umgebung aus NGINX + NGINX Unit + MySQL
So installieren Sie Python3 mit Docker Centos
Beispiel für die Wavelet-Konvertierung von Bildern in Python
Flasche + Gunicorn + Nginx + Supervisor Bis es funktioniert