Erstellen Sie einen CGI-Server, der unter Python 3 in Docker ausgeführt wird

Einführung

Mein Name ist Ryosuke Kamei und ich bin ein IT-Berater, der auf der Idee der "sanften IT" basiert! Derzeit ist meine Arbeit vorgelagert und konzentriert sich auf Anforderungsanalyse und Anforderungsdefinition, aber ich schreibe auch Programme! Verwenden Sie das Image der Python3-Serie (3.5.2 vom 18. Juli 2016) in Docker, installieren Sie CGIServer und greifen Sie über den Browser zu. (Es gibt nicht viele Informationen zu Python3 + Docker ~ Ich hatte Schwierigkeiten zu weinen)

Bevor wir das Framework einfügen, überprüfen wir, wie Python als Webserver funktioniert. (Ist es Hello World of Web-Anwendung?)

Referenz (sehr hilfreich)

Ich habe versucht, CGI mit Python3 auszuführen.

1. Bereiten Sie die Datei vor.

Es wird davon ausgegangen, dass Docker installiert ist.

Bereiten Sie die folgenden vier Dateien im selben Ordner vor. 1-1. Dockerfike 1-2. CGI-Server-Startdatei 1-3. index.html 1-4. In Python3 geschriebenes CGI-Programm

1-1. Docker-Datei erstellen

Speichern Sie es in einem der folgenden lokalen Ordner.

Dockerfile


#Python ist aus dem Bild
FROM python:3.5.2
MAINTAINER Ryosuke Kamei <[email protected]>

#Benutzer erstellt
RUN groupadd web
RUN useradd -d /home/python -m python

WORKDIR /home/python
#Server-Installationsdatei
ADD cgiserver.py /home/python
#HTML zum Testen
ADD index.html /home/python
# cgi-Bin-Ordner erstellen
RUN mkdir cgi-bin
ADD cgitest.py /home/python/cgi-bin
RUN chmod 755 /home/python/cgi-bin/cgitest.py

#Starten Sie den CGI-Server, indem Sie die Portnummer angeben
EXPOSE 8000
ENTRYPOINT ["/usr/local/bin/python", "/home/python/cgiserver.py"]
USER python

1-2. Erstellen Sie eine CGI-Server-Startdatei

(Es funktioniert einfach)

cgiserver.py


import http.server
http.server.test(HandlerClass=http.server.CGIHTTPRequestHandler)

1-3. Erstellen Sie index.html

Dies ist der HTML-Code der oberen Seite. Es gibt ein Formular und eine Schaltfläche zum Senden. Die hier eingegebenen Zeichen werden auf dem nächsten Bildschirm angezeigt.

index.html


<!DOCTYPE html>
<html>
<head>
<title>CGI Sample</title>
</head>
<body>
<form action="/cgi-bin/cgitest.py" method="POST">
  <input type="text" name="text" value="test" />  
  <input type="submit" name="submit" />
</form>
</body>
</html>

1-4. In Python3 geschriebenes CGI-Programm

Es ist ein Programm, das den in index.html eingegebenen Wert anzeigt.

cgitest.py


#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import cgi

html_body = """
<!DOCTYPE html>
<html>
<head>
<title>Empfangene Daten anzeigen</title>
<style>
h1 {
font-size: 3em;
}
</style>
</head>
<body>
<h1>%s</h1>
</body>
</html>
"""

form = cgi.FieldStorage()
text = form.getvalue('text','')

print(html_body % (text))

2. Erstellen Sie den Container aus der Docker-Datei

Lokal (Mac-Seite) aus Dockerfile erstellen


$ docker build -t {Beliebiger Containername} .
Beispiel
$ docker build -t python_cgi .

3. Container starten (lokale Mac-Seite)

Es geht darum, "-p 8000: 8000" anzugeben. Ich habe auch "EXPOSE 8000" in die Docker-Datei geschrieben.

Starten Sie den Container lokal (Mac-Seite)


$ docker run -d -p 8000:8000 {Containername zum Zeitpunkt der Erstellung angegeben}
Beispiel
$ docker run -d -p 8000:8000 python_cgi

Zugriff mit einem Browser http://192.168.99.100:8000/

Drücken Sie die Senden-Taste und Sie sehen die im Formular eingegebenen Werte!

4. Erklärung der Docker-Datei

4-1. Python ist aus dem Bild Ich habe versucht, es mit make zu installieren, aber es ist noch allgemeiner, das offizielle Bild von Python zu verwenden (lacht).

Dockerfile


FROM python:3.5.2
MAINTAINER Ryosuke Kamei <[email protected]>

4-2. Benutzererstellung Wenn Sie CGI ausführen, funktioniert es nicht gut, wenn Sie über Root-Rechte verfügen. Erstellen Sie daher einen dedizierten Benutzer. (Ich war ziemlich süchtig danach und stellte fest, dass es keine Infrastruktur gab)

Dockerfile


#Benutzer erstellt
RUN groupadd web
RUN useradd -d /home/python -m python

4-3. Legen Sie die Datei ab

Platzieren Sie jede Datei. cgitest.py erstellt einen "cgi-bin" -Ordner und legt ihn dort ab. Setzen Sie außerdem die Berechtigung auf "755". Ansonsten platzieren Sie es direkt unter dem HOME des Benutzers. (Es scheint überall gut zu sein, solange der Python-Pfad vorhanden ist. Ich bin überrascht!)

Dockerfile


WORKDIR /home/python
#Server-Installationsdatei
ADD cgiserver.py /home/python
#HTML zum Testen
ADD index.html /home/python
# cgi-Bin-Ordner erstellen
RUN mkdir cgi-bin
ADD cgitest.py /home/python/cgi-bin
RUN chmod 755 /home/python/cgi-bin/cgitest.py

4-4. Fertigstellen Geben Sie die Portnummer mit EXPOSE an, starten Sie "cgiserver.py" mit ENTRYPOINT und geben Sie den neu erstellten Benutzer "python" mit USER an.

Dockerfile


#Starten Sie den CGI-Server, indem Sie die Portnummer angeben
EXPOSE 8000
ENTRYPOINT ["/usr/local/bin/python", "/home/python/cgiserver.py"]
USER python

Wenn Sie danach, wie in 3 erläutert, einen Container erstellen und starten, wird er als Webserver ausgeführt!

Recommended Posts

Erstellen Sie einen CGI-Server, der unter Python 3 in Docker ausgeführt wird
Docker bauen Python basierend auf alpinen
Build Python auf Ubuntu
Installieren Sie Python 3.6 auf Docker
Erstellen Sie eine Python-Umgebung unter Windows
So erstellen Sie eine Django (Python) -Umgebung auf Docker
Führen Sie Pythons CGI auf CORESERVER aus
Führen Sie in Python geschriebenes CGI auf Sakuras Mietserver aus
Erstellen Sie eine Python-Umgebung mit Windows
Streunender Build von Python 3 auf Sakuras Mietserver (Hinweis)
Lösung für unzugänglichen Gin-Server, der auf dem Docker-Container ausgeführt wird
Erstellen Sie unter CentOS 7.7 eine Python-Umgebung für Ihren Heimserver
Versuchen Sie, Tensorflow auf Docker + Anaconda auszuführen
Führen Sie das Docker-Image von TensorFlow unter Python3 aus
Unter Windows erstellte Python-CGI-Datei
Erstellen Sie die Python 3.8 + Pipenv-Umgebung unter Ubuntu 18.04
Erstellen Sie eine Python3-Umgebung unter CentOS7
Erstellen Sie Python 1.0
Erstellen Sie das Lasttest-Tool Locust 1.1 auf Docker
Migrieren Sie Django-Anwendungen, die unter Python 2.7 ausgeführt werden, auf Python 3.5
CGI Server (1) Python Edition in einer Zeile
Erstellen Sie mit Docker eine Jupyter Lab (Python) -Umgebung
Build-Umgebung für Python 2.7, 3.4, 3.5-Erweiterungsmodule unter Windows
Erstellen Sie Python 3 und OpenCV unter Ubuntu 18.04
Erstellen Sie eine Python-Umgebung unter MacOS (Catallina)
Erstellen Sie einen NFS-Server unter Arch Linux
Erstellen Sie einen einfachen WebDAV-Server unter Linux
Erstellt Ubuntu, Python, OpenCV-Umgebung auf Docker
Erstellen Sie einen Samba-Server unter Arch Linux
Erstellen Sie eine Python-Umgebung mit Anaconda auf einem Mac
Docker-Datei: Installieren Sie Docker auf einem Linux-Server
Erstellen Sie ein Jupyter-Notebook auf einem Remote-Server (CentOS).
Lassen Sie uns einen WEB-Server mit Chromebook einrichten
Installieren Sie Python3 auf dem Mixhost-Server [Derzeit NG]
Erstellen Sie eine Python + OpenCV-Umgebung in Cloud9
Führen Sie den Python-WSGI-Server auf der NGINX-Einheit aus
Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung! [Einfache Konstruktion]
Streuen Sie Python-3.8.5 unter CentOS ohne Root-Rechte
Ein Memo, das ein Tutorial zum Ausführen von Python auf Heroku erstellt hat
Erstellen Sie eine LAMP-Umgebung auf Ihrem lokalen Docker
[Hinweis] Erstellen Sie eine Python-Umgebung auf dem Mietserver "CORESERVER".
Pykintone auf Docker
Erstellen Sie eine Python-Umgebung mit pyenv auf EC2 (Ubuntu)
Erstellen Sie die Python3.5 + matplotlib-Umgebung unter Ubuntu 12 mit Anaconda
Python unter Windows
Twitter mit Python3
Erstellen Sie einfach eine Python 3-Ausführungsumgebung unter Windows
Erstellen Sie eine Python-Umgebung mit ansible auf centos6
Erstellen Sie eine Python-Umgebung auf einem Mac (Mountain Lion)
Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung! [Versuch und Irrtum]
Python CGI-Grundlagen
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Erstellen Sie eine Python-Entwicklungsumgebung auf Ihrem Mac
Python auf Mac
Eine Geschichte über das Ausführen von Python auf PHP auf Heroku
Python bei Docker
Erstellen Sie eine Python3 + -Kolbenumgebung auf der Compute Engine von GCP
Python auf Windbg
Erstellen einer Python-Umgebung auf dem Sakura VPS-Server