开发者社区> taro_秋刀鱼> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Docker部署迁移实战
题记 在docker初始环境部署时,宿主机设定docker存储位置为/var/lib/docker 路径,但我们都知道,/var挂载分区往往就很小的空间,如50GB。
64 0
Docker部署迁移实战
随着业务量的增加,docker部署数量增多,会有很大的磁盘占用,慢慢/var/lib/docker就很容易占满了。 此时,对docker存储进行迁移势在必行!
512 0
什么,容器太多操作不过来?我选择Docker Compose梭哈(下)
什么,容器太多操作不过来?我选择Docker Compose梭哈(下)
642 0
Docker——容器编排(七)(1)
Docker——容器编排(七)(1)
37 0
外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤。 1. 准备工作 1.1 安装并启动Docker容器 Docker容器默认的sshd端口是22。
2896 0
Docker 实现 FIPS 140-2 认证,让您的容器平台更加安全、可信!
我们很高兴地宣布 Docker 已经从美国国家标准与技术研究院(NIST)为 Docker EE 加密库获得了正式的 FIPS 140-2 认证(证书#3304)。
1761 0
推荐4款 Docker 认证的实用免费插件,帮助您轻松管理容器日志!​
用户的需求通过广泛的 Docker 生态系统的创新得以满足,该生态系统扩展了 Docker 的日志记录功能,提供完整的日志管理解决方案,包括搜索、可视化、监控和警报。
1890 0
进入正在运行的Docker容器的4种方式
进入正在运行的Docker容器的4种方式
5474 0
docker学习系列17 镜像和容器的导入导出
先说总结: docker save保存的是镜像(image),docker export保存的是容器(container); docker load用来载入镜像包,docker import用来载入容器,但两者都会恢复为镜像; docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
905 0
推荐6款 Docker 认证的实用免费插件,帮助您轻松监控容器动态!
如今的监控解决方案趋向于跟踪短暂和快速扩展的容器集。合作伙伴的监控解决方案通过 Docker 引擎公开的 API 可以实时收集系统以及 Docker 容器的事件和指标来监控客户的整个基础架构、应用程序和服务的运行状况和性能。
2547 0
+关注
taro_秋刀鱼
博客园主页:https://home.cnblogs.com/u/taro/
文章
问答
来源圈子
更多
文章排行榜
最热
最新
相关电子书
更多
我的Docker:Docker插件机制详解
立即下载
Docker 镜像原理和最佳实践
立即下载
从Docker到容器服务
立即下载