项目介绍
最近在开发一个bert文本分类的项目,api 使用 flask 作为 http框架,需要部署在 Docker 上。
环境配置:
- Flask==2.0.1
- gunicorn==20.1.0
项目requirements.txt
- Flask==2.0.1
- gunicorn==20.1.0
代码展示
示例 api.py
一个简单的web 服务,监听 8888端口(
注意这里要绑定 0.0.0.0
)
- from flask import Flask, request, jsonify
- app = Flask(__name__)
- @app.route('/ready')
- def ready():
- return "ok", 400
- if __name__ == '__main__':
- app.run(host="0.0.0.0", port=8888)
如果直接 python3 api.py ,则会报以下警告:
- * Environment: production
- WARNING: This is a development server. Do not use it in a production deployment.
- Use a production WSGI server instead.
根据文档 flask 文档-部署 ,不可以这么部署,所以我们使用 gunicorn 部署。
安装gunicorn 很简单
- pip3 install gunicorn
运行 gunicorn
- gunicorn -w 3 -b 0.0.0.0:8888 api:app
-w 3 代表启动3个flask进程
-b 0.0.0.0:8888 代表绑定到 8888端口
api:app 代表启动 api.py 的为 app变量 的 flask
我们写成 dockerfile
dockerfile 示例
- FROM python:3.7-slim
- COPY requirements.txt /
- RUN pip3 install --no-cache-dir -r /requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
- WORKDIR app
- RUN mkdir /app/log
- ENV PROCESS_CNT ${PROCESS_CNT:-3}
- COPY . .
- ENTRYPOINT gunicorn -w $PROCESS_CNT -b 0.0.0.0:8888 api:app
- EXPOSE 8888