Flask 简介
Flask是一个用Python编写的Web应用程序框架。Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask。Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。两者都是Pocco项目。
Flask也被称为“microframework” ,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。
Gunicorn 简介
Gunicorn是一个 Python Web Server Gateway Interface (WSGI) HTTP server框架,它基于pre-fork worker模型,由一个主管理进程( master process )用来管理 worker 进程集合。Master不关心客户端的信息。所有的请求和响应处理都是由 worker 进程来处理的。
实例
Gunicorn 配置文件 gun.py
import os
import gevent.monkey
gevent.monkey.patch_all()
import multiprocessing
debug = True
loglevel = 'debug'
bind = '0.0.0.0:15000'
#pidfile = 'log/gunicorn.pid'
#logfile = 'log/debug.log'
#workers = multiprocessing.cpu_count() * 2 + 1
workers=1
worker_class = 'gunicorn.workers.ggevent.GeventWorker' 使用Gevent作异步支撑
timeout=1200 当workers超过1200秒无法被主管理进程感知,就会被kill并且重启
keepalive=5
graceful_timeout=120
x_forwarded_for_header = 'X-FORWARDED-FOR'
启动:
reload: False
limit_request_field_size: 8190
nworkers_changed: <function nworkers_changed at 0x1062f0230>
timeout: 1200
keyfile: None
ca_certs: None
tmp_upload_dir: None
backlog: 2048
logger_class: gunicorn.glogging.Logger
[2020-10-03 18:13:52 +0800] [2715] [INFO] Starting gunicorn 19.9.0
[2020-10-03 18:13:52 +0800] [2715] [DEBUG] Arbiter booted
[2020-10-03 18:13:52 +0800] [2715] [INFO] Listening at: http://0.0.0.0:15000 (2715)
[2020-10-03 18:13:52 +0800] [2715] [INFO] Using worker: gunicorn.workers.ggevent.GeventWorker
[2020-10-03 18:13:52 +0800] [2718] [INFO] Booting worker with pid: 2718
[2020-10-03 18:13:52 +0800] [2715] [DEBUG] 1 workers
集成Docker
在项目目录下增加Dockerfile
FROM python:3.8-slim-buster
MAINTAINER tomliu "fisher@sudops.com"
WORKDIR /microservice
COPY . .
run pip install Flask
run pip install requests
run pip install gevent
run pip install gunicorn
CMD exec gunicorn -c gun.py app:app --log-config log.conf
生成镜像
docker build . -t tomliu/flaskhp
运行
docker run -p 5001:15000 -v /yourhostpath/logs:/microservice/logs tomliu/flaskhp
其中 -p 5001:15000 为将应用端口映射到5001
-v /yourhostpath/logs:/microservice/logs 是将容器内部日志/microservice/log映射到外部主机路径/yourhostpath/logs
本项目完整代码,见我的github,https://github.com/tomliu112/flask-docker-hp