2.7,py2.7,python2.7(python2.7/Dockerfile)3.6,py3.6,python3.6(python3.6/Dockerfile)
You must explicitly use one of the tags above. The latest tag is not assigned since each tag represents a different variant, not an incremental version.
Docker image with Nginx, uWSGI and Flask in a single container that enables running Python Flask Apps on NGINX.
GitHub repo: https://github.com/robpco/docker-nginx-uwsgi-flask
Docker Hub image: https://hub.docker.com/r/robpco/nginx-uwsgi-flask/
This Docker image enables Python Flask Apps to run on Nginx using uWSGI. It simplifies the task of migrating pure Flask Web Apps to Nginx-based Web Apps, which desirable for production deployment scenarios.
This image builds on the nginx-uwsgi base image and adds Flask support and additional Environment Variables to enable customization.
This repo auto-generates images to Docker-Hub. It includes variants for each supported Python version (2.7, 3.6).
Basic usage information is provided below. If using the documentation on the original repo, remember to reference this image robpco/nginx-uwsgi-flask.
To use this image as a base for a Flask Web-App:
- Create a
Dockerfilethat references this image:tag - Build an Image from that
Dockerfile - Run the Image and Testing the App
- In this example, we use the
FROMline to specify this image and thepython3.6variant - We copy our python scripts, in a sub-directory on the local computer called
app, to a folder in the container called/app.
FROM robpco/nginx-uwsgi-flask:python3.6
COPY ./app /app- Next we use the
docker buildcommand to create the image, name itmyapp
docker build -t myapp .- Now, we can run the image and use a few extra parameters to make things easier
- The
-pparameter maps the localhost's port 8080 to port 80 of the image - The
-dparameterdetachesour terminal session from the image - The
--rmparameter automatically removes the image when it's stopped. - Finally, we specify the name of the image:
myapp
- The
- After running the command, we can open up a web-browser and type in
http://localhost:8080and interact with our Python Flask application
docker run --rm -p 8080:80 -d myappThis image supports the following custom environment variables:
- UWSGI_INI - the path and file of the configuration info
- default:
/app/uwsgi.ini
- default:
- NGINX_MAX_UPLOAD - the maximum file upload size allowed by Nginx
- 0 = unlimited (image default)
- 1m = normal Nginx default
- LISTEN_PORT - custom port that Nginx should listen on
- 80 = Nginx default
The variables that begin with STATIC_ allow configuring Nginx to relay "static content" directly without going through uWSGI or Flask. This is advantageous for basic HTML pages, css and js files, that don't need their output adjusted by your Flask App.
- STATIC_INDEX - serve '/' directly from
/app/static/index.html- 0 = disabled (default)
- 1 = enabled - the file
index.htmllocated in the/app/staticdirectory (in the container) will be forwarded to any requests to the root of your server (/) will
- STATIC_URL - external URL where requests for static files originate
- STATIC_PATH - container location of static files (absolute path)
Environment variables can be set in multiple ways. The following examples, demonstrate setting the LISTEN_PORT environment variable via three different methods. These methods can be applied to any of the Environment Variables.
Setting in a Dockerfile
# ... (snip) ...
ENV LISTEN_PORT 8080
# ... (snip) ...Setting during docker run with the -e option
docker run -e LISTEN_PORT=8080 -p 8080:8080 myimageSetting in docker-compose file using the environment: keyword in a docker-compose file
version: '2.2'
services:
web:
image: myapp
environment:
LISTEN_PORT: 8080- 2017-12-11: Added multiple tags per variant:
py3.6is the same aspython3.6, and so forth... - 2017-11-29: Added ability to change port Nginx listens on with new environment variable
LISTEN_PORT.- Thanks to github user tmshn
- 2017-11-29: Automatic image re-build when Python updates
- 2017-11-28: Updated Nginx version installed
- 2018-05-04: Updated for new base images
- 2017-12-15: Fix to avoid duplicate listen entries in nginx.conf
- 2017-11-30: limit build failures caused by GPG key validation failing
- 2017-11-28: Fixed console errors from supervisor process:
- Added explicit path reference to
supervisord.confin DockerfileCMDstatement - Added explicitly set username in
supervisord.conf
- Added explicit path reference to