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

Zusammenfassung dieses Artikels

Annahme

Die Befehlsnotation basiert auf der Annahme, dass "MacOS" als Host-PC verwendet wird.

Vorbereitung als Host-PC

In diesem Artikel erstellen wir einen lokalen PC als Docker-Host-PC. In diesem Fall sind Vorbereitungen zum Ausführen von Docker erforderlich. Es gibt verschiedene Methoden, aber für "MacOS" ist die Installation von "Docker für Mac" in Brew der schnellste Weg.

Terminal


brew cask install docker

Dadurch wird die Anwendung installiert. Starten Sie daher Docker.app lokal. Wenn oben rechts ein Symbol wie ein Wal angezeigt wird und wie unten gezeigt ausgeführt wird, ist es vollständig. スクリーンショット 2020-01-08 14.20.55.png

Endprodukt

Bilddiagramm

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

Quellcode

Siehe Github Repository.

Kurze Erklärung des Quellcodes

Es gibt zwei wesentliche Änderungen gegenüber Schritt 1 bei der Erstellung des Docker-Containers.

--Erstellen Sie neue Docker-Dateien für Webserver und App-Server --Erstellen Sie ein neues Makefile mit dem Startbefehl

Von diesen vereinfacht das zweite Makefile nur die Eingabe des Docker-Befehls, und die wesentliche Ergänzung ist das erste Dockerfile. Ich möchte einen Blick auf den Inhalt jeder Docker-Datei werfen. (Die Docker-Datei selbst wird später beschrieben.)

Webserver

Dockerfile


#Geben Sie das Basisbild an. In diesem Fall wird bis zur Version ein bestimmtes Tag angegeben.
FROM nginx:1.17.6-alpine

#Host-PC-Konfigurationsdatei(config/nginx.conf)In das oben erstellte Verzeichnis kopieren und senden
RUN mkdir -p /etc/nginx
COPY config/nginx.conf /etc/nginx/nginx.conf

Wenn Sie nur nginx verwenden möchten, können Sie einfach das auf Docker Hub veröffentlichte offizielle nginx-Image abrufen. Dieses Mal möchte ich die zur Hand erstellte Nginx-Einstellungsdatei lesen und starten, also mache ich die folgende Arbeit.

  1. Weisen Sie das Basisbild an
  2. Erstellen Sie einen Pfad zum Senden Ihrer eigenen Konfigurationsdatei
  3. Kopieren Sie Ihre eigene Konfigurationsdatei vom Host-PC auf dieses Image

App-Server

Dockerfile


#Dieses Mal basiert es auf einem Debian-basierten Python-Image
FROM python:3.8-slim-buster

#Übertragung der Konfigurationsdatei(Ich kann mir keinen geeigneten Ort vorstellen/Direkt unter der App)
RUN mkdir -p /app/config
COPY requirements.txt /app/requirements.txt
COPY config/gunicorn_settings.py /app/config/gunicorn_settings.py
COPY flask_app.py /app/flask_app.py

#Paketinstallation
RUN pip install -r /app/requirements.txt

EXPOSE 9876

WORKDIR /app

#Befehl beim Ausführen von run
# ENTRYPOINT->Mit CMD kann CMD zum Zeitpunkt der Ausführung mit dem Argument überschrieben werden
ENTRYPOINT [ "gunicorn", "flask_app:app" ]
CMD [ "-c", "/app/config/gunicorn_settings.py" ]

Sie können nur mit dem Basis-Image von os beginnen und Python usw. installieren. Da jedoch das offizielle Image von Python veröffentlicht wurde, werden wir diesmal darauf basierend beginnen. Bis zu "Paketinstallation" ist fast das gleiche wie der Webserver, aber darunter ist eine Beschreibung, die der Webserver nicht hatte. Ich mache folgendes.

  1. Versetzen Sie Port 9876 im App-Server-Container in den Status LISTEN.
  2. Setzen Sie das Basisverzeichnis beim Starten des Containers auf / app
  3. Führen Sie beim Starten des Containers den Befehl gunicorn flask_app: app -c / app / config / gunicorn_settings.py aus.

About Docker

Grund für Docker

Ich denke, es gibt einige Dinge, aber hier sind zwei der Vorteile, die ich fühle.

Vereinheitlichung der Entwicklungs- / Ausführungsumgebung und Vereinfachung der Vorbereitung

In der Vergangenheit musste der Entwickler bei der Entwicklung eines Teams eine Entwicklungsumgebung auf jedem Computer vorbereiten und dann mit der Entwicklung beginnen. Möglicherweise gibt es ein Dokument, das die Prozedur zeigt, aber in Wirklichkeit kann es mehr kosten, da die Umgebung aufgrund von unvollständigen Dokumenten oder Tool-Updates nicht ordnungsgemäß erstellt werden kann. Darüber hinaus besteht das Risiko, dass jeder Einzelne seine Sprache verbessert und subtile Unterschiede verursacht. Wenn Sie dagegen den zuvor vorbereiteten Docker-Container verwenden,

--Umwelt kann mit einer kleinen Anzahl von Befehlen erstellt werden (Docker Run)

Davon können Sie profitieren.

Container können in der Produktionsumgebung platziert werden

Nachdem der Betrieb in der Cloud mittlerweile an der Tagesordnung ist, sind viele Tools zur Container-Orchestrierung mit GKE usw. auf dem Markt. Da es sich nur um eine Container-Orchestrierung handelt, bedeutet dies, dass die Anwendung auch in der Produktionsumgebung tatsächlich auf dem Container ausgeführt wird. Natürlich müssen Umgebungsvariablen und Endpunkte zwischen Entwicklung, Staging und Produktion geändert werden, aber es kann auch von der Orchestrierungsseite übernommen werden, und auf jeden Fall ** Der Container, der in der Entwicklungsumgebung funktioniert hat, kann fast so verwendet werden, wie er in der Produktionsumgebung ist. Es wird betriebsbereit sein **.

Bilder und Behälter

Erstellen Sie zuerst ein Image (= build) und erstellen und starten Sie dann einen Container, der auf diesem Image basiert. Es ist kein gutes Beispiel, aber wenn Sie es durch ein PC-Spiel ersetzen

Was ist Docker Hub?

Ein Dienst, mit dem Sie von Ihnen erstellte Containerbilder hochladen, veröffentlichen und freigeben können. Kurz gesagt, es ist wie * Githubs Docker Limited Edition *. Die veröffentlichten Bilder können kostenlos heruntergeladen und verwendet werden. Wählen Sie beim Erstellen Ihres eigenen benutzerdefinierten Images das Basis-Image aus den in Docker Hub registrierten aus.

Bildzuverlässigkeit

Viele Bilder von Freiwilligen sind auch in Docker Hub registriert. Unter diesen sollte das Basisbild mit dem Tag "Docker Official Images" ausgewählt werden. Kurz gesagt, es ist ** weil es zuverlässig ist **, aber hier sind ein paar Bulletins.

Was ist eine Docker-Datei?

In dieser Datei werden Anweisungen beschrieben, mit denen eine Reihe von Vorgängen ausgeführt werden können, z. B. das Image, das die Basis des zu erstellenden Containers bildet, die Installation der Anwendung und die Vorbereitung zum Starten der Anwendung.

Weitere Informationen zur Beschreibung der Docker-Datei finden Sie unter hier.

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
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