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?)
Ich habe versucht, CGI mit Python3 auszuführen.
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
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
(Es funktioniert einfach)
cgiserver.py
import http.server
http.server.test(HandlerClass=http.server.CGIHTTPRequestHandler)
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>
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))
Lokal (Mac-Seite) aus Dockerfile erstellen
$ docker build -t {Beliebiger Containername} .
Beispiel
$ docker build -t python_cgi .
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-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