• docker打包flask+gunicore


    docker-flask

    gitee地址
    需要项目自行提取

    使用具备条件说明

    1. 熟悉基本linux系统
    2. docker已经安装
    3. 启动gunicorn是通过加载配置文件的方式启动

    介绍

    docker打包flask + gunicorn 部署, 挂载日志跟暴露端口

    软件架构

    软件架构说明

    python3.7 + Flask + gunicorn

    安装教程

    1. 将Python的依赖包导出

      pip freeze > req.txt
      
      • 1
      click==8.1.3
      colorama==0.4.5
      Flask==2.1.3
      importlib-metadata==4.12.0
      itsdangerous==2.1.2
      Jinja2==3.1.2
      MarkupSafe==2.1.1
      typing_extensions==4.3.0
      Werkzeug==2.2.1
      zipp==3.8.1
      gevent==21.12.0
      gunicorn==20.0.4
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    2. 编写gunicorn文件

      workers = 1
      worker_class = "gevent"
      bind = "0.0.0.0:5002"
      # 保存的进程id
      pidfile = './g.pid'
      # 设置日志记录水平
      loglevel = 'info'
      # 设置错误信息日志路径
      errorlog = './log/error.log'
      # 设置访问日志路径
      accesslog = './log/access.log'
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    3. 编写Dockerfile

      FROM python:3.7
      WORKDIR /Project/demo
      
      COPY req.txt ./
      RUN pip install -r req.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
      
      COPY . .
      # 这句其实就是 gunicorn run:app -c gunicorn.conf.py 可以先在linux启动, 测试gunicorn是否能正常启动项目
      CMD ["gunicorn", "run:app", "-c", "gunicorn.conf.py"]
      # 暴露端口
      EXPOSE 5000 5001 5002
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    4. 执行命令(在Dockerfile目录下执行)

      docker build -t ‘testflask’ .

    在这里插入图片描述

    显示

    Successfully built 565e620a3eb1
    Successfully tagged testflask:latest

    则打包成功

    这时候你可以查看docker images 里面有一个testflask镜像

    启动容器
    docker run -v /data/docker-flask/log:/Project/demo/log -it --rm -p 5002:5002 testflask
    
    • 1

    命令说明:

    -v /data/docker-flask/log:/Project/demo/log 挂载linux本机地址: 容器内地址

    -it 以交互模式运行容器

    -d 后台运行(需要自己加上)

    -p linux端口: 容器内部端口

    –rm 停止容器就删除容器(一般只在测试用, 不需要自己删除)

    其他命令请查看

    其他你可能使用到的命令

    lsof -i:5000  # 查看端口占用
    
    docker images  # 查看所有镜像
    docker ps  # 查看正在运行的容器
    docker ps -a  # 查看所有启动过的容器(启动失败也会占用--name, 所以有时候报name save 就需要你用docker rm 容器id)
    docker rm 容器id  # 删除stop的容器
    docker rmi 镜像id  # 删除镜像
    docker restart  镜像id  # 重启容器
    
    gunicorn run:app -c gunicorn.conf.py  # 启动gunicorn
    ps -ef|grep run.py  # 查看启动的run.py的进程(grep 搜索名称)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    其他问题

    1. 启动gunicorn一直启动woker或者 RuntimeWarning: greenlet.greenlet size changed

      愿因: gunicorn 跟gevent不兼容, 可参考上面的req.txt的版本
      在这里插入图片描述

    2. 未上传到docker仓库

  • 相关阅读:
    一款WPF开发的网易云音乐客户端 - DMSkin-CloudMusic
    Golang 本地缓存选型对比及原理总结
    云上未来,数智导航:阿里云研究院报告合集
    华为网络工程师认证有了解的吗?
    【Day_13 0509】参数解析
    【NestJS系列】从Nest CLI开始入门
    Serverless 架构落地实践及案例解析
    优秀案例 | 三峡游客中心AI交互数字人“鲟侠船长”,数实融合赋能景区沉浸游玩体验
    跟着代码随想录练算法 —— 动态规划(JS)
    PostgreSQL 同步复制原理解析
  • 原文地址:https://blog.csdn.net/qq_41929657/article/details/126120978