Créer un serveur CGI fonctionnant sur Python 3 sur Docker

introduction

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

Référence (très utile)

J'ai essayé d'exécuter CGI avec python3.

1. Préparez le fichier.

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

1-1. Créer un fichier Docker

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

1-2. Créer un fichier de démarrage du serveur CGI

(Ça marche juste)

cgiserver.py


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

1-3. Créez index.html

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>

1-4. Programme CGI écrit en Python3

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

2. Créez le conteneur à partir du fichier Docker

Construire localement (côté Mac) à partir de Dockerfile


$ docker build -t {Tout nom de conteneur} .
Exemple
$ docker build -t python_cgi .

3. Démarrer le conteneur (côté Mac local)

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. Explication de Dockerfile

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

Créer un serveur CGI fonctionnant sur Python 3 sur Docker
docker build python basé sur alpin
construire Python sur Ubuntu
Installez Python 3.6 sur Docker
Créer un environnement Python sur Windows
Comment créer un environnement Django (python) sur Docker
Exécutez le CGI de Python sur CORESERVER
Exécutez CGI écrit en python sur le serveur de location de Sakura
Construire un environnement Python avec Windows
Version errante de Python 3 sur le serveur de location de Sakura (Remarque)
Solution pour le serveur Gin inaccessible fonctionnant sur le conteneur Docker
Créez un environnement python sur CentOS 7.7 pour votre serveur domestique
Essayez d'exécuter tensorflow sur Docker + anaconda
Exécutez l'image Docker de TensorFlow sur Python3
Fichier CGI Python créé sous Windows
Créer un environnement Python 3.8 + Pipenv sur Ubuntu 18.04
Créer un environnement python3 sur CentOS7
Construire Python 1.0
Outil de test de charge Build Locust 1.1 sur Docker
Migrer les applications Django exécutées sur Python 2.7 vers Python 3.5
CGI Server (1) édition python en une ligne
Créer un environnement Jupyter Lab (Python) avec Docker
Environnement de création de module d'extension Python 2.7, 3.4, 3.5 sous Windows
Créer un environnement Python 3 et OpenCV sur Ubuntu 18.04
Construire un environnement python sur MacOS (Catallina)
Créer un serveur NFS sur Arch Linux
Construisez un serveur WebDAV simple sur Linux
Création d'un environnement Ubuntu, Python, OpenCV sur Docker
Construire un serveur Samba sur Arch Linux
Créer un environnement Python avec Anaconda sur Mac
Dockerfile: installer Docker sur un serveur Linux
Construire un notebook jupyter sur un serveur distant (CentOS)
Configurons un serveur WEB avec Chromebook
Installer Python3 sur le serveur mixhost [Actuellement NG]
Créer un environnement Python + OpenCV sur Cloud9
Exécutez le serveur python wsgi sur l'unité NGINX
Construisez un environnement Python + bouteille + MySQL avec Docker sur RaspberryPi3! [Construction facile]
Stray build Python-3.8.5 sur CentOS sans privilèges root
Un mémo qui a fait un tutoriel pour exécuter python sur heroku
Créez un environnement LAMP sur votre Docker local
[Note] Construisez un environnement Python sur le serveur de location "CORESERVER"
pykintone sur Docker
Créer un environnement python avec pyenv sur EC2 (ubuntu)
Construire l'environnement Python3.5 + matplotlib sur Ubuntu 12 en utilisant Anaconda
Python sur Windows
twitter avec python3
Créez simplement un environnement d'exécution Python 3 sous Windows
Créez un environnement python avec ansible sur centos6
Créer un environnement Python sur Mac (Mountain Lion)
Construisez un environnement Python + bouteille + MySQL avec Docker sur RaspberryPi3! [Essai et erreur]
Principes de base de Python CGI
[Python] Créer un environnement de développement Django avec Docker
Créez un environnement de développement Python sur votre Mac
python sur mac
Une histoire sur l'exécution de Python sur PHP sur Heroku
python chez docker
Créez un environnement Flask Python3 + sur Compute Engine de GCP
Python sur Windbg
Construire un environnement Python sur le serveur Sakura VPS