docker部署基于gunicorn的flask-resful服务,flask本身自带的服务部署占用服务器资源
2023-09-11 14:14:27 时间
一、
程序已经跟docker容器绑定了,只要docker后台运行程序就能后台了,所以不必开守护进程
守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。 [1]
个人理解守护进程和普通进程区别是指:将后台程序变成一种服务,比如说,用命令行输入启动程序,如果不是守护进程的话,一旦命令行窗口关闭,程序就终止了;而如果启动守护进程,则退出命令行窗口之后,服务一直处于运行状态。
二、
今天登陆服务器发现python占用了相当高比例的cpu,然后发现是本站点使用flask做的的一些web小工具带来的,因此总算明白了启动flask的时候为什么提示不要在生产环境直接部署。0-0。因此决定部署好flask的生产环境,由于大部分人都对gunicorn评价很好,容易配置,因此本文也使用gunicorn来部署flask的生产环境了。
可以通过cat指令查看linux文件的内容
CMD
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
CMD 在docker run 时运行。
RUN 是在 docker build。
作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
# -*- coding: utf-8 -*-
"""
"""
import multiprocessing
bind = '0.0.0.0:9537' # 绑定监听ip和端口号
workers = multiprocessing.cpu_count() * 2 # 同时执行的进程数,推荐为当前CPU个数*2+1
worker_class = "gevent" # sync, gevent,meinheld #工作模式选择,默认为sync,这里设定为gevent异步
backlog = 2048 # 等待服务客户的数量,最大为2048,即最大挂起的连接数
max_requests = 1000 # 默认的最大客户端并发数量
timeout = 600 # 进程沉默超时多少秒,杀死进程
daemon = False # 是否后台运行
reload = False # 当代码有修改时,自动重启workers。适用于开发环境。
capture_output = True # 将 stdout/stderr 重定向到错误日志中的指定文件。
loglevel = 'debug' # debug, info, warning, error, critical.
pidfile = 'logs/gunicore.pid' # 设置pid文件的文件名
accesslog = 'logs/gunicorn.log' # 设置访问日志
errorlog = 'logs/gunicorn.err.log' # 设置问题记录日志
FROM python:3.7.4
COPY . /deploy
WORKDIR /deploy
RUN pip config set global.index-url https://mirror.baidu.com/pypi/simple \
&& pip install --upgrade setuptools \
&& pip install --upgrade pip \
&& pip install -r requirements.txt \
&& python3 paddle_model.py
EXPOSE 9537
ENTRYPOINT ["gunicorn", "-c", "gunicorn_cfg.py", "main_api:app"]
注意执行指令里面的参数是双引号,不能是单引号
三 特别注意在程序里面不要配置argparse参数,否则会和gunicorn传参冲突并报错
四,内存报错,去掉多个进程,防止加载多套独立的程序导致内存溢出
1.查看CPU信息
cat /proc/cpuinfo //这个命令可以查看很详细的CPU信息
2.查看CPU指令集
gcc -march=native -Q --help=target | grep march //这个命令只查看CPU指令集
3.查看内存信息
cat /procmeminfo //这个命令可以查看很详细的内存信息
# -*- coding: utf-8 -*-
import multiprocessing
bind = "0.0.0.0:9537" # 绑定监听ip和端口号
# workers = multiprocessing.cpu_count() * 2 # 同时执行的进程数,推荐为当前CPU个数*2+1
workers = 1
worker_class = "gevent" # sync, gevent,meinheld #工作模式选择,默认为sync,这里设定为gevent异步
backlog = 2048 # 等待服务客户的数量,最大为2048,即最大挂起的连接数
max_requests = 1000 # 默认的最大客户端并发数量
timeout = 600 # 进程沉默超时多少秒,杀死进程
daemon = False # 是否后台运行
reload = False # 当代码有修改时,自动重启workers。适用于开发环境。
capture_output = True # 将 stdout/stderr 重定向到错误日志中的指定文件。
loglevel = "error" # debug, info, warning, error, critical.
pidfile = "logs/gunicore.pid" # 设置pid文件的文件名
accesslog = "logs/gunicorn.log" # 设置访问日志
errorlog = "logs/gunicorn.err.log" # 设置问题记录日志
相关文章
- 阿里云部署Docker(9)----Dockerfile脚本定制你的镜像
- Docker 系列(十):docker服务发现
- Docker实战部署应用——MySQL5.7
- caffe py3 docker
- 【Docker】docker的安装和常用命令
- win10 docker 安装部署
- docker + jenkins + flask 部署,持续化集成
- 运维基础之Docker(2)通过docker部署zookeeper nginx tomcat java redis kibana/elasticsearch/logstash mysql kafka mesos/marathon ftp git
- Docker教程---部署LAMP搭建wordpress博客系统
- Docker docker部署以及运行你的第一个容器
- ASP.NETCore微服务(七)——【docker部署linux上线】(ECS+linux+docker+API上线部分)
- 【最全最详细】Jenkins+Docker 一键自动化部署 SpringBoot 项目
- Docker swarm 使用服务编排部署lnmp
- 020-docker镜像UnionFS、Docker镜像加载原理、分层的镜像与容器、结合docker命令理解镜像
- 【云原生之Docker实战】使用docker部署Monica个人开源CRM系统
- 【云原生之Docker实战】使用docker部署mm-wiki文档系统
- 【云原生之Docker实战】使用Docker部署宝塔面板
- 【云原生之Docker实战】使用Docker部署StackEdit在线Markdown编辑器
- 【云原生之Docker实战】使用docker部署webssh工具
- 【云原生之Docker实战】使用docker部署Notepad个人记事本工具
- 【云原生之Docker实战】使用Docker部署Redmine项目管理平台
- 【云原生之Docker实战】使用Docker部署Lsky Pro个人图床平台
- 【云原生之Docker实战】使用Docker部署Focalboard项目管理工具
- 【云原生之Docker实战】部署CasaOS家庭云系统管理平台
- docker 搭建nginx
- 使用docker compose部署服务
- Docker 部署 MySQL 一主多从
- Docker学习笔记15:docker使用之Swarm 集群管理
- 云原生之使用Docker部署Dailynotes个人笔记管理工具
- 猿创征文 | 国产数据库实战之使用Docker部署TiDB集群
- 推送docker镜像至Docker Hub
- docker企业级私有仓库harbor部署配置(十三)