Giter Site home page Giter Site logo

docker-python-flask's Introduction

Python Flask Docker image

Build Status Tag Gitter Discourse type License

This project provides a Python Flask Docker image for development purposes.

View Dockerfile on GitHub.

Docker Hub Upstream Project

Documentation

In case you seek help, go and visit the community pages.

devilbox.readthedocs.io gitter.im/devilbox devilbox.discourse.group

Docker image tags

  • Image name: devilbox/python-flask

Rolling tags

Rolling tags are updated and pushed nightly to ensure latest patch-level Python version.

Image tag Python version
3.8-dev Latest 3.8.x
3.7-dev Latest 3.7.x
3.6-dev Latest 3.6.x
3.5-dev Latest 3.5.x
2.7-dev Latest 2.7.x

Release tags

Release tags are fixed and bound to git tags.

Image Tag Python version
3.8-dev-<git-tag> Latest 3.8.x
3.7-dev-<git-tag> Latest 3.7.x
3.6-dev-<git-tag> Latest 3.6.x
3.5-dev-<git-tag> Latest 3.5.x
2.7-dev-<git-tag> Latest 2.7.x

Example

For easy usage, there is a Docker Compose example project included.

cp .env.example .env
docker-compose up
curl localhost:3000

Environment Variables

Variable Required Default Description
FLASK_PROJECT Yes The sub-directory name under /shared/httpd/ to serve [1]
FLASK_APP_DIR app The main entrypoint dir name
FLASK_APP_FILE main.py The main entrypoint file name
FLASK_PORT 3000 Docker container internal http port to serve the application
NEW_UID 1000 User id of the host system to ensure syncronized permissions between host and container
NEW_GID 1000 Group id of the host system to ensure syncronized permissions between host and container

Project directory structure

The following shows how to organize your project on the host operating system.

Basic structure

The following is the least required directory structure:

<project-dir>/
└── app                      # Entrypoint dir name can be changed via env var [1]
    └── main.py              # Entrypoint file name can be changed via env var [2]
  • [1] Use the FLASK_APP_DIR environment variable to define the dir for the entrypoint in <project-dir>/app/. Example: FLASK_APP_DIR=src.
  • [2] Use the FLASK_APP_FILE environment variable to define the file for the entrypoint in <project-dir>/app/main.py. Example: FLASK_APP_FILE=test.py.

Structure with dependencies

The following directory structure allows for auto-installing Python dependencies during startup into a virtual env.

<project-dir>/
├── app                      # Entrypoint dir name can be changed via env var
│   ├── __init__.py
│   └── main.py              # Entrypoint file name can be changed via env var
└── requirements.txt         # Optional: will pip install in virtual env

After you've started the container with a requirements.txt in place, a new venv/ directory will be added with you Python virtual env.

<project-dir>/
├── app
│   ├── __init__.py
│   ├── main.py
│   └── __pycache__
├── requirements.txt
└── venv
    ├── bin
    ├── include
    └── lib

Mounting your project

When using this image, you need to mount your project directory into /shared/httpd/ into the container:

docker run \
  --rm \
  -v $(pwd)/<project-dir>:/shared/httpd/<project-dir> \
  devilbox/python-flask:3.9-dev

If your local uid or gid are not 1000, you should set them accordingly via env vars to ensure to syncronize file system permissions across the container and your host system.

docker run \
  --rm \
  -v $(pwd)/<project-dir>:/shared/httpd/<project-dir> \
  -e NEW_UID=$(id -u) \
  -e NEW_GID=$(id -g) \
  devilbox/python-flask:3.9-dev

Build locally

# Build default version (Python 3.8)
make build

# Build specific version
make build PYTHON=3.7

Test locally

# Test default version (Python 3.8)
make test

# Test specific version
make test PYTHON=3.7

License

MIT License

Copyright (c) 2019 cytopia

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.