使用 docker 快速部署 flask接口服务 一

这篇具有很好参考价值的文章主要介绍了使用 docker 快速部署 flask接口服务 一。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一:说明

  1. 以前没有使用过docker,近期需要使用部署自己的服务,因此需要学习,先从简单的使用起来,后面专门整理一篇 如何部署 模型的方法。
  2. 理论知识就不说了,网上很多,咱直接上步骤
  3. 整理逻辑分为: 基于dockerfile创建镜像 >>>> 使用 docker-compose 创建容器 >>>> 后台启动
    当然这些步骤完全可以都写在 dockerfile中,这里我拆开了。

我的项目文件:

flask docker,Linux,docker,flask,eureka

  1. 系统说明:

Linux系统:
docker的安装 和启动 ,以及 镜像和容器的 增删改查工作,网上有很多教程。
咱们只讨论 实现逻辑流程。

二:dockerfile 参数说明

1. 一般常用的 参数,以及它的含义

flask docker,Linux,docker,flask,eureka

2. 我自己的 dockerfile

flask docker,Linux,docker,flask,eureka
FROM python:3.9.5:该 image 文件继承官方的 python,冒号表示标签,这里标签是3.9.5,即3.9.5版本的 python。
COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径,注意:这个文件,根据自己需要创建,也就是项目中有些文件不需要放入镜像中,就将这些文件路径放入.dockerignore文件中就行了 ),都拷贝进入 image 文件的/app目录。
WORKDIR /app:指定接下来的工作路径为/app就是你进入容器后,的目录。(我用了docker-compose方法,因此这里的路径基本上我用不到了,后面在docker-compose中会重新设置。)
RUN pip install:在/app目录下,运行pip install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
COPY . . :我这里 写重复了,当命令重复了,(懒得 删除了,反正几个文件占不了多大内存)。这里含义就是 将项目中的所有文件复制到 . 路径中。
EXPOSE 50002:将容器 50002端口暴露出来, 允许外部连接这个端口。

三:示例操作

1.1 开始前先认识一下Gunicorn + Gevent启动服务

一般我们可以使用命令python start.py运行这个应用,打开浏览器,输入网址127.0.0.1:5000并回车,将会打开我们的网站。
但是:

Gunicorn + Gevent

运行以下命令即可安装这两个利器

安装命令:pip install gunicorn gevent

在根目录下新建文件 /gunicorn.conf.py

workers = 5 # 定义同时开启的处理请求的进程数量,根据网站流量适当调整
worker_class = "gevent" # 采用gevent库,支持异步处理请求,提高吞吐量
bind = "0.0.0.0:80" 可以使用gunicorn命令来测试是否可以正确运行,命令如下,打开网址127.0.0.1:80,将会打开我们的网站。

执行命令:gunicorn start:app -c gunicorn.conf.py

1. 用Gunicorn + Gevent的好处:

Gunicorn是一个用于部署Python Web应用程序的WSGI服务器,它可以处理多个请求并发地。Gunicorn可以通过多进程的方式来实现并发处理,每个进程都可以独立地处理客户端请求。这使得Gunicorn非常适合在高负载情况下使用,因为它可以有效地利用多核CPU资源,提高应用程序的性能和稳定性。
而Gevent是一个基于协程的网络库,它使用一种称为"Greenlet"的轻量级线程来实现并发。与传统的多线程或多进程模型相比,协程模型可以更高效地使用系统资源,并且在编程上更加简单和直观。使用Gevent时,可以将阻塞式的I/O操作转化为非阻塞式,从而提高应用程序的响应速度
结合使用Gunicorn和Gevent可以发挥它们各自的优势。Gunicorn作为Web服务器负责接收和分发请求,而Gevent作为协程库负责处理请求。这样可以充分利用Gunicorn的多进程能力,同时又能享受到Gevent协程模型的优势,提供高性能和高并发的服务

2. Gunicorn + Gevent的 使用示例

当使用GunicornGevent启动服务时,你可以使用一些参数来配置它们的行为。下面是一些常用的参数和使用示例:

  1. Gunicorn参数:

-w 或 --workers:指定工作进程的数量。例如,gunicorn -w 4 app:app 将启动4个工作进程来处理请求。
-b 或 --bind:指定服务器绑定的地址和端口。例如,gunicorn -b 0.0.0.0:8000 app:app 将在本地的8000端口上监听请求。
-t 或 --timeout:指定超时时间,即请求的最大处理时间。例如,gunicorn -t 30 app:app 将设置请求超时时间为30秒。

例如: gunicorn -w 进程数量 -b 监听地址:监听端口 运行文件名称:Flask程序实例名

gunicorn -w 4 -b 0.0.0.0:8080 app:app -D

-D表示将gunicorn置于后台运行
执行ps -ef | grep gunicorn可以查看gunicorn进程信息

  1. Gevent参数:

--worker-class:指定Gevent的工作类。例如,gunicorn --worker-class gevent app:app 将使用Gevent作为工作类来处理请求。
--worker-connections:指定每个工作进程的最大并发连接数。例如,gunicorn --worker-connections 1000 app:app 将设置每个工作进程最大连接数为1000。

使用示例
使用Gunicorn默认配置启动应用程序:gunicorn app:app
启动4个工作进程,并将服务器绑定到本地的8000端口:gunicorn -w 4 -b 0.0.0.0:8000 app:app
设置请求超时时间为30秒:gunicorn -t 30 app:app
使用Gevent作为工作类启动应用程序:gunicorn --worker-class gevent app:app
设置每个工作进程的最大连接数为1000:gunicorn --worker-connections 1000 app:app

1.2. 我自己的gunicorn.conf.py,并生成日志文件

import logging
import logging.handlers
import os
import multiprocessing
import gevent.monkey
gevent.monkey.patch_all()

bind = '0.0.0.0:8080'  # 绑定的ip已经端口号
chdir = '/home/flaskProject'  # gunicorn要切换到的目的工作目录
timeout = 60  # 超时
worker_class = 'gevent'  # 使用gevent模式,还可以使用sync 模式,默认的是sync模式
workers = multiprocessing.cpu_count() * 2 + 1  # 启动的进程数
loglevel = "info"  # 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'  # 设置gunicorn访问日志格式,错误日志无法设置
pidfile = "gunicorn.pid"
accesslog = "access.log"
errorlog = "error.log"
daemon = True  # 是否后台运行

执行gunicorn -c gun.py app:app启动应用程序,启动后项目的目录下会生成access.logerror.loggunicorn.pid三个文件,gunicorn.pid中保存了gunicorn的主进程PID号,可以通过cat gunicorn.pid查看,当想要停止gunicorn时,直接kill 进程号即可杀死所有gunicorn进程。

flask docker,Linux,docker,flask,eureka

2. 创建自己的镜像 (基于dockerfile创建镜像 >>>> )

我这里使用的是 dockerfile方法进行镜像创建:具体流程如下:

注意:开始之前先cd 进入项目文件夹中

  1. 首先,在项目的根目录下,新建一个文本文件.dockerignore写入下面的内容。
    使用vim .dockerignore 生成文件(这个文件作用是添加不需要写入镜像的文件):
.git # 这个是不写入镜像的文件(git 里面的 .git文件,写在这里,意味着该文件不需要写入镜像)
  1. 在项目的根目录下,新建一个文本文件 vim Dockerfile,写入下面的内容
FROM python:3.9.5
COPY . /app
WORKDIR /app
RUN pip install -r requ.txt -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
EXPOSE 50002
COPY . .
CMD gunicorn GIIKIN_RECOMMEN_WEB_v1:app -c gunicorn.conf.py
  1. 将 创建的文件 放在 项目文件中(注意Dockerfile 中的文件路径不要错误):
    执行: sudo docker build -t '(这里自己根据需要命名)':(标签也是) .注意 :不要忘了 最后的 .
    (还有就是:我这使用了 sudo 是因为,我的账户权限不够)

注意:代码最后的 . 不要忘了,

执行情况如下:

flask docker,Linux,docker,flask,eureka

  1. 查看镜像

命令:sudo docker images

flask docker,Linux,docker,flask,eureka

v1是标签:
IMAGE ID是镜像ID:
如果想要删除的话,可以这么做: docker rmi -f 镜像ID

  1. 当我们部署的时候,就可以将镜像文件,打包下来上传git,另外将容器的创建文件写好,以及执行命令,写好给使用者。
    打包命令可以使用:docker save -o giikin_recommen_web_v1.tar giikin_recommen_web:v1

3. 解决用户没有 root 权限,不能操作 镜像后包文件

因为我没有root权限,因此对打包后的镜像文件,没有办法下载,上传。因此可以更改 该包的权限。
操作方法:创建容器(注意:要将项目路径,也就是镜像包的路径映射进入容器中)–》进入容器–》更改权限。
具体做法如下:

  1. 查看镜像文件: sudo docker images
  2. 创建容器并且映射路径:
sudo docker run -it --privileged=true -v /home/(用户名字)/GIIKIN_ITEM_FILE:/home/GIIKIN_ITEM_FILE --name item_web01 9b0c771bafba bash

item_web01 :容器名字
9b0c771bafba :镜像ID
/home/(用户名字)/GIIKIN_ITEM_FILE:项目路径
/home/GIIKIN_ITEM_FILE:映射到容器中的路径

  1. cd 到项目路径
  2. 键入: ls -l 来查看文件权限

flask docker,Linux,docker,flask,eureka

  1. 依次键入:chmod 777 giikin_item_to_item_web_v1(要更改的文件名字).tarchown 1005 giikin_item_to_item_web_v1.tar
  2. 再次查看权限。

4. 创建容器之前,先来认识一下:docker-compose

创建容器可以使用这种方法:sudo docker container run -p 50002:50002 -it giikin_recommen_web /bin/bash但是该方法并没有达到我想要的效果,我想在容器启动时候,服务是启动。并且,这种方法有个弊端就是,一旦我的项目有什么变化,可能就需要重新构建镜像。
因此我这里使用 docker-compose方法进行创建容器。

1. docker-compose 的好处

  1. 简化部署:使用Docker Compose可以轻松地定义和配置多个容器,并将它们组合成一个应用程序。这使得部署变得非常简单,只需要一条命令即可启动整个应用。

  2. 可移植性:Docker Compose使用统一的配置文件来定义应用程序的环境、服务和依赖关系。这意味着你可以在不同的环境中轻松地复制和部署应用程序,而不会出现任何问题。

  3. 高效管理:通过Docker Compose,你可以方便地管理多个容器应用程序,包括启动、停止、重新构建和扩展等操作。这使得开发人员可以更加高效地处理应用程序的生命周期。

  4. 灵活性:Docker Compose允许你定义和组织多个容器,并指定它们之间的依赖关系和交互方式。这使得你可以轻松地创建复杂的应用程序架构,同时保持灵活性和可维护性。

2. docker-compose 的参数以及使用示例

up 命令:启动并运行所有定义的服务。
示例:docker-compose up

down 命令:停止并删除所有已经运行的服务。
示例:docker-compose down

build 命令:构建镜像。
示例:docker-compose build

start 命令:启动服务。
示例:docker-compose start

stop 命令:停止服务。
示例:docker-compose stop

restart 命令:重启服务。
示例:docker-compose restart

logs 命令:查看服务的日志输出。
示例:docker-compose logs

ps 命令:列出当前正在运行的服务。
示例:docker-compose ps

5. 服务器部署:创建容器并且启动服务( docker-compose 创建容器 >>>> 后台启动服务)

好镜像创建完后,来创建我们想要的容器

  1. 先构建docker-compose.yml 脚本文件。:代码如下:
version: '3.3'
services: # web # 自定
  giikin_recommen_web01:  # 这些名字自定
    image: giikin_recommen_web:v1  # 镜像的名字以及 标签
    ports: # 我们的服务端口 进行映射,我这里为避免麻烦,一样
      - "50002:50002"  
    restart: always
    container_name: web01 # 容器的名字
    privileged: true
    volumes:# 这里是将你的项目地址与 容器中的工作地址做一个映射
      - ./:/home/giikin_recommen_item # 这里建议使用相对路径进行映射,避免不必要的麻烦
      - /etc/localtime:/etc/localtime   # 日志中的时间信息
    shm_size: 10g
    working_dir: /home/giikin_recommen_item #  容器中的工作地址
    command: gunicorn -c gunicorn.conf.py GIIKIN_RECOMMEN_WEB_v1:app # 接口服务启动代码
  1. 将该脚本文件放在项目中 如下:(就是放入项目文件中)

flask docker,Linux,docker,flask,eureka

  1. 执行 代码 :sudo docker-compose up 进行容器创建

执行代码如下:

flask docker,Linux,docker,flask,eureka

  1. 如此就完成容器创建

那么想要让服务后台 一直执行可以执行: nohup sudo docker-compose up & 即可:
注意:
停止容器代码:sudo docker stop (容器ID)
删除容器: sudo docker rm (容器ID)

6. 调用服务测试

  1. git clone项目中的 docker-compose.ymlgiikin_recommen_web_v1.tar 文件

  2. 加载docker环境镜像:sudo docker load -i giikin_recommen_web_v1.tar

  3. 启动容器并且启动接口服务
    sudo docker-compose up (该方法不具备后台运行)
    nohup sudo docker-compose up &(具备后台运行)

  4. sudo docker-compose down #关闭容器服务

四:不删除镜像情况下,给镜像新增Python包

1. 操作步骤

1.1. 清除不使用的容器:sudo docker rm giikin_recommen_and_item_web_03
1.2. 创建一个容器: sudo docker run -itd --name myweb giikin_recommen_and_item_web:v1 bash
1.3. 查看容器: sudo docker ps
1.4. 进入容器:sudo docker exec -it myweb bash
1.5. 通过pip进行安装:
1.6. 进行镜像更新:sudo docker commit 1ede40b020be(安装新增包的容器) giikin_recommen_and_item_web:v1(需要更新的镜像) 注意:这里更新的是本地的镜像,并没有同步更新云上的镜像.文章来源地址https://www.toymoban.com/news/detail-798591.html

到了这里,关于使用 docker 快速部署 flask接口服务 一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Docker在Linux服务器本地部署PaddleSpeech Web服务

    1. 从官方Docker Hub拉取环境 2. 启动容器并分派端口 3. 自然语言处理工具库NLTK安装 方法一:使用 nltk 自带的 download() 下载,由于国内网络问题,大概率失败。 方法二:从下载文件手动安装包。 链接:https://pan.baidu.com/s/1nQveCEAucFSNbuOAsrs6yw?pwd=yydh 提取码:yydh 从百度网盘下载nlt

    2024年01月20日
    浏览(51)
  • Linux下使用Docker部署MinIO存储服务实现远程上传

    本文主要是Linux下通过Docker部署MinIO存储服务实现远程上传的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日一句:努力一点,优秀一点 前言 MinIO是一个开源的对象存储服务器,可以在各种环

    2024年02月19日
    浏览(41)
  • 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - Docker)

    目录 安装 Docker 安装 PaddleOCR 安装 准备PaddleServing的运行环境, 模型转换 Paddle Serving pipeline部署 重启 测试 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 预测部署简介与总览 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理(离线部署) 百度飞桨(Paddl

    2024年02月07日
    浏览(50)
  • 如何使用Docker将.Net6项目部署到Linux服务器(一)

    目录 一 配置服务器环境 1.1 配置yum                                                                                                                     1.1.1 更新yum包 1.1.2 yum命令 1.2 配置docker                                                           

    2024年02月04日
    浏览(47)
  • Docker中快速部署Zookeeper服务

      最近在研究分布式ID,在使用美团的Leaf的时候基于Snowflake的实现我们需要通过Zookeeper来实现动态管理workId。所以记录下在Docker中快速安装Zookeeper的过程   你可以在 Docker Hub上搜索相关版本的镜像,也可以通过命令直接拉取最新的   然后创建对应的目录来挂载Zookeepe

    2024年02月16日
    浏览(41)
  • 使用IIS服务器部署Flask python Web项目

    参考文章 参考文章 将Flask应用程序部署到IIS服务器上需要一些步骤,因为IIS是为.NET应用程序设计的。要将Flask Python Web项目部署到IIS服务器,您需要使用一个称为\\\"FastCGI\\\"的桥接工具来连接IIS和Python应用程序。以下是将Flask应用程序部署到IIS服务器的一般步骤: 安装IIS和FastCG

    2024年04月16日
    浏览(53)
  • 使用flask将paddleocr车牌检测模型部署到服务器上

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 最近,需要写一个程序把PaddleOcr的车牌检测模型部署到服务器上,写成接口的形式,方便他人调用。经过1个星期的努力,终于实现基本功能。因为是第一次接触,所以踩了很多弯路,当然,网上很多教

    2024年01月17日
    浏览(58)
  • 华为云云耀云服务器L实例评测|使用Linux系统与Docker部署.net/c#项目

    目录 前言 如何在CentOS运行项目 登录CentOS 使用Rider打包 使用Visual Studio打包 项目运行 后台运行 开放端口  如何在Docker中运行项目 项目运行 本章详细介绍,.net Core项目从打包到部署上华为云云耀云服务器L实例的过程与一些细节问题。在这里我们分别以系统镜像的CentOS和应用

    2024年02月09日
    浏览(45)
  • 基于docker-compose编排部署pig微服务快速开发框架

    基于docker-compose编排部署Pig微服务快速开发框架 1.规划节点 IP 主机名 节点 192.168.100.10 master docker-compose节点 2.基础准备 将软件包上传至master节点/root目录下 案例实施 1.基础环境准备 (1)上传软件包 导入Centos:7.9.2009镜像 查看集群状态 2.容器化部署MariaDB (1)编写Dockerfile 编写mysql

    2024年02月16日
    浏览(45)
  • 华为悦盒ec6108v9c使用ADB通过U盘刷Linux(Ubuntu)并使用docker部署alist服务器

    adb连接盒子IP: adb connect 192.168.3.4 进入adb shell: adb shell 在安卓后台终端输入以下命令,读取盒子的 reg name 管脚对应名称: cat /dev/block/mmcblk0p1 | grep -a hi3798m 2.1 下载线刷固件包(20220808版本): https://cloud.189.cn/web/share?code=meqmaa22qay2(访问码:gy6v) 我的盒子版本对应需要下载的是

    2024年01月22日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包