Ich habe selten Webanwendungen in Python geschrieben. Ich wollte es als Webanwendung vorbereiten, wenn ich den Betrieb nicht blockierender E / A überprüfe (unter Berücksichtigung der Vergleichsüberprüfung mit "node.js" und "Golang" usw.), daher war es zu dieser Zeit mit "Docker for Mac" einfach. Da die Umgebung gebaut wurde, wird sie als Memorandum bezeichnet.
Ich habe einen Container für die Betriebsumgebung von Python3.5 + uWSGI + Nginx mit Docker Compose
vorbereitet.
Abgesehen davon scheint uWSGI allgemein als "wesugi" gelesen zu werden. Ich las es als "U Whisky".
Ich habe "Docker für Mac" verwendet. Laden Sie Docker for Mac
von hier herunter und installieren Sie es auf Ihrem Mac.
Die folgende Abbildung zeigt die Verzeichnisstruktur dieses Mal.
docker-compose.yml Es gibt nur einen Container. Nach dem Starten des Containers können Sie über die lokale Portnummer 8080 auf http zugreifen.
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"
Installieren Sie Python3.5, uWSGI, Nginx unter CentOS.
Dockerfile Basierend auf 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
Bereiten Sie ein Verzeichnis für die Anwendung vor und platzieren Sie die Python-Datei und die uWSGI-Konfigurationsdatei. Wird montiert, wenn der Container startet.
uwsgi.log
und uwsgi.pid
werden als leere Dateien vorbereitet (Befehl 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
Erstellen Sie eine leere Datei.
$ touch docker_python/app/uwsgi.log
$ touch docker_python/app/uwsgi.pid
Wenn sowohl erstellt als auch gestartet wird (beginnen Sie im Hintergrund mit der Option -d
):
$ docker-compose up --build
Nur zum Erstellen:
$ docker-compose build
Nur zum Booten (im Hintergrund mit der Option -d
beginnen):
$ docker-compose up
Wird ausgeführt, nachdem der Container-Build erfolgreich abgeschlossen wurde.
$ 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
Geben Sie am Beispiel der obigen "Bestätigung der Container-ID" "0be4855e99df" für "CONTAINER_ID" an.
Beim Anhalten:
$ docker stop 0be4855e99df
So fangen Sie an:
$ docker start 0be4855e99df
Beim Neustart:
$ docker restart 0be4855e99df
Sie können den Container eingeben und den Status des Servers überprüfen.
$ docker exec -it 0be4855e99df bash
Kann gelöscht werden, wenn der Container gestoppt ist.
$docker rm 0be4855e99df
Wenn Sie den Container starten und mit einem Browser auf "http: // localhost: 8080" zugreifen, wird "Hello World" angezeigt.
Recommended Posts