Créer un environnement Python + uWSGI + Nginx avec Docker

Créer un environnement de vérification pour les applications Web créées avec Python 3.5 avec Doceker

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".

Installez Docker pour Mac

J'ai utilisé Docker pour Mac. Téléchargez Docker for Mac depuis ici et installez-le sur votre Mac.

Préparation du fichier de paramètres Docker Compose

Structure du répertoire

La figure ci-dessous montre cette fois la structure des répertoires.

スクリーンショット 2017-06-28 18.45.27.png

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"

Configuration du serveur Web

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

Fichiers supplémentaires

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

application

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

Fonctionnement du conteneur

Construire et lancer un conteneur

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

Confirmation de l'identifiant du conteneur

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

Arrêter / démarrer le conteneur

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

Connectez-vous au conteneur en cours d'exécution

Vous pouvez entrer dans le conteneur et vérifier l'état du serveur.

$ docker exec -it 0be4855e99df bash

Supprimer le conteneur

Peut être supprimé si le conteneur est arrêté.

$docker rm 0be4855e99df

démo

Lorsque vous démarrez le conteneur et accédez à http: // localhost: 8080 avec un navigateur," Hello World "s'affiche.

Recommended Posts

Créer un environnement Python + uWSGI + Nginx avec Docker
Créer un environnement de Nginx + uWSGI + Python (Django) avec docker
Préparer l'environnement python3 avec Docker
Créer un environnement django avec docker-compose (MariaDB + Nginx + uWSGI)
Construire un environnement Mysql + Python avec docker
Créez un environnement de développement Python simple avec VSCode et Docker Desktop
Créer un environnement Jupyter Lab (Python) avec Docker
[Python] Créez un environnement virtuel avec Anaconda
Environnement de lancement avec LineBot + Heroku + Docker + Python
Construire un environnement de NGINX + NGINX Unit + MySQL avec Docker
Non bloquant avec Python + uWSGI
Utiliser python avec docker
environnement python avec docker-compose
Créer un environnement Python
WebSocket avec Python + uWSGI
Environnement virtuel avec Python 3.6
Préparer l'environnement d'exécution de Python3 avec Docker
Créer un environnement virtuel avec conda avec Python
[Python] Créer un environnement de développement Django avec Docker
Créer un environnement de construction python3 avec Sublime Text3
Hello World avec nginx + uwsgi + python sur EC2
[Docker] Créez un environnement jupyterLab (python) en 3 minutes!
Créez rapidement un environnement d'exécution d'application Web Python3.4 + Nginx + uWSGI + Flask en utilisant pyenv sur Ubuntu 12.04
Construction d'environnement virtuel avec Docker + Flask (Python) + notebook Jupyter
Créer un environnement avec virtualenv
Installer l'environnement Python avec Anaconda
Pour pouvoir utiliser le japonais avec Python dans l'environnement Docker
Gérez l'environnement python avec virtualenv
Créer un gif 3D avec python3
API avec Flask + uWSGI + Nginx
Créez un environnement de développement python avec vagrant + ansible + fabric
Créer un environnement python3 avec ubuntu 16.04
Lancer une application Web Python sur Nginx + Gunicorn avec Docker
Construire un environnement python avec direnv
Créer une couche pour AWS Lambda Python dans Docker
Créer un répertoire avec python
Créez rapidement un environnement d'exécution d'application Web Python3.4 + Nginx + uWSGI + Flask en utilisant venv sur Ubuntu 14.04 LTS
Créez un environnement de développement Django avec Docker! (Docker-compose / Django / postgreSQL / nginx)
Créez un environnement pour "Deep Learning from scratch" avec Docker
Créer une application Todo avec Django ① Créer un environnement avec Docker
Créer une animation de tracé avec Python + Matplotlib
Commencez avec Python! ~ ① Construction de l'environnement ~
Créer Awaitable avec l'API Python / C
Configurer un environnement Python moderne avec Homebrew
Créer un environnement Python sur Mac (2017/4)
Créer un environnement virtuel avec Python 3
Créer un environnement python dans centos
Construction de l'environnement Python3 avec pyenv-virtualenv (CentOS 7.3)
Construction de l'environnement pytorch @ python3.8 avec pipenv
Configurer un environnement de développement Python avec Atom
Reconstruisez l'environnement de développement de Django avec Docker! !! !! !!