docker 部署flask&matplotlib应用

简介: Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。Flask是一个使用 Python 编写的轻量级 Web 应用框架。本文介绍通过Dockerfile生成镜像,对外部署通过API接口的方式调用绘图服务。

1、创建app.py文件

主文件,提供对外服务接口

import io
import random
from flask import Flask, Response, request
from matplotlib.backends.backend_agg import FigureCanvasAgg
from matplotlib.figure import Figure

app = Flask(__name__)

@app.route("/")
def index():
    """ 返回带有图片的html界面,使用form -> action 及 image -> src等参数实现动态刷新功能
    """
    num_x_points = int(request.args.get("num_x_points", 50))  # 设置默认值 50
    # html 模板
    return f"""
    <h1>Flask and matplotlib</h1>
    <h2>Random data with num_x_points={num_x_points}</h2>
    <form method=get action="/">
      <input name="num_x_points" type=number value="{num_x_points}" />
      <input type=submit value="update graph">
    </form>
    <h3>Plot as a png</h3>
    <img src="/matplot-as-image-{num_x_points}.png"
         alt="random points as png"
         height="300"
         width="600"
    >
    """

@app.route("/matplot-as-image-<int:num_x_points>.png")
def plot_png(num_x_points=50):
    """ renders the plot on the fly.
    """
    fig = Figure()
    axis = fig.add_subplot(1, 1, 1)
    x_points = range(num_x_points)
    axis.plot(x_points, [random.randint(1, 30) for x in x_points])

    output = io.BytesIO()
    FigureCanvasAgg(fig).print_png(output)
    return Response(output.getvalue(), mimetype="image/png")

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000, debug=True)

2、创建Dockerfile文件

# Docker image for flask and matplotlib python run
# VERSION 1.0
# Author: Taro
# 基础镜像使用python:3.6
FROM python:3.6
# 将服务器 requirements.txt 文件复制到 容器 /demo/目录下
COPY requirements.txt /demo/
COPY app.py /demo/
# 指定容器工作目录为 /demo/
WORKDIR /demo/
# 安装 项目依赖
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 运行
ENTRYPOINT ["python","app.py"]

3、创建requirements.txt文件

click==8.0.4
colorama==0.4.5
cycler==0.11.0
dataclasses==0.8
Flask==2.0.3
importlib-metadata==4.8.3
itsdangerous==2.0.1
Jinja2==3.0.3
kiwisolver==1.3.1
MarkupSafe==2.0.1
matplotlib==3.3.4
numpy==1.19.5
Pillow==8.4.0
pyparsing==3.0.7
python-dateutil==2.8.2
six==1.16.0
typing-extensions==4.1.1
Werkzeug==2.0.3
zipp==3.6.0

4、文件目录结构

图片.png

5、构建镜像

docker build -t docker_flask:v1 .

图片.png

6、通过镜像启动服务

docker run -d -p 8080:5000 docker_flask:v1 

图片.png

注意: 如果是拥有公网的云上机器对外提供服务,需要开通网络安全组端口对外提供服务。

7、效果测试

图片.png

相关参考

flask_matplotlib.py

相关文章
|
8天前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
59 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
7天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
7天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
10天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
10天前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
21 1
|
16天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
52 1
|
10天前
|
前端开发 开发者 Docker
深入探索Docker Compose:简化多容器应用的部署
深入探索Docker Compose:简化多容器应用的部署
35 0
|
关系型数据库 MySQL 数据库
Flask 教程 第十九章:Docker容器上的部署
本文转载自:https://www.jianshu.com/p/c29bc412f21a 这是Flask Mega-Tutorial系列的第十九部分,我将在其中部署Microblog到Docker容器平台。
5210 0
|
11天前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
34 2
|
20天前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
25 2