将Python脚本构建为docker镜像并启动和提供服务
将Python脚本构建为docker镜像并启动和提供服务
·
一,写一个python脚本作为中间层来处理自己的东西
from flask import Flask, request
import json
import base64
import ast
import requests
app = Flask(__name__)
@app.route('/cimc_ocr', methods=['POST'])
def hello_world():
if 'file' not in request.files:
return 'No file part in the request.'
file = request.files['file']
if file.filename == '':
return 'No file selected.'
image_data1 = file.read()
image = base64.b64encode(image_data1).decode('utf8')
data = {"key": ["image"], "value": [image]}
# 转成 json 字符串
json_str = json.dumps(data)
print(json_str)
url = "http://192.168.3.211:9998/ocr/prediction" # 接口的URL
headers = {
"Content-Type": "application/json" # 设置请求头为JSON类型
}
response = requests.post(url, data=json_str, headers=headers)
print(response.json()) # 使用.json()方法获取响应的JSON数据
data_str = response.json().get("value")[0];
my_set = set()
# 使用ast模块解析字符串
data_list = ast.literal_eval(data_str)
for item in data_list:
for itemlist in item[0]:
if not str(itemlist).startswith("0"):
print(itemlist)
my_set.add(itemlist)
return '\n'.join(str(x) for x in my_set)
if __name__ == '__main__':
app.run(host='0.0.0.0')
设置为:app.run(host=‘0.0.0.0’)
如果不设置默认是app.run()表示默认是localhost,5000端口不能访问(即使防火墙开启)
二,将这个脚本转化为 docker 容器
准备如下三个文件:
1. paseData.py脚本文件
2. dockerFile文件
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY paseData.py .
EXPOSE 5000
CMD [ "python", "paseData.py" ]
3. requirements.txt文件
requirements.txt是一个常见的文本文件,用于列出Python项目的依赖项(即所需的第三方包和库)。它通常位于项目的根目录中,并用于在安装和管理项目依赖时提供指南。
当您在Python项目中使用第三方库时,您可以将其添加到requirements.txt文件中,以便其他人可以轻松地安装并运行您的项目。此文件列出了每个依赖项的名称及其版本号
Flask==1.1.2
requests==2.25.0
Jinja2==2.11.3
MarkupSafe==1.1.1
itsdangerous==1.1.0
werkzeug==0.16.0
以下是对这些包的简要解释:
1. Flask==1.1.2:Flask是一个使用Python编写的微型Web框架。它提供了简单易用的API和工具,用于构建Web应用程序和API。Flask具有灵活性和可扩展性,可用于构建各种规模的Web应用程序。
2. requests==2.25.0:requests是一个流行的HTTP库,用于向Web服务器发送请求并获取响应。它提供了简单且易于使用的API,可以执行各种HTTP操作,如发送GET、POST等类型的请求,处理响应内容等。
3. Jinja2==2.11.3:Jinja2是一个现代的、功能丰富的模板引擎,用于将动态数据注入到静态模板中。它使用简单的语法和强大的模板继承机制,允许开发者在应用程序中使用模板来生成动态内容。
4. MarkupSafe==1.1.1:MarkupSafe是一个用于转义HTML、XML和其他标记语言的库。它提供了一组用于处理转义和安全字符串操作的函数,用于确保从数据源插入的内容不会导致潜在的跨站点脚本(XSS)漏洞。
5. itsdangerous==1.1.0:itsdangerous是Flask中使用的一个库,用于处理安全相关的操作,如生成和校验加密令牌、签名数据等。它提供了一些有用的功能,如生成和验证加密的会话Cookie、生成和验证一次性令牌等。
6. werkzeug==0.16.0:Werkzeug是一个用于构建Web应用程序的WSGI工具库。它提供了一组用于处理HTTP请求、路由和中间件等的工具和实用程序。
这些包都是用于Web开发的常用工具和依赖项。它们提供了构建和运行Web应用程序所需的各种功能和功能组件。Flask作为Web框架,依赖于这些包来提供核心功能,如处理HTTP请求、渲染模板、处理表单数据等。
三,构建镜像
docker build -t mypasedatapp:1.0 .
将 dockerFile文件和python文件放在同一个文件夹下面
四,启动容器
docker run -d --name mypasedatapp -p 5000:5000 --network=host -it mypasedatapp:1.0
这个命令是使用 Docker 来运行一个名为 mypasedatapp 的容器。下面我会逐一解释这个命令中的各个参数:
1. docker run: 这是 Docker 的一个基础命令,用于启动新的容器。
2. -d: 以“分离”模式运行容器,即后台运行。
3. --name mypasedatapp: 为容器指定一个名字,名字为 mypasedatapp。
4. -p 5000:5000: 端口映射。将宿主机的 5000 端口映射到容器的 5000 端口。
5. --network=host: 使用宿主机的网络栈。这意味着容器将不会获得一个独立的 IP 地址,而是直接使用宿主机的 IP 地址和端口。需要注意的是,当使用 --network=host 时,-p 端口映射实际上是多余的,因为容器已经直接使用了宿主机的网络。
6. -it: 这两个选项通常一起使用,用于交互式地运行容器。其中 -i 保持 STDIN 打开,-t 分配一个伪终端。但在这个命令中,由于使用了 -d 选项来后台运行容器,-it 实际上是多余的。
7. mypasedatapp:1.0: 这是要运行的 Docker 镜像的名字和标签。名字是 mypasedatapp,标签是 1.0。
五,测试访问

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)