当前位置: 首页 > article >正文

容器化部署算法服务技术文档

容器化部署算法服务技术文档

1. 引言

本文档旨在指导如何使用 Docker 将一个基于 Python Flask 的算法服务容器化,并通过 Docker 容器部署在 Ubuntu 服务器上。通过容器映射端口,确保服务能够在局域网内通过 curl 或浏览器访问。

2. 技术栈

  • Flask:Python 微框架,用于实现简单的 RESTful API 服务。
  • Docker:容器化工具,确保算法服务在隔离的环境中运行,易于部署和管理。
  • Ubuntu:操作系统,容器运行环境。

3. 服务功能

本服务实现了一个计算平方的 API,接收一个数字并返回其平方值。接口采用 POST 请求方式,数据格式为 JSON。

示例请求:

{
  "number": 4
}

示例响应:

{
  "result": 16
}

4. 步骤

4.1 准备flask应用

首先,编写一个简单的 Flask 应用,用于实现计算平方的功能。假设该服务会监听 8080 端口。

# app.py 文件内容:
from flask import Flask, request, jsonify

app = Flask(__name__)

# 计算平方的 API,使用 GET 方法
@app.route('/square', methods=['GET'])
def square():
    # 从 URL 参数中获取 number 值
    number = request.args.get('number')
    
    # 如果 number 不存在,返回错误信息
    if number is None:
        return jsonify({"error": "No number provided"}), 400
    
    try:
        # 将 number 转换为整数
        number = float(number)
    except ValueError:
        return jsonify({"error": "Invalid number provided"}), 400

    # 计算平方并返回结果
    result = number ** 2
    return jsonify({"result": result})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

4.2 创建 Dockerfile

为了将该 Flask 应用容器化,需要编写一个 Dockerfile,定义容器的构建过程。

# 使用官方的 Python 3 镜像作为基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制当前目录内容到容器内的 /app 目录
COPY . /app

# 安装 Flask 依赖
RUN pip install --no-cache-dir flask

# 暴露 8080 端口
EXPOSE 8080

# 运行 Flask 应用
CMD ["python", "app.py"]

4.3 构建 Docker 镜像

在包含 Dockerfile 和 app.py 文件的目录下执行以下命令来构建 Docker 镜像:

docker build -t my_flask_app .

该命令会创建一个名为 my_flask_app 的 Docker 镜像。

4.4 启动容器并映射端口

使用 Docker 启动容器并将宿主机端口映射到容器内的端口。假设宿主机上 8080 端口没有被占用,可以使用以下命令:

docker run -d -p 8080:8080 my_flask_app

此命令会:

  • 将容器的 8080 端口映射到宿主机的 8080 端口。
  • -d 参数表示以后台模式运行容器。

4.5 检查映射的端口

使用以下命令查看宿主机上当前的端口使用情况,确保 8080 端口没有被占用:

sudo netstat -tuln

如果 8080 端口未被占用,你可以继续进行映射;如果已占用,可以选择其他未被占用的端口进行映射。例如:

docker run -d -p 5000:8080 my_flask_app

在上述命令中,容器的 8080 端口被映射到宿主机的 5000 端口。

4.6 测试服务

服务启动后,你可以使用 curl 命令或浏览器来测试 API 服务是否正常工作。
使用url测试

curl "http://localhost:8080/square?number=4"

如果一切正常,则返回

{
  "result": 16
}

4.7 配置防火墙

如果你希望其他机器可以通过网络访问该服务,需要确保宿主机的端口开放。

首先检查防火墙状态:

sudo ufw status

如果防火墙已启用,可以使用以下命令开放 8080(或其他映射的端口):

sudo ufw allow 8080

关闭指定端口: 假设你想关闭端口 8080,可以使用以下命令

sudo ufw deny 8080

5. 总结

通过以上步骤,我们成功地将一个基于 Flask 的简单算法服务容器化,并使用 Docker 部署在 Ubuntu 系统上。通过端口映射,宿主机可以通过特定端口访问容器内的服务。同时,防火墙配置确保该服务在局域网内可访问。

可选扩展:

  • 可以将该服务进一步部署到 Kubernetes 集群中,确保高可用性和扩展性。
  • 可以为服务添加日志记录、错误处理、输入校验等功能。

http://www.kler.cn/a/466475.html

相关文章:

  • 云架构Web端的工业MES系统设计之区分工业过程
  • c# Record关键字
  • ansible-性能优化
  • 记录一次电脑被入侵用来挖矿的过程(Trojan、Miner、Hack、turminoob)
  • Kafka消息队列
  • Git 仓库与文件管理笔记
  • SELECT的使用
  • 预测facebook签到位置
  • JavaSE——IO流(下)
  • 设置开机自启动的应用
  • leetcode(hot100)3
  • MTK 平台关于WIFI 6E P2P的解说
  • 37. 数组二叉树
  • NanoEdge AI Studio入门
  • React-Router 一站式攻略:从入门到精通,掌握路由搭建与权限管控
  • QT------------其他工具软件和技术
  • pcl源码分析之计算凸包
  • 设计模式之访问者模式:一楼千面 各有玄机
  • 养老院小程序怎么搭建?让老年人老有所养,老有所依!
  • 数据挖掘——关联规则挖掘
  • 如何进一步提高Oracle lgwr的写性能?
  • R机器学习:神经网络算法的理解与实操,实例解析
  • eplan如何导出可跳转的PDF
  • 【Rust练习】26.Package and Crate
  • 深入理解 Java Set 集合:原理、应用与高频面试题解析
  • 图片转三维模型网站(免费),AI建模,一键把图片转三维模型,二维图片转3维模型,AI建模