# docker-flask **Repository Path**: wujinjie_wyt/docker-flask ## Basic Information - **Project Name**: docker-flask - **Description**: docker打包flask + gunicorn 部署, 挂载日志跟暴露端口 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-08-02 - **Last Updated**: 2024-05-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # docker-flask #### 使用具备条件说明 1. 熟悉基本linux系统 2. docker已经安装 3. 启动gunicorn是通过加载配置文件的方式启动 #### 介绍 docker打包flask + gunicorn 部署, 挂载日志跟暴露端口 #### 软件架构 软件架构说明 python3.7 + Flask + gunicorn #### 安装教程 1. 将Python的依赖包导出 ``` pip freeze > req.txt ``` ``` 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 ``` 2. 编写gunicorn文件 [gunicorn官网]: https://docs.gunicorn.org/en/stable/index.html ``` 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' ``` 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 ``` 4. 执行命令(在Dockerfile目录下执行) docker build -t 'testflask' . ![](./img/1.png) 显示 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 ``` 命令说明: -v /data/docker-flask/log:/Project/demo/log 挂载linux本机地址: 容器内地址 -it 以交互模式运行容器 -d 后台运行(需要自己加上) -p linux端口: 容器内部端口 --rm 停止容器就删除容器(一般只在测试用, 不需要自己删除) 其他命令请查看 [docker官网]: https://docs.docker.com/get-started/ 其他你可能使用到的命令 ``` 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. 启动gunicorn一直启动woker或者 RuntimeWarning: greenlet.greenlet size changed 愿因: gunicorn 跟gevent不兼容, 可参考上面的req.txt的版本 ![](./img/2.png) 2. 未上传到docker仓库