J'ai rarement écrit des applications Web en Python. Je voulais le préparer en tant qu'application Web lors de la vérification du fonctionnement des E / S non bloquantes (en tenant compte de la vérification de comparaison avec node.js
et Golang
, etc.), donc à ce moment-là, c'était facile avec Docker pour Mac
. Depuis que l'environnement a été construit, il est décrit comme un mémorandum.
J'ai préparé un conteneur pour l'environnement d'exploitation de Python3.5 + uWSGI + Nginx avec Docker Compose
.
En passant, uWSGI semble être couramment lu comme "wesugi". Je l'ai lu comme "U Whiskey".
J'ai utilisé Docker pour Mac
. Téléchargez Docker for Mac
depuis ici et installez-le sur votre Mac.
La figure ci-dessous montre cette fois la structure des répertoires.
docker-compose.yml Il n'y a qu'un seul conteneur, et après avoir démarré le conteneur, accédez à http à partir du numéro de port local 8080.
docker_python/docker-compose.yml
version: "2"
services:
# nginx
nginx-python:
build: ./nginx-python
ports:
- "8080:80"
volumes:
- ./app/:/var/www/html/app/
environment:
TZ: "Asia/Tokyo"
Installez Python3.5, uWSGI, Nginx sur CentOS.
Dockerfile Basé sur CentOS 6.8.
docker_python/nginx-python/Dockerfile
FROM centos:6.8
ADD ./conf/nginx.repo /etc/yum.repos.d/
# nginx & python
RUN yum localinstall -y http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
RUN yum install -y https://centos6.iuscommunity.org/ius-release.rpm
RUN yum install -y nginx-1.10.1
RUN yum install -y make gcc
RUN yum install -y libxml2-devel
RUN yum install -y python35u python35u-libs python35u-devel python35u-pip
RUN yum clean all
RUN ln -s /usr/bin/python3.5 /usr/bin/python3
RUN unlink /usr/bin/python
RUN ln -s /usr/bin/python3 /usr/bin/python
RUN ln -s /usr/bin/pip3.5 /usr/bin/pip
RUN pip install uwsgi
# setting nginx
COPY conf/nginx.conf /etc/nginx/nginx.conf
ADD conf/default.conf /etc/nginx/conf.d/default.conf
RUN usermod -u 1000 nginx
EXPOSE 80
ADD ./conf/start.sh /tmp/start.sh
CMD /bin/sh /tmp/start.sh
docker_python/nginx-python/conf/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
docker_python/nginx-python/conf/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile off;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
docker_python/nginx-python/conf/default.conf
server {
listen 80 default;
server_name _;
location / {
include uwsgi_params;
uwsgi_pass localhost:8080;
}
location = /favicon.ico {
empty_gif;
}
}
docker_python/nginx-python/conf/start.sh
#!/bin/sh
/etc/init.d/nginx start
cd /var/www/html/app
chmod -R 777 .
uwsgi --ini uwsgi.ini
Préparez un répertoire pour l'application et placez le fichier Python et le fichier de configuration uWSGI. Monté au démarrage du conteneur.
ʻUwsgi.log et ʻuwsgi.pid
sont préparés comme des fichiers vides (commande touch
).
docker_python/app/webapp.py
def application(environ, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
docker_python/app/uwsgi.ini
[uwsgi]
master = True
socket = localhost:8080
wsgi-file = webapp.py
stats = localhost:8181
logto = uwsgi.log
pidfile = uwsgi.pid
Créez un fichier vide.
$ touch docker_python/app/uwsgi.log
$ touch docker_python/app/uwsgi.pid
Lors de la construction et du démarrage (démarrer en arrière-plan avec l'option -d
):
$ docker-compose up --build
Pour build uniquement:
$ docker-compose build
Pour le démarrage uniquement (démarrer en arrière-plan avec l'option -d
):
$ docker-compose up
Exécuté une fois la génération du conteneur terminée avec succès.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0be4855e99df dockerpython_nginx-python "/bin/sh -c '/bin/..." 2 hours ago Up 2 hours 0.0.0.0:8088->80/tcp dockerpython_nginx-python_1
En prenant l'exemple ci-dessus "Confirmation de l'ID de conteneur", spécifiez "0be4855e99df" pour "CONTAINER_ID".
Lors de l'arrêt:
$ docker stop 0be4855e99df
Pour commencer:
$ docker start 0be4855e99df
Au redémarrage:
$ docker restart 0be4855e99df
Vous pouvez entrer dans le conteneur et vérifier l'état du serveur.
$ docker exec -it 0be4855e99df bash
Peut être supprimé si le conteneur est arrêté.
$docker rm 0be4855e99df
Lorsque vous démarrez le conteneur et accédez à http: // localhost: 8080
avec un navigateur," Hello World "s'affiche.
Recommended Posts