还是按着这篇简单的Mac版Docker封装需要传参的Python步骤走。
- 目录安排
- Dockerfile
- requirements.txt
- gunicorn.conf.py
- run_predict.py
- src 文件夹
- Docker 命令行
- 装载建包
- 运行docker
- 导出
- 导入
目录安排如下所示,有四个文件和一个文件夹,Dockerfile就是指我们生成Docker时的设置文件,requirements.txt是指python环境下所需要的包,gunicorn.conf.py是网络启动的配置文件,run_predict.py是接口入口程序,src文件夹是指代码,来一个一个看。
Dockerfile# 配置环境 FROM python:3.9 # 工作目录 WORKDIR ./docker_predict_S # 从本来的路径拷贝到容器指定路径,这么写最省事 ADD . . # 配置python环境库 RUN pip install -r requirements.txt # 启动后台服务 ENTRYPOINT gunicorn run_predict:app -c gunicorn.conf.pyrequirements.txt
这个文件如下
certifi==2022.5.18.1 flask==2.1.2 gunicorn==20.1.0 gevent==21.12.0gunicorn.conf.py
workers = 1 # 定义同时开启的处理请求的进程数量,根据网站流量适当调整 worker_class = "gevent" # 采用gevent库,支持异步处理请求,提高吞吐量 bind = "0.0.0.0:8000" # 这个还只能是0.0.0.0 timeout = 3600 # 设置超时时间为 120 秒run_predict.py
外部暴露的接口文件,这里可以看flask教程,不难。
from flask import Flask
from flask import request
from flask import jsonify
# 从别的文件里引用,实例化一个类,方便下面调用
# from src import yingzhibiao_predict
# p = yingzhibiao_predict.predictt()
app = Flask(__name__)
@app.route("/predict_s", methods=["GET"])
def predict_s():
# request.form.get:获取post请求的参数
data = request.args.get('dic')
return '这个文本就是' + data
# docker启动服务不会走main函数
if __name__ == '__main__':
app.run()
src 文件夹
里面可以放一些资源文件,引用要注意路径。
Docker 命令行把Mac的Docker程序先运行起来,看下里面有没有镜像在跑,没有。
装载建包sudo docker build -t demo_flask:v1 .
截图如下所示
运行dockersudo docker run -it --rm -p 8000:8000 demo_flask:v1
在浏览器输入http://127.0.0.1:8000/predict_s?dic=adasd就可以了。
先把刚运行的容器关闭下,全关了镜像状态就是不用了,再导出。
导出的命令
docker save -o demo_flask.tar demo_flask:v1
文件夹里就有文件了
老规矩,删了重新导入看看
docker rmi 镜像id导入
导入,再运行,就酱
docker load -i demo_flask.tar
浏览器也可以了



