Je m'appelle Ryosuke Kamei et je suis consultant en informatique basé sur l'idée du "doux IT"! Actuellement, mon travail est en amont, axé sur l'analyse et la définition des exigences, mais j'écris aussi des programmes! Utilisez l'image de la série Python3 (3.5.2 à compter du 18 juillet 2016) sur Docker, installez CGIServer et accédez à partir du navigateur. (Il n'y a pas beaucoup d'informations sur Python3 + Docker ~ J'ai eu du mal à pleurer)
Avant de mettre dans le cadre, vérifions comment Python fonctionne en tant que serveur Web. (S'agit-il de l'application Hello World of Web?)
J'ai essayé d'exécuter CGI avec python3.
On suppose que docker est installé.
Préparez les quatre fichiers suivants dans le même dossier. 1-1. Dockerfike 1-2. Fichier de démarrage du serveur CGI 1-3. index.html 1-4. Programme CGI écrit en Python3
Enregistrez-le dans l'un des dossiers locaux ci-dessous.
Dockerfile
#python vient de l'image
FROM python:3.5.2
MAINTAINER Ryosuke Kamei <[email protected]>
#Utilisateur créé
RUN groupadd web
RUN useradd -d /home/python -m python
WORKDIR /home/python
#Fichier d'installation du serveur
ADD cgiserver.py /home/python
#HTML pour les tests
ADD index.html /home/python
# cgi-Créer un dossier bin
RUN mkdir cgi-bin
ADD cgitest.py /home/python/cgi-bin
RUN chmod 755 /home/python/cgi-bin/cgitest.py
#Démarrez le serveur CGI en spécifiant le numéro de port
EXPOSE 8000
ENTRYPOINT ["/usr/local/bin/python", "/home/python/cgiserver.py"]
USER python
(Ça marche juste)
cgiserver.py
import http.server
http.server.test(HandlerClass=http.server.CGIHTTPRequestHandler)
Ceci est le HTML de la première page. Il y a un formulaire et un bouton d'envoi. Les caractères saisis ici seront affichés sur l'écran suivant.
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>
C'est un programme qui affiche la valeur saisie dans index.html.
cgitest.py
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import cgi
html_body = """
<!DOCTYPE html>
<html>
<head>
<title>Afficher les données reçues</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))
Construire localement (côté Mac) à partir de Dockerfile
$ docker build -t {Tout nom de conteneur} .
Exemple
$ docker build -t python_cgi .
Le point est de spécifier "-p 8000: 8000". J'ai également écrit "EXPOSE 8000" dans le Dockerfile.
Démarrez le conteneur localement (côté Mac)
$ docker run -d -p 8000:8000 {Nom du conteneur donné au moment de la construction}
Exemple
$ docker run -d -p 8000:8000 python_cgi
Accès avec un navigateur http://192.168.99.100:8000/
Appuyez sur le bouton Soumettre et vous verrez les valeurs saisies dans le formulaire!
4-1. Python vient de l'image J'ai essayé de l'installer avec make, mais c'est encore plus général d'utiliser l'image officielle de python (rires).
Dockerfile
FROM python:3.5.2
MAINTAINER Ryosuke Kamei <[email protected]>
4-2. Création d'utilisateur Lorsque vous exécutez CGI, cela ne fonctionnera pas bien si vous avez des privilèges root, alors créez un utilisateur dédié. (J'étais assez accro et j'ai réalisé qu'il n'y avait pas de puissance d'infrastructure)
Dockerfile
#Utilisateur créé
RUN groupadd web
RUN useradd -d /home/python -m python
4-3. Placez le fichier
Placez chaque fichier. cgitest.py crée un dossier "cgi-bin" et le place dedans. En outre, définissez l'autorisation sur «755». Autre que cela, placez-le directement sous le HOME de l'utilisateur. (Cela semble être bon n'importe où tant que le chemin Python est en place. Surpris!)
Dockerfile
WORKDIR /home/python
#Fichier d'installation du serveur
ADD cgiserver.py /home/python
#HTML pour les tests
ADD index.html /home/python
# cgi-Créer un dossier bin
RUN mkdir cgi-bin
ADD cgitest.py /home/python/cgi-bin
RUN chmod 755 /home/python/cgi-bin/cgitest.py
4-4. Finition Spécifiez le numéro de port avec EXPOSE, démarrez "cgiserver.py" avec ENTRYPOINT et spécifiez le nouvel utilisateur "python" avec USER.
Dockerfile
#Démarrez le serveur CGI en spécifiant le numéro de port
EXPOSE 8000
ENTRYPOINT ["/usr/local/bin/python", "/home/python/cgiserver.py"]
USER python
Après cela, comme expliqué en 3, si vous créez un conteneur et le démarrez, il fonctionnera comme un serveur Web!
Recommended Posts