python flask docker apipost
使用flask编写端口,然后使用docker部署,最后使用apipost测试。
1 flask 学习
首先安装flask:
sudo pip3 install Flask
1.1 从“hello world!”开始
from flask import Flask
app = Flask(__name__)
@app.route('/') #实例化
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
运行后的结果:
Running on http://0.0.0.0:7005/ (Press CTRL+C to quit)
在浏览器中打开这个网址,即可显示
1.2 进阶版
可以使用其他任何一台电脑访问
from flask import Flask
app = Flask(__name__)
@app.route('/lf/imagetest') #设置路由
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
'''
默认为ip:http://127.0.0.1,端口为5000,只能在本地访问
可以进修改host="0.0.0.0",其他电脑也可以访问
debug=True,开启调试模式
threaded=True,开启多线程
'''
app.run(host="0.0.0.0", port=7005, debug=True, threaded=True)
1.3 使用APIpost测试
图片和字符串,通过json格式
post:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)
# -*- coding: utf-8 -*-
from flask import Flask, jsonify, request
from PIL import Image
import base64
import time
app = Flask(__name__)
@app.route('/lf/imagetest', methods=['POST'])
def img_test(): #收到一个图片,并保存成为
if request.method == 'POST':
data = request.get_json()
print(data)
img = data["image"]
image = base64.b64decode(img)
# 将图片保存本地
file = open('save/1.jpg', 'wb')
file.write(image)
file.close()![在这里插入图片描述](https://img-blog.csdnimg.cn/05d7bb7da316443187294527188fcdd1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAaW5nX18=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
return 'success!'
@app.route('/lf/txttest', methods=['POST'])
def txt_test():
if request.method == 'POST':
txt = request.get_json()
print(txt)
return 'success!'
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7005, debug=False, threaded=True)
接下来使用apipost进行文本测试,如图:
pycharm中输出:
apipost进行图片测试,这里使用base64的格式,在网上找一个转换网址
如https://c.runoob.com/front-end/59/
将图片转为base64
复制base64后面的一长串字符到apipost的json中:
可以看到成功了,在本地的save文件夹中也出现了这张图片
2 docker
这里事先准备了一个镜像,使用sudo docker images
查看当前已有的镜像
输出:
REPOSITORY TAG IMAGE ID CREATED SIZE
mm_cpu latest d739c1afc387 8 days ago 4.35GB
使用mm_cpu这个来构建一个容器:
sudo docker run --name flask_test -itd -p 5000:5000 -v /home/xdd/LF/code/flask:/meflask mm_cpu /bin/bash
--name 容器的名字
-v path:path 挂载目录
mm_cpu 镜像名称
-p 5000:5000, 端口映射
成功创建容器并挂载目录到meflask下,输出:
xdd@xdd-H510M-T-M-2:~$ sudo docker run --name flask_test -v /home/xdd/LF/code/flask:/meflask -it mm_cpu /bin/bash
root@12a6287b3f2e:/# ls
bin boot dev etc home lib lib64 media meflask mmdetection mnt opt proc root run sbin srv sys tmp usr var
root@12a6287b3f2e:/# cd meflask/
root@12a6287b3f2e:/meflask# ls
__pycache__ client.py flask_demo.py flask_demo1.py flask_helloworld.py get_post.py nohup.out save test
root@12a6287b3f2e:/meflask#
常用的命令:
开启容器:docker start id
停止容器:docker stop id
停止后重启容器:docker restart id
删除容器:docker rm -f id
进入容器:
1) docker attach id
2) docker exec -it id /bin/bash #退出容器不会停止容器
导出容器:docker export id > name.tar
docker save -o [image].tar
导入容器为镜像:docker load < name.tar
docker load -i [image].tar
3 测试
1 创建容器
目录挂载为meflask,端口映射为5000,容器ID为35cc6c1535a9
root@xdd-H510M-T-M-2:/home/xdd# sudo docker run --name flask_test -itd -p 5000:5000 -v /home/xdd/LF/code/flask:/meflask mm_cpu /bin/bash
35cc6c1535a9caa38301bc98322cb0c6aeedb977163e7f07a2a36b3b58d1a2e5
root@xdd-H510M-T-M-2:/home/xdd# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
35cc6c1535a9 mm_cpu "/bin/bash" 18 seconds ago Up 15 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp flask_test
进入容器:
root@xdd-H510M-T-M-2:/home/xdd# docker exec -it 35cc6c1535a9 /bin/bash
root@35cc6c1535a9:/# ls
bin boot dev etc home lib lib64 media meflask mmdetection mnt opt proc root run sbin srv sys tmp usr var
root@35cc6c1535a9:/# cd meflask
root@35cc6c1535a9:/meflask# ls
__pycache__ client.py flask_demo.py flask_demo1.py flask_helloworld.py get_post.py nohup.out save test
运行flask_helloworld.py程序,这里将flask_helloworld中的端口改为了5000:
app.run(host="0.0.0.0", port=5000, debug=True, threaded=True)
运行:
root@35cc6c1535a9:/meflask# python flask_demo1.py
* Serving Flask app 'flask_demo1' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on all addresses.
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://172.17.0.2:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 468-437-879
在AIpost 中测试:
修改端口为5000
显示测试成功!